Recherche de données dans plusieurs feuilles Excel

2
318

Bonjour et bienvenue sur cette vidéo ou nous allons voir ensemble comment faire une recherche de données dans plusieurs feuils Excel. Et pour cela nous allons construire ensemble une petite application de tache qui nous permet de tracer le status d’une de nos tâches.

Alors nous allons voir comment faire la recherche, nous allons aussi voire comment créer et remplir notre barre de progression qui représente la progression de nos taches donc ouvert, occuper et fermer, et pour finir nous allons voir comment déplacer automatiquement les données d’un tableau à un autre quand on change de status.

Recherche de données dans plusieurs feuilles

Nous allons commencer par la recherche de données dans plusieurs feuilles avec un la formule recherchex qui nous permet de rechercher des données dans un tableau, si vous voulez plus d’information sur la formule recherchex je vous invite à voire la vidéo.

Et donc un des paramètres de la formule est si une recherche n’est pas trouver, et nous allons utiliser ce paramètre afin de refaire une autre recherchex qui va chercher la même donnée mais dans une autre page.

=RECHERCHEX(C3;Tableau14[Tache];Tableau14[Status];RECHERCHEX(Home!C3;Tableau13[Tache];Tableau13[Status];RECHERCHEX(Home!C3;Tableau1[Tache];Tableau1[Status];””)))

Création barre de progression

Désormais que nous avons le status de notre tâche nous voulons l’afficher dans une barre de progression afin de rendre cela plus visible. Et donc nous allons prendre 3 formes où nous allons placer le status de progression et donner à chacun de nos forme un nom.

Coder la barre de progression

Puis aller sur le code de la page dans un événement change. Ici nous allons devoir vérifier si la recherche a changé alors on va récupérer la valeur de recherche donc le résultat de recherche sur base 7 résultat de recherche nous allons dire qu’il faut modifier la couleur de fond des formes qu’on a créé et cela on le fait comme suite

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("c3")) Is Nothing Then
        Dim fillColor As Long
        Dim emptyColor As Long        
        fillColor = RGB(0, 176, 80)
        emptyColor = RGB(189, 215, 238)        
        Select Case Range("c4").Value
            Case "open"
                changeColor fillColor, emptyColor, emptyColor
            Case "progress"
                changeColor fillColor, fillColor, emptyColor
            Case "close"
                changeColor fillColor, fillColor, fillColor
             Case Else
               changeColor emptyColor, emptyColor, emptyColor
        End Select
    End If
End Sub

Private Function changeColor(openCol As Long, progressCol As Long, closeCol As Long)
    Dim homePage As Worksheet
    Set homePage = ThisWorkbook.Sheets("home")    
    homePage.Shapes("open").Fill.ForeColor.RGB = openCol
    homePage.Shapes("progress").Fill.ForeColor.RGB = progressCol
    homePage.Shapes("close").Fill.ForeColor.RGB = closeCol
End Function

Déplacement de données préparation

Maintenant nous allons donc travailler sous la partie qui nous permettra de déplacer les données d’une base donnée vers une autre au moment qu’on change le statut. C’est-à-dire que si dans la base de données open on change le statut en progress alors là donnée qui se trouve dans la base de données au peuple doit être déplacé vers la base de données progress

Mais avant de pouvoir faire cela nous allons devoir faire quelques préparations les préparations à faire c’est de nommer les champs qui comporte le statut dans chaque tableau

Création de la classe statuschange

Nous allons créer une nouvelle classe qui va donc s’occuper du changement des données quand on change le statut. Et dans cette classe nous allons créer une fonction qui s’appelle New statut qui aura donc 2 paramètres qui est le target c’est-à-dire le ranch qu’on va changer et la statue speech qui va donc représenter ou les données vont être transférées sur quelle page.

Et donc dans notre fonction nous allons contrôler si le status page donc la page de destination n’est pas égale à la page actuelle puisqu’on fait le changement alors on va faire quelque chose sinon on ne fait rien. La logique à appliquer on va la créer un peu plus tard.

Public Function newStatus(Target As Range, statusPage As String)
On Error GoTo nextStep
    Select Case Target.Value
        Case "open"
            If statusPage <> "open" Then

            End If
        Case "progress"
            If statusPage <> "progress" Then

            End If
        Case "close"
            If statusPage <> "close" Then

            End If
        Case Else
    End Select       
nextStep:
End Function 

La fonction Movedata  24 :20

Alors nous allons créer une nouvelle fonction dans notre classe qui se nommera movedata et cette fonction va prendre 3 paramètres le premier paramètre est la page de destination le 2nd paramètre et le numéro de ligne de la donnée actuelle on va récupérer depuis le target et pour finir le nom de la page de destination.

Avec ces paramètres dans la fonction on va vérifier si la page de destination la première ligne du tableau n’est pas vide alors nous allons récupérer le numéro de ligne de la prochaine entrée qui est vide sinon on va récupérer le numéro de ligne tu première ligne du tableau.

Une fois qu’on connaît le numéro de ligne de la page de destination on va tout simplement reprendre les données de la page actuelle et les placer dans la dernière ligne du tableau de la page destinataire, puis nous allons effacer la ligne complète de la page actuelle et nous allons changer la recherche sur la page home avec la valeur déjà présent dans la cellule recherche, ceci afin de rafraîchir la recherche et mettre à jour de nouveau notre barre de progression sur la page home.

Private Function moveData(statusPage As String, rowNumber As Long, destinationPage As String)              
    Dim lineNumber As Long        
    If Sheets(destinationPage).Range("b3") <> "" Then
        lineNumber = Worksheets(destinationPage).Range("b99999").End(xlUp).Row + 1
    Else
        lineNumber = 3
    End If                    
    Sheets(destinationPage).Range("b" &amp; lineNumber) = Sheets(statusPage).Range("b" &amp; rowNumber)
    Sheets(destinationPage).Range("c" &amp; lineNumber) = Sheets(statusPage).Range("c" &amp; rowNumber)                    
    Sheets(statusPage).Rows(rowNumber).EntireRow.Delete    
    Sheets("home").Range("c3") = Sheets("home").Range("c3")   
End Function 

Appeler le statuschange 33 :30

la seule chose qui nous reste à faire avant de terminer c’est de faire appel à la classe créer dans chacune des pages où nous voulons faire appliquer le changement de base de données. Et nous voulons appliquer ce changement uniquement si un des champs qui comporte les statuts ont changé

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("openstatus")) Is Nothing Then 
        Dim statusChange As New statusChange
        statusChange.newStatus Target, "open"
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("progressStatus")) Is Nothing Then
        Dim statusChange As New statusChange
        statusChange.newStatus Target, "progress"
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("closeStatus")) Is Nothing Then
        Dim statusChange As New statusChange
        statusChange.newStatus Target, "close"
    End If
End Sub

 

Conclusion

Nous avons vu ensemble comment il est très facile de recherche et des données sur plusieurs pages et dans différents tableaux grâce à la fonction recherchex, puis nous avons aussi vu qu’il est très facile de créer une barre de progression avec un peu de code vba et la partie un peu plus difficile qui n’est pas vraiment trop difficile c’était de déplacer les données d’un tableau vers une autre tableau. Voilà voilà j’espère que cette information vous a plu et on se retrouve dans une prochaine vidéo salut tout le monde

2 Commentaires

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.