Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 11/03/2010, 12h46   #1
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 106
Points : 36
Points : 36
Par défaut Combien de condition "And" peut on mettre dans une ligne de code

Bonjour
Dans une ligne de code VBA j'utilise l'opérateur "And" 8 fois comme suit

Code :
1
2
3
4
5
 
...
ElseIf Cells(LignePlan, 4) <> "Sujet1" And Not Cells(LignePlan, 36) Like "*Sujet2*" And Cells(LignePlan, 53) <> "Sujet3" And Cells(LignePlan, 53) <> "Sujet4" And Cells(LignePlan, 32) <> "Sujet5" And Cells(LignePlan, 65) = "Sujet6" And Cells(LignePlan, 6) = "Sujet7" And Cells(LignePlan, 75) = "Sujet8" Then
                        Cpt = Cpt + 1
...
Lorsque je lance la macro en l'état , il n'y a pas de résultat. Lorsque je passe à 7 conditions un résultat s'affiche. Y a t-il une nombre maximum de conditions à ne pas dépasser ? Si celà est le cas, avez-vous une astuce pour que le résultat tienne tout de même compte des 8 conditions ?

merci
Salutations

MichaSarah
MichaSarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2010, 13h27   #2
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut MichaSarah et le forum
tu n'as qu'à essayer
Code :
1
2
3
4
5
If 1 = 1 And 2 = 2 And 3 = 3 And 4 = 4 And 5 = 5 And 6 = 6 And 7 = 7 And 8 = 8 And 9 = 9 And 10 = 10 Then
    x = 1
Else
    x = 2
End If
Sauf que ton code commence par ElseIf ce qui fait soupçonner d'autres conditions. De plus avec autant de conditions et comme une seule suffit à bloquer, puisque c'est des ET.
Avec autant de conditions, j'évite t'utiliser les nombres pour désigner les colonnes
Code :
1
2
3
4
5
6
7
8
9
ElseIf Cells(LignePlan, "D") <> "Sujet1" And _
    Not Cells(LignePlan, "AJ") Like "*Sujet2*" And _
    Cells(LignePlan, "BA") <> "Sujet3" And _
    Cells(LignePlan, "BA") <> "Sujet4" And _
    Cells(LignePlan, "AF") <> "Sujet5" And _
    Cells(LignePlan, "BM") = "Sujet6" And _
    Cells(LignePlan, "F") = "Sujet7" And _
    Cells(LignePlan, "BW") = "Sujet8" Then
                        Cpt = Cpt + 1
Ne connaissant rien d'autre...
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2010, 17h05   #3
Membre régulier
 
Inscription : mai 2008
Messages : 77
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 77
Points : 96
Points : 96
Bonjour

autre solution (exemple pour 9 conditions a, b , c ... i) :
Code :
1
2
 
If a + b + c + d + e + f + g + h + i = -9 Then
OrDonc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2010, 21h57   #4
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 106
Points : 36
Points : 36
Bonjour Gorfael et OrDonc,

J'ai essayé de remplacer le n° des colonnes par l'équivalent en lettre mais rien ni change.
Je n'ai pas très bien compris vos propositions :

OrDonc : que signifie le -9 ?
Code :
1
2
 
If a + b + c + d + e + f + g + h + i = -9 Then
Gorfael : A quoi correspondent les égalités ?
Code :
1
2
3
4
5
6
 
If 1 = 1 And 2 = 2 And 3 = 3 And 4 = 4 And 5 = 5 And 6 = 6 And 7 = 7 And 8 = 8 And 9 = 9 And 10 = 10 Then
    x = 1
Else
    x = 2
End If
merci par avance pour votre aide
MichaSarah
MichaSarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2010, 00h25   #5
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut MichaSarah et le forum
Citation:
Je n'ai pas très bien compris vos propositions
Quelles propositions ? C'est juste pour te prouver qu'avec 9 conditions, ça fonctionne encore : 1=1 est vrai et la 2ème méthode fait la même chose (True = -1).
Donc ton erreur ne vient pas du nombre de condition, mais qu'une de ces conditions n'est pas vraie.
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2010, 00h41   #6
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 106
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 106
Points : 36
Points : 36
Bonsoir,
Merci Gorfael pour ce complément d'information. Après plusieurs tests, il y avait bien une petite erreur dans l'une de mes égalités.

MichaSarah
MichaSarah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2010, 15h39   #7
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut MichaSarah et le forum
Juste une remarque en passant : le bout de code que tu nous as donné commence par ElseIf => ça suppose qu'il y a un if (voire d'autre ElseIf. Ne connaissant que peut du code total, qu'elque chose me gène : faire une succession d'autant de AND sur plusieurs ElseIf me semble une bonne méthode pour aller droit dans le mur. Il existe d'autres méthodes qui pourrait, peut-être, te simplifier la vie. Mais sans le code intégral, avec son but, pas trop d'aide à fournir, sauf l'tulisation de Select Case, ou une recherche de chaîne dans un texte du genre "Sujet1Sujet2Sujet3Sujet4Sujet5Sujet6Sujet7Sujet8".
Peut-être aussi, séparer un ou deux tests, suivant leur fréquence de Vrai/Faux, pour accélérer la macro. Mais ça, outre la technique du code proprement dite, ça demande l'habitude de travail sur le fichier, et seuls les utilisateurs réels peuvent faire quelque chose.
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 07h55.


 
 
 
 
Partenaires

Hébergement Web