Recherchez une valeur dans plusieurs colonne
Résoluvolfoss Messages postés 43 Statut Membre -
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
- Moyenne.si excel
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
5 réponses
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question