Recherche de données sur plusieurs feuilles d'un classeur.
13 réponses
tigrou84
Bonjour,
Je suis à la recherche d'une macro qui me permettrai de vérifier que les données inscrites dans la première feuille sont bien inscrites dans les autres feuilles.
Je m'explique. J'ai un listing de 2000 à 3000 lignes avec des données( N°, Nom , prénom, catégories sportives, ages etc....). Sur les autres feuilles cette même liste est triée manuellement par catégories sportives et par sexe (hommes ou femmes).
J'aimerai trouver une macro qui me permettrai de vérifier (en surlignant d'une couleur vert par exemple) si toutes les données de ma première feuille (listing de départ) sont bien réparti dans les autres feuilles. voir si je n'ai pas oublié quelqu'un. Sachant que je met à jour de temps en temps la première feuille (listing de départ) et qu'actuellement je vérifie manuellement tous le listing.
Donc est il possible de faire une macro via un bouton de recherche (en fonction d'un numéro de licence par exemple) pour savoir si ce numéro de licence est bien dans une des autres feuilles de mon classeur excel. si oui, dans ce cas surlingner en Vert le numéro trouvé dans la premiere feuille, si non le surligner en Rouge. Cela me permettrai d'éviter des oublies de transfert.
D'avance je vous remercie pour toutes aides apportée.
E.P
Est ce que cette différence de format est uniquement sur le numéro de licence ( 1ere colonne) ou sur toutes les cellules de la ligne ? J'ai constaté que si j'insère une ligne vierge la macro surligne également....
Encore Merci
E.P
Tout ce qu'il y a entre le premier et le dernier numéro de licence est considéré comme un numéro de licence. Dans la logique de la macro, une cellule vierge sera considérée comme un numéro. C'est facilement corrigeable. Daniel
Bonsoir,
Est ce que cette différence de format est uniquement sur le numéro de licence
( 1ere colonne) ou sur toutes les cellules de la ligne ?
J'ai constaté que si j'insère une ligne vierge la macro surligne
également....
Encore Merci
E.P
Tout ce qu'il y a entre le premier et le dernier numéro de licence est
considéré comme un numéro de licence. Dans la logique de la macro, une
cellule vierge sera considérée comme un numéro. C'est facilement
corrigeable.
Daniel
Est ce que cette différence de format est uniquement sur le numéro de licence ( 1ere colonne) ou sur toutes les cellules de la ligne ? J'ai constaté que si j'insère une ligne vierge la macro surligne également....
Encore Merci
E.P
Tout ce qu'il y a entre le premier et le dernier numéro de licence est considéré comme un numéro de licence. Dans la logique de la macro, une cellule vierge sera considérée comme un numéro. C'est facilement corrigeable. Daniel
DanielCo
J'ai créee un bouton pour lancer la macro et fait une macro pour le reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et aussi pour le cas ou un numéro est présent sur une feuille, mais pas sur la principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1 Sub VerifTout() Dim sh As Worksheet, rng As Range, Verif() Dim i As Integer With Sheets("inscrits 10 11") 'définition de la plage de lafeuille "inscrits 10 11" Set rng = .Range(.[A2], .[J65536].End(xlUp)) End With 'la variable matricielle Verif est un tableau à deux entrées 'la première conrient les numéros de licence 'et à chaque fois qu'on rencontre un numéro de licence 'on fait + 1 en regard. Au final, on doit avoir "1" dans cette zone. 'copie des deux premiières colonnes de la plage principales dans Verif Verif = Application.Transpose(rng.Resize(, 2)) 'remise de la deuxième zone de Verif à zéro For i = 1 To rng.Rows.Count 'cas des cellules "license" vides If IsNull(Verif(1, i)) Then Verif = 1 Else Verif(2, i) = 0 End If Next i 'Boucle sur les autres feuilles For Each sh In Sheets With sh 'sauf la première If sh.CodeName <> "Feuil1" Then 'boucle sur les lignes de la feuille For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 'on cherche la correspondance Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0) 'si correspondance If IsNumeric(Var) Then Verif(2, Var) = Verif(2, Var) + 1 Else 'sinon (pas testé) sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2, 8)).Interior.ColorIndex = 3 End If Next i End If End With Next sh With Sheets("inscrits 10 11") 'boucle sur les occurences de Verif. Si la zone de contrôle est différente de 1 'coloriage For i = 1 To rng.Rows.Count If Verif(2, i) <> 1 Then .Range(.Cells(i + 1, 1), .Cells(i + 1, 12)).Interior.ColorIndex = 3 End If Next i End With End Sub
Daniel
J'ai créee un bouton pour lancer la macro et fait une macro pour le reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que
je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et aussi
pour le cas ou un numéro est présent sur une feuille, mais pas sur la
principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1
Sub VerifTout()
Dim sh As Worksheet, rng As Range, Verif()
Dim i As Integer
With Sheets("inscrits 10 11")
'définition de la plage de lafeuille "inscrits 10 11"
Set rng = .Range(.[A2], .[J65536].End(xlUp))
End With
'la variable matricielle Verif est un tableau à deux entrées
'la première conrient les numéros de licence
'et à chaque fois qu'on rencontre un numéro de licence
'on fait + 1 en regard. Au final, on doit avoir "1" dans cette
zone.
'copie des deux premiières colonnes de la plage principales dans
Verif
Verif = Application.Transpose(rng.Resize(, 2))
'remise de la deuxième zone de Verif à zéro
For i = 1 To rng.Rows.Count
'cas des cellules "license" vides
If IsNull(Verif(1, i)) Then
Verif = 1
Else
Verif(2, i) = 0
End If
Next i
'Boucle sur les autres feuilles
For Each sh In Sheets
With sh
'sauf la première
If sh.CodeName <> "Feuil1" Then
'boucle sur les lignes de la feuille
For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row
'on cherche la correspondance
Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0)
'si correspondance
If IsNumeric(Var) Then
Verif(2, Var) = Verif(2, Var) + 1
Else
'sinon (pas testé)
sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2,
8)).Interior.ColorIndex = 3
End If
Next i
End If
End With
Next sh
With Sheets("inscrits 10 11")
'boucle sur les occurences de Verif. Si la zone de contrôle est
différente de 1
'coloriage
For i = 1 To rng.Rows.Count
If Verif(2, i) <> 1 Then
.Range(.Cells(i + 1, 1), .Cells(i + 1,
12)).Interior.ColorIndex = 3
End If
Next i
End With
End Sub
J'ai créee un bouton pour lancer la macro et fait une macro pour le reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et aussi pour le cas ou un numéro est présent sur une feuille, mais pas sur la principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1 Sub VerifTout() Dim sh As Worksheet, rng As Range, Verif() Dim i As Integer With Sheets("inscrits 10 11") 'définition de la plage de lafeuille "inscrits 10 11" Set rng = .Range(.[A2], .[J65536].End(xlUp)) End With 'la variable matricielle Verif est un tableau à deux entrées 'la première conrient les numéros de licence 'et à chaque fois qu'on rencontre un numéro de licence 'on fait + 1 en regard. Au final, on doit avoir "1" dans cette zone. 'copie des deux premiières colonnes de la plage principales dans Verif Verif = Application.Transpose(rng.Resize(, 2)) 'remise de la deuxième zone de Verif à zéro For i = 1 To rng.Rows.Count 'cas des cellules "license" vides If IsNull(Verif(1, i)) Then Verif = 1 Else Verif(2, i) = 0 End If Next i 'Boucle sur les autres feuilles For Each sh In Sheets With sh 'sauf la première If sh.CodeName <> "Feuil1" Then 'boucle sur les lignes de la feuille For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 'on cherche la correspondance Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0) 'si correspondance If IsNumeric(Var) Then Verif(2, Var) = Verif(2, Var) + 1 Else 'sinon (pas testé) sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2, 8)).Interior.ColorIndex = 3 End If Next i End If End With Next sh With Sheets("inscrits 10 11") 'boucle sur les occurences de Verif. Si la zone de contrôle est différente de 1 'coloriage For i = 1 To rng.Rows.Count If Verif(2, i) <> 1 Then .Range(.Cells(i + 1, 1), .Cells(i + 1, 12)).Interior.ColorIndex = 3 End If Next i End With End Sub
Daniel
tigrou84
DanielCo a écrit le 23/02/2011 à 22h58 :
J'ai créee un bouton pour lancer la macro et fait une macro pour le reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et aussi pour le cas ou un numéro est présent sur une feuille, mais pas sur la principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1 Sub VerifTout() Dim sh As Worksheet, rng As Range, Verif() Dim i As Integer With Sheets("inscrits 10 11") 'définition de la plage de lafeuille "inscrits 10 11" Set rng = .Range(.[A2], .[J65536].End(xlUp)) End With 'la variable matricielle Verif est un tableau à deux entrées 'la première conrient les numéros de licence 'et à chaque fois qu'on rencontre un numéro de licence 'on fait + 1 en regard. Au final, on doit avoir "1" dans cette zone. 'copie des deux premiières colonnes de la plage principales dans Verif Verif = Application.Transpose(rng.Resize(, 2)) 'remise de la deuxième zone de Verif à zéro For i = 1 To rng.Rows.Count 'cas des cellules "license" vides If IsNull(Verif(1, i)) Then Verif = 1 Else Verif(2, i) = 0 End If Next i 'Boucle sur les autres feuilles For Each sh In Sheets With sh 'sauf la première If sh.CodeName <> "Feuil1" Then 'boucle sur les lignes de la feuille For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 'on cherche la correspondance Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0) 'si correspondance If IsNumeric(Var) Then Verif(2, Var) = Verif(2, Var) + 1 Else 'sinon (pas testé) sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2, 8)).Interior.ColorIndex = 3 End If Next i End If End With Next sh With Sheets("inscrits 10 11") 'boucle sur les occurences de Verif. Si la zone de contrôle est différente de 1 'coloriage For i = 1 To rng.Rows.Count If Verif(2, i) <> 1 Then .Range(.Cells(i + 1, 1), .Cells(i + 1, 12)).Interior.ColorIndex = 3 End If Next i End With End Sub
Daniel
Merci, Je vais tester la macro et vous tiens au courant....
Bonne nuit et encore merci....
E.P
DanielCo a écrit le 23/02/2011 à 22h58 :
J'ai créee un bouton pour lancer la macro et fait une macro pour le
reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que
je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et
aussi
pour le cas ou un numéro est présent sur une feuille, mais pas
sur la
principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1
Sub VerifTout()
Dim sh As Worksheet, rng As Range, Verif()
Dim i As Integer
With Sheets("inscrits 10 11")
'définition de la plage de lafeuille "inscrits 10 11"
Set rng = .Range(.[A2], .[J65536].End(xlUp))
End With
'la variable matricielle Verif est un tableau à deux entrées
'la première conrient les numéros de licence
'et à chaque fois qu'on rencontre un numéro de licence
'on fait + 1 en regard. Au final, on doit avoir "1" dans cette
zone.
'copie des deux premiières colonnes de la plage principales dans
Verif
Verif = Application.Transpose(rng.Resize(, 2))
'remise de la deuxième zone de Verif à zéro
For i = 1 To rng.Rows.Count
'cas des cellules "license" vides
If IsNull(Verif(1, i)) Then
Verif = 1
Else
Verif(2, i) = 0
End If
Next i
'Boucle sur les autres feuilles
For Each sh In Sheets
With sh
'sauf la première
If sh.CodeName <> "Feuil1" Then
'boucle sur les lignes de la feuille
For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row
'on cherche la correspondance
Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0)
'si correspondance
If IsNumeric(Var) Then
Verif(2, Var) = Verif(2, Var) + 1
Else
'sinon (pas testé)
sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2,
8)).Interior.ColorIndex = 3
End If
Next i
End If
End With
Next sh
With Sheets("inscrits 10 11")
'boucle sur les occurences de Verif. Si la zone de contrôle est
différente de 1
'coloriage
For i = 1 To rng.Rows.Count
If Verif(2, i) <> 1 Then
.Range(.Cells(i + 1, 1), .Cells(i + 1,
12)).Interior.ColorIndex = 3
End If
Next i
End With
End Sub
Daniel
Merci,
Je vais tester la macro et vous tiens au courant....
J'ai créee un bouton pour lancer la macro et fait une macro pour le reset.
Est ce que vous pouvez m'expliquer la macro, car il y a des expressions que je ne comprends pas....
D'avance je vous remercie,
EP
Voici le code commenté. J'ai modifié pour les lignes vierges et aussi pour le cas ou un numéro est présent sur une feuille, mais pas sur la principale. Je n'ai pas testé ce que j'ai ajouté.
Option Base 1 Sub VerifTout() Dim sh As Worksheet, rng As Range, Verif() Dim i As Integer With Sheets("inscrits 10 11") 'définition de la plage de lafeuille "inscrits 10 11" Set rng = .Range(.[A2], .[J65536].End(xlUp)) End With 'la variable matricielle Verif est un tableau à deux entrées 'la première conrient les numéros de licence 'et à chaque fois qu'on rencontre un numéro de licence 'on fait + 1 en regard. Au final, on doit avoir "1" dans cette zone. 'copie des deux premiières colonnes de la plage principales dans Verif Verif = Application.Transpose(rng.Resize(, 2)) 'remise de la deuxième zone de Verif à zéro For i = 1 To rng.Rows.Count 'cas des cellules "license" vides If IsNull(Verif(1, i)) Then Verif = 1 Else Verif(2, i) = 0 End If Next i 'Boucle sur les autres feuilles For Each sh In Sheets With sh 'sauf la première If sh.CodeName <> "Feuil1" Then 'boucle sur les lignes de la feuille For i = 3 To Cells(Cells.Rows.Count, 1).End(xlUp).Row 'on cherche la correspondance Var = Application.Match(.Cells(i, 7), rng.Resize(, 1), 0) 'si correspondance If IsNumeric(Var) Then Verif(2, Var) = Verif(2, Var) + 1 Else 'sinon (pas testé) sh.Range(sh.Cells(i + 2, 1), sh.Cells(i + 2, 8)).Interior.ColorIndex = 3 End If Next i End If End With Next sh With Sheets("inscrits 10 11") 'boucle sur les occurences de Verif. Si la zone de contrôle est différente de 1 'coloriage For i = 1 To rng.Rows.Count If Verif(2, i) <> 1 Then .Range(.Cells(i + 1, 1), .Cells(i + 1, 12)).Interior.ColorIndex = 3 End If Next i End With End Sub
Daniel
Merci, Je vais tester la macro et vous tiens au courant....