Simplification de code VBA

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
 

Lone-wolf

XLDnaute Barbatruc
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?? :rolleyes:; 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"
 

Lone-wolf

XLDnaute Barbatruc
Bonjour thebenoit :)

C'est vrai et j'ai omis de lui dire. :oops: . 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
 

mmaatthh

XLDnaute Nouveau
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

  • Test.xlsm
    44 KB · Affichages: 37

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch