Simplification de code VBA

  • Initiateur de la discussion Initiateur de la discussion mmaatthh
  • 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 !

mmaatthh

XLDnaute Nouveau
Bonjour,

Je tente de simplifier la portion rouge du code suivant mais sans succès. J'aimerai la nommer avec un nom puisqu'elle est répétée souvent dans la procédure.

Merci pour votre aide

MMaatthh
....

Dim acell As Range

....


For i = 1 To 8
If Cells(acell.Row, 1) = i And (acell.Column = 10 - i Or acell.Column = 18 - i Or acell.Column = 26 - i Or acell.Column = 34 - i Or acell.Column = 42 - i) Then
Set Found = Range(Cells(ligneCmdtH, acell.Column), Cells(ligneCmdtB, acell.Column)).Find("D")
If acell = "" _
And Found Is Nothing _
And UCase(acell.Offset(0, -1)) <> "S" _
And UCase(acell.Offset(0, -1)) <> "N" _
And UCase(Cells(acell.Row, 3)) = "D8" _
And (UCase(Cells(4, acell.Column)) = UCase(Range("AP7")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP8")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP9")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP10")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP11")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP12")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP13")))
Then
acell = "D"

ElseIf acell = "" _
And Found Is Nothing _
And UCase(acell.Offset(0, -1)) <> "S" _
And UCase(acell.Offset(0, -1)) <> "N" Then
acell = "J"
End If
End If
 
Bonjour mmaatthh

acell.Column = 10 - i Donne la colonne B, acell.Column = 18 - i donne a colonne J etc. Donc quel intêret à faire une boucle?? 🙄; tu met directement le nom de la colonne.

Ensuite tu recherche quoi au juste, une lettre ou le nom de la cellule??? Find("D") - "D8" - "AP8"
 
Bonjour thebenoit 🙂

C'est vrai et j'ai omis de lui dire. 😳 . Mais d'après ce que j'ai compris, sans convinction

VB:
Sub Change()
Dim cel As Range, c As Range, derlig As Long, lig As Long, col As Long

    Application.ScreenUpdating = False

    With Feuil1
        derlig = .Range("a" & Rows.Count).End(xlUp).Row
        Set plage = .Range("a1:ap" & derlig)
        For Each c In plage
            Set cel = .Cells(c.Row, c.Column).Find("D", , xlValues, xlWhole, xlByColumns, xlPrevious)
            If Not cel Is Nothing Then
                If cel.Column = 2 Or cel.Column = 10 Or cel.Column = 18 _
                   Or cel.Column = 26 Or cel.Column = 34 Then
                    For lig = 7 To 13
                        If .Cells(4, cel.Column).Value = Cells(lig, "AP").Value Then
                            .Cells(lig, cel.Column) = "D"
                        End If
                    Next lig
                End If
            End If
        End If
    Next col
Next lig
End With
End Sub
 
Bonjour Lone-Wolf et TheBenoit,

J'ai ajouter un fichier!

La scéquence que je tente d'écrire est en début d'écriture, elle a pour but de maider a faire de la planification. Le tableau est différent d'une séquence à l'autre... des lignes sont ajoutées ou retranchées ou encore la date est modifié en D2.... d'autre outils de contrôle sont prévus sous le tableau c'est pourquoi j'ai défini la première ligne et la dernière ligne en AP5 et AP6.

Dans le dévellopement de ma procédure je pense avoir beaucoup de IF / THEN avec beaucoup de conditions. du genre :

If acell = "" _
And Found Is Nothing _
And UCase(acell.Offset(0, -1)) <> "S" _
And UCase(acell.Offset(0, -1)) <> "N" _
And UCase(Cells(acell.Row, 3)) = "D8" _
And (UCase(Cells(4, acell.Column)) = UCase(Range("AP7")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP8")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP9")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP10")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP11")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP12")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP13"))) Then
acell = "D"

Pour ne pas répéter ces lignes plusieurs fois, j'ai tenter de nommer tous ces conditions ainsi :

Condition1 = acell = "" _
And Found Is Nothing _
And UCase(acell.Offset(0, -1)) <> "S" _
And UCase(acell.Offset(0, -1)) <> "N" _
And UCase(Cells(acell.Row, 3)) = "D8" _
And (UCase(Cells(4, acell.Column)) = UCase(Range("AP7")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP8")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP9")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP10")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP11")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP12")) _
Or UCase(Cells(4, acell.Column)) = UCase(Range("AP13")))

et de réécrire la procédure ainsi

If Condition1 Then acell = "D"

mais ma syntaxe n'est pas bonne et ça ne fonctionne pas!

Est-il possible de procéder ainsi

Merci pour votre aide

MMaatthh
 

Pièces jointes

- 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

Réponses
5
Affichages
703
Réponses
3
Affichages
353
Réponses
2
Affichages
668
Réponses
3
Affichages
578
Retour