VBA - rechercher une ligne avec 3 critères
Résolu/Fermé
A voir également:
- VBA - rechercher une ligne avec 3 critères
- Rechercher ou entrer l'adresse - Guide
- Aller à la ligne excel - Guide
- Site de vente en ligne particulier - Guide
- Partager photos en ligne - Guide
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie - Forum Loisirs / Divertissements
2 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/07/2011 à 17:52
Modifié par michel_m le 18/07/2011 à 17:52
Bonjour,
essaies cette macro
mais si c'est encore long, tu dis, on peut aller beaucoup + vite (macro + compliquée)
je n'ai pas géré les 3 critères car conditions, emplacement, méthode non indiquées
Michel
essaies cette macro
Option Explicit Const criter1 As String = "Lucien" Const criter2 As Integer = 2011 Const criter3 As String = "payé" Sub supprimer_svt_criteres() Dim nbre As Integer, Lig As Integer, Cptr As Integer nbre = Application.CountIf(Columns("A"), criter1) If nbre = 0 Then GoTo vide Application.ScreenUpdating = False Lig = 1 For Cptr = 1 To nbre Lig = Columns("A").Find(criter1, Cells(Lig, "A"), xlValues).Row If Cells(Lig, "B") = criter2 And Cells(Lig, "C") = criter3 Then Rows(Lig).Delete Lig = Lig - 1 End If Next Exit Sub vide: MsgBox criter1 & " inconnu dans la colonne A!", vbCritical End Sub
mais si c'est encore long, tu dis, on peut aller beaucoup + vite (macro + compliquée)
je n'ai pas géré les 3 critères car conditions, emplacement, méthode non indiquées
Michel
Bonsoir,
Avant tout ,merci beaucoup pour votre post. J'ai l'impression que mon problème se résout petit à petit, et c'est pas rien!
J'ai donc adapté votre code à mon script, et finalement, je passe les 3 critères par arguments comme ceci:
===========================================
=============================================
Mon problème: le messageBox "-Critère1- inconnu dans la colonne A!" se lance à chaques fois. pourtant, mes critères sont bien contenus dans les 3 variables criter1, criter2 et criter3 (j'ai testé grâce à la msgbox).
Je sens qu'il ne manque pas grand chose ^^
Merci beaucoup! :))
Avant tout ,merci beaucoup pour votre post. J'ai l'impression que mon problème se résout petit à petit, et c'est pas rien!
J'ai donc adapté votre code à mon script, et finalement, je passe les 3 critères par arguments comme ceci:
===========================================
Option Explicit Sub supprimer_svt_criteres(criter1, criter2, criter3) Dim nbre As Integer, Lig As Integer, Cptr As Integer If (criter3 = "bat") Then criter3 = "BATHELEC" Else criter3 = "ESP" End If nbre = Application.CountIf(Columns("A"), criter1) If nbre = 0 Then GoTo vide Application.ScreenUpdating = False Lig = 1 For Cptr = 1 To nbre Lig = Columns("A").Find(criter1, Cells(Lig, "A"), xlValues).Row If Cells(Lig, "B") = criter2 And Cells(Lig, "C") = criter3 Then Rows(Lig).Delete Lig = Lig - 1 End If Next Exit Sub MsgBox criter1 & " inconnu dans la colonne A!", vbCritical End Sub
=============================================
Mon problème: le messageBox "-Critère1- inconnu dans la colonne A!" se lance à chaques fois. pourtant, mes critères sont bien contenus dans les 3 variables criter1, criter2 et criter3 (j'ai testé grâce à la msgbox).
Je sens qu'il ne manque pas grand chose ^^
Merci beaucoup! :))
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 18/07/2011 à 22:43
Modifié par michel_m le 18/07/2011 à 22:43
normalement criter12,3 sont en param^tre
donc (attention pas de parenthèses dans l"'appel)
donc (attention pas de parenthèses dans l"'appel)
sub test() supprimer_svt_criteres "Lucien", 2001, "bat" end sub
Bonjour Michel_m.
Avant tout, merci beaucoup pour votre aide, tout marche comme je le souhaite, il me reste juste un petit détail, lorsque j'execute mon code, les lignes ciblées s'effacent correctement, mais il m'affiche en fin de procédure un message d'erreur 91 dont voici le lien de l'image:
http://farm7.static.flickr.com/6123/5953757210_4f0dab4def.jpg
quand je lance le débuggeur, voici l'écran:
http://farm7.static.flickr.com/6017/5953757228_bea73d3234.jpg
Quoi qu'il en soit, merci pour tout pour l'aide, vous êtes mon sauveur.
Passez une très bonne journée.
PS: j'ai adapté le code en fonction de mes besoins, j'ai par exemple enlevé votre bout de code pour terminer la fonction si la ligne n'existe pas car elle existera forcément quand cette fonction se lancera.
code:
Avant tout, merci beaucoup pour votre aide, tout marche comme je le souhaite, il me reste juste un petit détail, lorsque j'execute mon code, les lignes ciblées s'effacent correctement, mais il m'affiche en fin de procédure un message d'erreur 91 dont voici le lien de l'image:
http://farm7.static.flickr.com/6123/5953757210_4f0dab4def.jpg
quand je lance le débuggeur, voici l'écran:
http://farm7.static.flickr.com/6017/5953757228_bea73d3234.jpg
Quoi qu'il en soit, merci pour tout pour l'aide, vous êtes mon sauveur.
Passez une très bonne journée.
PS: j'ai adapté le code en fonction de mes besoins, j'ai par exemple enlevé votre bout de code pour terminer la fonction si la ligne n'existe pas car elle existera forcément quand cette fonction se lancera.
code:
Option Explicit Sub test() supprimer_svt_criteres "18", "Janvier 2011", "bat" End Sub Function supprimer_svt_criteres(criter1, criter2, criter3) Dim nbre As Integer, Lig As Integer, Cptr As Integer If (criter3 = "bat") Then criter3 = "BATHELEC" Else criter3 = "ESP" End If Lig = 1 Application.DisplayAlerts = False For Cptr = 1 To 2000 Lig = Columns("A").Find(criter1, Cells(Lig, "A"), xlValues).Row If Cells(Lig, "B") = criter2 And Cells(Lig, "C") = criter3 Then Rows(Lig).Delete Lig = Lig - 1 End If Next End Function
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
19 juil. 2011 à 10:45
19 juil. 2011 à 10:45
Application.DisplayAlerts = False n'est jamais utilisé sans
Application.DisplayAlerts = true après sinon c'est définitif m^me la macro terminée!!!
et je ne vois pas son utilité dans le code :regarde l'aide à ce sujet
Pourquoi cette ligne qui ralentit tout et produit une erreur ? :-(((
et de plus tu enlèves
Je me demande à quoi je sers et pourquoi tu demandes de l'aide !!!
Application.DisplayAlerts = true après sinon c'est définitif m^me la macro terminée!!!
et je ne vois pas son utilité dans le code :regarde l'aide à ce sujet
Pourquoi cette ligne qui ralentit tout et produit une erreur ? :-(((
For Cptr = 1 To 2000alors qu'avec ce que je t'avais donné on ne boucle que sur les valeurs criter1au lieu de 2000 fois ; avec ton invention magique, tu as une erreur une fois que la boucle a trouvé tous les criter1 :-(((
et de plus tu enlèves
Application.ScreenUpdating = Falsequi fige le défilement de l'écran et fait gagner un temps fou !!!! :-(((
Je me demande à quoi je sers et pourquoi tu demandes de l'aide !!!