Recherchez une valeur dans plusieurs colonne

Résolu
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -  
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

j'ai une macro qui fonctionne parfaitement pour rechercher une valeur dans une colonne (o) par contre je n'arrive pas à faire fonctionner cette macro pour effectuer la recherche sur plusieurs colonnes (à savoir les colonnes H à V).

Voici le code qui fonctionne :

im Mot As String, MyValue As String
Dim lig As Long, n As Long
Dim Plage As Range

'recherche feuille "Registre"
 With Worksheets("Registre")

'Définition de la variable à rechercher
        Mot = InputBox("Saisir le N° de fiche à chercher. ", Title:="Recherche Fiche")
        
'Reponse non vide
        If Mot <> "" Then
        Set Plage = .Range("O7:O" & .Range("O" & Rows.Count).End(xlUp).Row)
        Nbre = Application.CountIf(Plage, Mot)        'nombre fois Mot colonne O
        If Nbre = 0 Then    'Message en cas de mot inexistant
        MyValue = MsgBox(" Le N° de fiche " & Mot & " n'est pas enregistré ", , " Recherche Fiche ")
        Else
        
'Recherche et changement couleur sur les cellules contenant le Mot
lig = 7     'ligne de depart recherche
For n = 1 To Nbre
lig = .Columns(15).Find(Mot, .Cells(lig, 15), , xlWhole).Row  ' mettre même chiffre dans columns(*) et cells(lig, *)
        With .Range(.Cells(lig, 1), .Cells(lig, 20)).Interior   'colorier les cellules de A a T
            .PatternColorIndex = xlAutomatic
             .Color = 5296274
         End With
Next n
MyValue = MsgBox(" Le N° de fiche " & Mot & " a été trouvé ", vbOKOnly, " Recherche Fiche ")
End If
End If
End With
 

Merci pour votre aide

5 réponses

volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   3
 

Merci j'avais volontairement mis que la partie du code qui fonctionne

2
Bruno83200_6929 Messages postés 621 Date d'inscription   Statut Membre Dernière intervention   138
 

Je pense voir le problème ! Le code utilise la colonne H pour déterminer la dernière ligne.

Essayez ceci :

Sub RechercheMultiColonnes()
    Dim Mot As String, MyValue As String
    Dim lig As Long, n As Long
    Dim Plage As Range, CelluleTrouvee As Range
    Dim DerniereColonne As Long, DerniereLigne As Long
    Dim Nbre As Long
    Dim i As Long, DerniereLigneTemp As Long
    
    'Recherche feuille "Registre"
    With Worksheets("Registre")
        'Définition de la variable à rechercher
        Mot = InputBox("Saisir le N° de fiche à chercher. ", Title:="Recherche Fiche")
        
        'Réponse non vide
        If Mot <> "" Then
            'Trouver la dernière ligne utilisée dans la plage H à V
            DerniereLigne = 7  ' Valeur par défaut
            
            'Vérifier chaque colonne de H à V pour trouver la vraie dernière ligne
            For i = 8 To 22  ' Colonnes H(8) à V(22)
                DerniereLigneTemp = .Cells(.Rows.Count, i).End(xlUp).Row
                If DerniereLigneTemp > DerniereLigne Then
                    DerniereLigne = DerniereLigneTemp
                End If
            Next i
            
            'S'assurer qu'on a au moins la ligne 7
            If DerniereLigne < 7 Then DerniereLigne = 7
            
            'Plage de recherche : H7 à V[dernière ligne]
            Set Plage = .Range("H7:V" & DerniereLigne)
            
            'Compter le nombre d'occurrences dans toute la plage
            Nbre = Application.CountIf(Plage, Mot)
            
            If Nbre = 0 Then    'Message en cas de mot inexistant
                MyValue = MsgBox(" Le N° de fiche " & Mot & " n'est pas enregistré ", , " Recherche Fiche ")
            Else
                'Recherche et changement couleur sur les cellules contenant le Mot
                Set CelluleTrouvee = Plage.Find(What:=Mot, LookIn:=xlValues, LookAt:=xlWhole)
                
                If Not CelluleTrouvee Is Nothing Then
                    Dim PremiereTrouvee As String
                    PremiereTrouvee = CelluleTrouvee.Address
                    
                    'Boucle pour colorier toutes les lignes contenant le mot
                    Do
                        lig = CelluleTrouvee.Row
                        'Colorier les cellules de A à T pour la ligne trouvée
                        With .Range(.Cells(lig, 1), .Cells(lig, 20)).Interior
                            .PatternColorIndex = xlAutomatic
                            .Color = 5296274
                        End With
                        
                        'Chercher la prochaine occurrence
                        Set CelluleTrouvee = Plage.FindNext(CelluleTrouvee)
                        
                    Loop While Not CelluleTrouvee Is Nothing And CelluleTrouvee.Address <> PremiereTrouvee
                End If
                
                MyValue = MsgBox(" Le N° de fiche " & Mot & " a été trouvé " & Nbre & " fois ", vbOKOnly, " Recherche Fiche ")
            End If
        End If
    End With
End Sub

Si la colonne H est vide, la macro ne prend pas en compte les lignes où il n'y a de données que dans les colonnes I à V. J'ai remplacé une instruction par une boucle qui vérifie toutes les colonnes de H à V


1
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   3
 

Nickel tout fonctionne

1
Bruno83200_6929 Messages postés 621 Date d'inscription   Statut Membre Dernière intervention   138
 

Bonjour,

Je vois le problème ! Votre macro actuelle recherche uniquement dans la colonne O (colonne 15). Pour étendre la recherche aux colonnes H à V, vous devez modifier la logique pour rechercher dans une plage multi-colonnes.
Voici le code modifié pour rechercher dans les colonnes H à V :

Sub RechercheMultiColonnes()
    Dim Mot As String, MyValue As String
    Dim lig As Long, n As Long
    Dim Plage As Range, CelluleTrouvee As Range
    Dim DerniereColonne As Long, DerniereLigne As Long
    Dim Nbre As Long
    
    'Recherche feuille "Registre"
    With Worksheets("Registre")
        'Définition de la variable à rechercher
        Mot = InputBox("Saisir le N° de fiche à chercher. ", Title:="Recherche Fiche")
        
        'Réponse non vide
        If Mot <> "" Then
            'Définir la plage de recherche (colonnes H à V, lignes 7 à dernière ligne utilisée)
            DerniereLigne = .Cells(.Rows.Count, 8).End(xlUp).Row  ' Colonne H pour déterminer la dernière ligne
            If DerniereLigne < 7 Then DerniereLigne = 7
            
            'Plage de recherche : H7 à V[dernière ligne]
            Set Plage = .Range("H7:V" & DerniereLigne)
            
            'Compter le nombre d'occurrences dans toute la plage
            Nbre = Application.CountIf(Plage, Mot)
            
            If Nbre = 0 Then    'Message en cas de mot inexistant
                MyValue = MsgBox(" Le N° de fiche " & Mot & " n'est pas enregistré ", , " Recherche Fiche ")
            Else
                'Recherche et changement couleur sur les cellules contenant le Mot
                Set CelluleTrouvee = Plage.Find(What:=Mot, LookIn:=xlValues, LookAt:=xlWhole)
                
                If Not CelluleTrouvee Is Nothing Then
                    Dim PremiereTrouvee As String
                    PremiereTrouvee = CelluleTrouvee.Address
                    
                    'Boucle pour colorier toutes les lignes contenant le mot
                    Do
                        lig = CelluleTrouvee.Row
                        'Colorier les cellules de A à T pour la ligne trouvée
                        With .Range(.Cells(lig, 1), .Cells(lig, 20)).Interior
                            .PatternColorIndex = xlAutomatic
                            .Color = 5296274
                        End With
                        
                        'Chercher la prochaine occurrence
                        Set CelluleTrouvee = Plage.FindNext(CelluleTrouvee)
                        
                    Loop While Not CelluleTrouvee Is Nothing And CelluleTrouvee.Address <> PremiereTrouvee
                End If
                
                MyValue = MsgBox(" Le N° de fiche " & Mot & " a été trouvé " & Nbre & " fois ", vbOKOnly, " Recherche Fiche ")
            End If
        End If
    End With
End Sub

0
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   3
 

Mon tableau est évolutif par le rajout de ligne au fur et à mesure de nouvelles entrées, le code ne recherche pas dans la ligne que je rajoute à la fin de mon tableau

0
Bruno83200_6929 Messages postés 621 Date d'inscription   Statut Membre Dernière intervention   138
 

Merci pour la précision ! Si votre tableau est évolutif avec des lignes ajoutées dynamiquement et que la macro ne recherche pas dans la dernière ligne ajoutée, c'est probablement parce que la plage de recherche (Plage) n'est pas correctement mise à jour pour inclure la dernière ligne. Cela peut arriver si la détermination de la dernière ligne via .Range("H" & Rows.Count).End(xlUp).Row ne prend pas en compte les nouvelles lignes ajoutées dynamiquement.

Essayez ceci :

Sub RechercheFicheMultiColonnes()
    Dim Mot As String, MyValue As String
    Dim lig As Long, col As Long
    Dim Plage As Range
    Dim Nbre As Long
    Dim Found As Boolean
    Dim DerniereLigne As Long

    'Recherche dans la feuille "Registre"
    With Worksheets("Registre")
        'Définition de la variable à rechercher
        Mot = InputBox("Saisir le N° de fiche à chercher.", Title:="Recherche Fiche")
        
        'Vérifier si la réponse n'est pas vide
        If Mot <> "" Then
            'Trouver la dernière ligne non vide parmi les colonnes H à V
            DerniereLigne = 7 'Ligne minimale par défaut
            For col = 8 To 22 'Colonnes H à V
                DerniereLigne = Application.Max(DerniereLigne, .Cells(.Rows.Count, col).End(xlUp).Row)
            Next col
            
            'Définir la plage de recherche (colonnes H à V, à partir de la ligne 7 jusqu'à la dernière ligne)
            Set Plage = .Range("H7:V" & DerniereLigne)
            Nbre = Application.CountIf(Plage, Mot) 'Compte le nombre d'occurrences de Mot dans la plage
            
            'Si aucune occurrence n'est trouvée
            If Nbre = 0 Then
                MyValue = MsgBox("Le N° de fiche " & Mot & " n'est pas enregistré.", , "Recherche Fiche")
            Else
                Found = False
                'Parcourir chaque colonne de H (8) à V (22)
                For col = 8 To 22
                    lig = 7 'Ligne de départ pour la recherche
                    'Rechercher dans la colonne courante
                    Do
                        On Error Resume Next
                        Set Plage = .Cells(lig, col).Find(What:=Mot, After:=.Cells(lig, col), LookIn:=xlValues, LookAt:=xlWhole)
                        On Error GoTo 0
                        
                        If Not Plage Is Nothing Then
                            lig = Plage.Row
                            'Colorier les cellules de A à T sur la ligne trouvée
                            With .Range(.Cells(lig, 1), .Cells(lig, 20)).Interior
                                .PatternColorIndex = xlAutomatic
                                .Color = 5296274
                            End With
                            Found = True
                            lig = lig + 1 'Passer à la ligne suivante pour continuer la recherche
                        Else
                            Exit Do 'Sortir de la boucle si rien n'est trouvé dans cette colonne
                        End If
                    Loop Until lig > DerniereLigne
                Next col
                
                'Afficher le message de confirmation si au moins une occurrence a été trouvée
                If Found Then
                    MyValue = MsgBox("Le N° de fiche " & Mot & " a été trouvé.", vbOKOnly, "Recherche Fiche")
                End If
            End If
        End If
    End With
End Sub

0
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   3
 

Avec ce code il ne se passe plus rien

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bruno83200_6929 Messages postés 621 Date d'inscription   Statut Membre Dernière intervention   138
 

Pourriez-vous le donner l'ensemble de votre code initial du début. Merci !


0
volfoss Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   3
 

Merci pour votre aide en fait le premier code fonctionne il faut juste remplir la colonne H car si elle est vide le code ne prend pas en compte cette ligne même s'il y  a une valeur dans la colonne I.

0