Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro à plusieurs critères

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

stagiairerm

XLDnaute Occasionnel
Là les enfants j'ai bvesoin d'un expert !! Voila 3 jours que je rame sur la combianaison de plusieurs critères dans une macro afin de frmer automatiquement des colonnes

Je n'arrive pas à combier les critères ..
je vous ai mis le doc

Merci de votre aide !
 

Pièces jointes

Re : Macro à plusieurs critères

Stagiairerm,

Plusieurs fils sur le même sujet dans la même journée ne sont pas forcément indispensables.

Voici une soluce qui fonctionne dans le classeur que tu nous a donné et pour les choix donnés.

A mettre dans un module de code.
PlageCrit1 est la plage de Critère Pays 'Ne peut être qu'une seule ligne ou seule colonne
PlageCrit2 est la plage de Critère Lettre 'idem
PlageCompare est la première ligne qui contient les noms de pays dont les colonnes sont à cachées ou non

Code:
Sub Test()
Dim PlageCrit1 As Range, PlageCrit2 As Range, PlageCompare As Range, c As Range
Set PlageCrit1 = Sheets("Feuil1").Range("B16:B21")
Set PlageCrit2 = Sheets("Feuil1").Range("G16:G20")
Set PlageCompare = Sheets("Feuil1").Range("M4:AP4")
Dim Res1 As Variant, Res2 As Variant
For Each c In PlageCompare.Cells
    Res1 = Application.Match(c.Value, PlageCrit1, 0)
    Res2 = Application.Match(c.Offset(1), PlageCrit2, 0)
    c.EntireColumn.Hidden = Not (Not IsError(Res1) And Not IsError(Res2))
 
Next c
End Sub

A+ et bon week-end
 
Re : Macro à plusieurs critères


Super ca marche mais j'"essaye de transformer ca pour un masquage avec des lignes... j'ai un peu de mal....
Les critères sont au nolmbre de 3 cette fois-ci

Voila ce que j'ai ecrit mais il semble y avoir une erreur :


Rows("23:500").Select
Selection.EntireRow.Hidden = True

Dim PlageCrit3 As Range, PlageCrit4 As Range, PlageCrit5 As Range, PlageCompare1 As Range, d As Range
Set PlageCrit3 = Sheets("Analyse").Range("G527:G527")
Set PlageCrit4 = Sheets("Analyse").Range("F518:F525")
Set PlageCrit5 = Sheets("Analyse").Range("J518:J527")
Set PlageCompare1 = Sheets("Analyse").Range("A23:A500")

Dim Res3 As Variant, Res4 As Variant, Res5 As Variant

For Each d In PlageCompare1.Cells
Res3 = Application.Match(c.Value, PlageCrit3, 0)
Res4 = Application.Match(c.Offset(1), PlageCrit2, 0)
Res5 = Application.Match(c.Offset(1), PlageCrit2, 0)
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4))

Next d

End Sub

Merci de votre aide !
 
Re : Macro à plusieurs critères

Bonjour Stagiairerm,

Dans ton code les lignes suivantes
Code:
Rows("23:500").Select
Selection.EntireRow.Hidden = True
sont inutiles puisques la macro est chargée d'afficher celles qui correspondent aux critères et calchées les autres.

Dans les lignes suivantes:
Code:
Dim Res3 As Variant, Res4 As Variant, Res5 As Variant
 
For Each d In PlageCompare1.Cells
Res3 = Application.Match(c.Value, PlageCrit3, 0)
Res4 = Application.Match(c.Offset(1), PlageCrit2, 0)
Res5 = Application.Match(c.Offset(1), PlageCrit2, 0)
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4))
 
Next d

si tu changes la variable de boucle for each d ,
il faut également la changer dans les tests puisque elle est la référence à la cellule testée et ses soeurs du dessous [offset(1)].
Dailleurs Res4 et Res5 compare La cellule au dessous de d deux fois dans la même plage de critère. (PlageCrit2)
Code:
Res3 = Application.Match([SIZE=3][COLOR=red]d[/COLOR][/SIZE].Value, PlageCrit3, 0)
Res4 = Application.Match([SIZE=3][COLOR=red]d[/COLOR][/SIZE].Offset(1), PlageCrit2, 0)
Res5 = Application.Match([SIZE=3][COLOR=red]d[/COLOR][/SIZE].Offset(1), PlageCrit2, 0)
Enfin qu'est que tu fais de Res5 dans :
Code:
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4))
Qui logiquement devrait être
Code:
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4) And Not IsError([SIZE=5][COLOR=red]Res5[/COLOR][/SIZE]))

A part cela, je ne peux pas savoir ce qui pourrait ne pas fonctionner.

A bientôt
 
Re : Macro à plusieurs critères


Merci de la réponse, ca me permet d'apprendre merci beaucoup, mais j'ai encore un soucis que je n'arrive pas a reperer...
Voila le code que j'ai corrigé...

Sub analyse2()

Dim PlageCrit3 As Range, PlageCrit4 As Range, PlageCrit5 As Range, PlageCompare1 As Range, d As Range
Set PlageCrit3 = Sheets("Analyse").Range("G527:G527")
Set PlageCrit4 = Sheets("Analyse").Range("F518:F525")
Set PlageCrit5 = Sheets("Analyse").Range("J518:J527")
Set PlageCompare1 = Sheets("Analyse").Range("A23:A500")

Dim Res3 As Variant, Res4 As Variant, Res5 As Variant

For Each d In PlageCompare1.Cells
Res3 = Application.Match(d.Value, PlageCrit3, 0)
Res4 = Application.Match(d.Offset(1), PlageCrit4, 0)
Res5 = Application.Match(d.Offset(2), PlageCrit5, 0)
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4) And Not IsError(Res5))

Next d

End Sub

Il doit y avoir une coquille...
 
Re : Macro à plusieurs critères

Stagiairerm,



Où, quand, comment, quel message, symptômes??????

A+

Re : Macro à plusieurs critères

--------------------------------------------------------------------------------

Citation:
Envoyé par Hasco
Bonjour Stagiairerm,

Dans ton code les lignes suivantes
Code:
Rows("23:500").Select
Selection.EntireRow.Hidden = Truesont inutiles puisques la macro est chargée d'afficher celles qui correspondent aux critères et calchées les autres.

Dans les lignes suivantes:
Code:
Dim Res3 As Variant, Res4 As Variant, Res5 As Variant

For Each d In PlageCompare1.Cells
Res3 = Application.Match(c.Value, PlageCrit3, 0)
Res4 = Application.Match(c.Offset(1), PlageCrit2, 0)
Res5 = Application.Match(c.Offset(1), PlageCrit2, 0)
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4))

Next dsi tu changes la variable de boucle for each d ,
il faut également la changer dans les tests puisque elle est la référence à la cellule testée et ses soeurs du dessous [offset(1)].
Dailleurs Res4 et Res5 compare La cellule au dessous de d deux fois dans la même plage de critère. (PlageCrit2)

Code:

Res3 = Application.Match(d.Value, PlageCrit3, 0)
Res4 = Application.Match(d.Offset(1), PlageCrit2, 0)
Res5 = Application.Match(d.Offset(1), PlageCrit2, 0)Enfin qu'est que tu fais de Res5 dans :

Code:

d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4))Qui logiquement devrait être

Code:

d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4) And Not IsError(Res5))A part cela, je ne peux pas savoir ce qui pourrait ne pas fonctionner.

A bientôt

Merci de la réponse, ca me permet d'apprendre merci beaucoup, mais j'ai encore un soucis que je n'arrive pas a reperer...
Voila le code que j'ai corrigé...


Ben je n'arrive pas a faire fonctionner ce code : il doit y avoir un problème mais je ne sais pas ou... quelque chose te semble louche ?
Sub analyse2()

Dim PlageCrit3 As Range, PlageCrit4 As Range, PlageCrit5 As Range, PlageCompare1 As Range, d As Range
Set PlageCrit3 = Sheets("Analyse").Range("G527:G527")
Set PlageCrit4 = Sheets("Analyse").Range("F518:F525")
Set PlageCrit5 = Sheets("Analyse").Range("J518:J527")
Set PlageCompare1 = Sheets("Analyse").Range("A23:A500")

Dim Res3 As Variant, Res4 As Variant, Res5 As Variant

For Each d In PlageCompare1.Cells
Res3 = Application.Match(d.Value, PlageCrit3, 0)
Res4 = Application.Match(d.Offset(1), PlageCrit4, 0)
Res5 = Application.Match(d.Offset(2), PlageCrit5, 0)
d.EntireRow.Hidden = Not (Not IsError(Res3) And Not IsError(Res4) And Not IsError(Res5))

Next d

End Sub
 
Re : Macro à plusieurs critères

Re,

quelque chose te semble louche ?

Non, rien ne me semble louche.

Essaie de faire une execution du code pas à pas après avoir mis un point d'arrêt devant la ligne : For Each d In PlageCompare1.Cells

Pour cela mets le curseur sur la ligne et F9 (la ligne se colorie et un point se place sur la marge grise de la fenêtre.

tu lances la macro (F5), qui s'arrêtera à ce point,
Menu Affichage, fenêtre variables locales
quand la fenêtre est ouvertes tu continue l'execution pas à pas en faisant F8.

Ainsi tu pourras vérifier le contenu de tes variables et le résultats pour Res3, 4, 5

A bientôt
 
Re : Macro à plusieurs critères


C'est interessant comme dignostique pour une macro. en effet sur Res 3, 4 et 5 il m'affiche en valeur erreur 2042.

Je cherche éliminer l'erreur, si tu as une piste...
 
Re : Macro à plusieurs critères

Stagiairem,

Si tu as ces résultats c'est que les données ne sont pas trouvées.

Excuses-moi mais je n'ouvre plus les fichiers chargés ailleurs que sur xld.

Mais tu peux dans un nouveau classeur reproduire les conditions exactes dans une seule feuille. Avec tes plages et juste quelque données, et la macro

Plage à fournir
Sheets("Analyse").Range("G527:G527")
Sheets("Analyse").Range("F518:F525")
Sheets("Analyse").Range("J518:J527")
Sheets("Analyse").Range("A23:A500")
telles qu'elles sont dans la situations réelles.

A bientôt
 
Re : Macro à plusieurs critères



Et Voila :
 

Pièces jointes

Re : Macro à plusieurs critères

Stagiairerm

voici ton fichier modifié.
Il n'est pas étonnant que cela ne fonctionnait pas puisque nous ne sommes plus dans le même cas de figure que dans le premier exemple.
Cela confirme que pour avoir un résultat plus rapide, il faut des exemples concrets, s'appuyant sur une réalité.

Je t'invite à contrôler ta formule de comparaison des dates, chez moi elle fait de drôles de chose. De plus pourquoi mettre 1 ou 0 sous forme de texte, c'est source d'erreur.

A bientôt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 macro TCD
Réponses
4
Affichages
318
Réponses
40
Affichages
3 K
Réponses
12
Affichages
730
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…