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

Optimiser un code sans OR

  • Initiateur de la discussion Initiateur de la discussion anber
  • Date de début Date de début

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 !

anber

XLDnaute Occasionnel
Bonsoir le forum,

Je cherche à optimiser un code où il y a de nombreux OU (OR), quelle solution pour réduire le temps d'exécution, et écrire un code plus simple ?

Merci


EQ1 = ""
If cel.Offset(0, 8) = "FB1" Or cel.Offset(0, 8) = "FC1" Or cel.Offset(0, 8) = "FC3" Or _
cel.Offset(0, 8) = "FD1" Or cel.Offset(0, 8) = "FF1" Or cel.Offset(0, 8) = "FG1" Or _
cel.Offset(0, 8) = "FS1" Or cel.Offset(0, 8) = "FV1" Then
EQ1 = "EQ1"
End If
EQ2 = ""
If cel.Offset(0, 8) = "FB2" Or cel.Offset(0, 8) = "FC2" Or cel.Offset(0, 8) = "FC4" Or _
cel.Offset(0, 8) = "FD2" Or cel.Offset(0, 8) = "FF2" Or cel.Offset(0, 8) = "FG2" Or _
cel.Offset(0, 8) = "FS2" Or cel.Offset(0, 8) = "FV2" Then
EQ2 = "EQ2"
End If
norm = ""
If cel.Offset(0, 8) = "FC5" Or cel.Offset(0, 8) = "FE1" Or _
cel.Offset(0, 8) = "FH1" Or cel.Offset(0, 8) = "FI1" Or cel.Offset(0, 8) = "FJ1" Then
norm = "Norm"
End If
nuit = ""
If cel.Offset(0, 8) = "FBN" Or cel.Offset(0, 8) = "FDN" Or cel.Offset(0, 8) = "FFN" Then
nuit = "Nuit"
End If
 
Re : Optimiser un code sans OR

Salut anber et le forum
Difficile de simplifier, puisque on ne connaît rien que les valeurs données, et comme elles différentes. Tu peux chercher sur l'inverse (non) si ça simplifie, maisje doute qu'on puisse t'aider à moins d'avoir la liste exhaustive des codes pouvant affecter les cellules.

Pense juste à utiliser les balises code (#), ça rend les postes plus lisibles.
A+
 
Re : Optimiser un code sans OR

Salut

peut-être ainsi (sous réserve de vérification des listes)
Code:
  Dim liste1, liste2, liste3, liste4
  EQ1 = "": EQ2 = "": norm = "": nuit = ""
  liste1 = Array("FB1", "FC1", "FC3", "FD1", "FF1", "FG1", "FS1", "FV1")
  liste2 = Array("FB2", "FC2", "FC4", "FD2", "FF2", "FG2", "FS2", "FV2")
  liste3 = Array("FC5", "FE1", "FH1", "FI1", "FJ1")
  liste4 = Array("FBN", "FDN", "FFN")
  For n = 0 To 7
    If cel.Offset(0, 8) = liste1(n) Then EQ1 = "EQ1": Exit For
    If cel.Offset(0, 8) = liste2(n) Then EQ2 = "EQ2": Exit For
    If n < 5 Then
      If cel.Offset(0, 8) = liste3(n) Then norm = "Norm": Exit For
    End If
    If n < 3 Then
      If cel.Offset(0, 8) = liste4(n) Then nuit = "Nuit": Exit For
    End If
  Next n
 
Dernière édition:
Re : Optimiser un code sans OR améliorer vitesse d'éxécution

Bonjour le forum, Fo_rum, Gorfael

Essai non concluant.

Je joins un fichier test où il y a tous les OR

Comment améliorer la vitesse d'exécution ?

Merci
 

Pièces jointes

Re : Optimiser un code sans OR

Re,
Comme je suis tétu, avec ça je descent en dessous de la seconde toujours pour 2 000 lignes:
Code:
Sub maj()
Dim Ligne As Integer
Dim cel As Range
Dim A As Worksheet
Dim B As Worksheet
Set A = Sheets("import")
Set B = Sheets("DS")
Liste1 = "FB1, FC1, FC3, FD1, FF1, FG1, FS1, FV1,"
Liste2 = "FB2, FC2, FC4, FD2, FF2, FG2, FS2, FV2,"
Liste3 = "FC5, FE1, FH1, FI1, FJ1,"
Liste4 = "FBN, FDN, FFN,"
B.Range("D47:J72").ClearContents
For Lig2 = 2 To A.Range("D65536").End(xlUp).Row
 
    For Ligne = 47 To 72
        Set cel = Cells(Lig2, 4)
        If Not cel.Offset(0, 1) = "ü" Then Exit For
        If cel.Offset(0, 8).Value <> "" And cel = B.Cells(Ligne, 3) Then
            i = 0
            If InStr(Liste1, cel.Offset(0, 8).Value & ",") <> 0 Then i = 1: GoTo Appli
            If InStr(Liste2, cel.Offset(0, 8).Value & ",") <> 0 Then i = 3: GoTo Appli
            If InStr(Liste3, cel.Offset(0, 8).Value & ",") <> 0 Then i = 5: GoTo Appli
            If InStr(Liste4, cel.Offset(0, 8).Value & ",") <> 0 Then i = 7: GoTo Appli
Appli:            If B.Cells(Ligne, 3).Offset(0, i) = "" Then B.Cells(Ligne, 3).Offset(0, i) = cel.Offset(0, -1): Exit For
        End If
    Next
Next
B.Activate
End Sub
Je ne pense pas pouvoir faire mieux.
Cordialement
 

Pièces jointes

Dernière édition:
Re : Optimiser un code sans OR

Bonsoir Fo_rum,

Merci aussi pour ton excellente réponse.

Désolé effectivement j'aurai du mettre le fichier de test au départ.

Je ne pensais arrivé à un résutat aussi optimisé

Grand merci
 
Re : Optimiser un code sans OR

Re à tous,
Bien vu Fo_rum. Je ne pense pas assez à "With" 😛.
Dans le contexte de "On réduit... On réduit..." on peut supprimer
Code:
Dim B As Worksheet
C'est juste pour rire 😀.
Très cordialement
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…