Boucle if une ligne sur 3

Bonjour,

Je dois automatiser une tâche grâce à un bouton. le fonctionnement est le suivant:

J'ai un tableau à 2 colonnes (postes et observation) qui commence à la cellule (x,y).

Je sélectionne une cellule, je clique sur le bouton et la date d'aujourd'hui s'affiche dans la cellule et elle change de couleur. Cet action ne se déclenche que si la cellule adjacent à gauche n'est pas vide, si elle est vide, une MsgBox renvoie "poste non référencé". Lorsque toute les observations sont faites et que les cellules ont changées de couleurs, elles redeviennent des cellules sans couleurs de remplissages.

Voici la macro que j'ai commencé, mais je bloque sur le problème suivant.

Mon problème est que cette macro appliquer dans un autre fichier ne fonctionne pas pour le reset de couleurs, car il y a entre chaque postes deux lignes vierges qui sont pris en comptes et que je ne dois pas enlever.

Comment faire pour que ma macro ne se déclenche qu'une ligne sur trois?

Merci de votre aide.

7test-macro2.xlsm (21.62 Ko)

Bonjour,

Es-tu sûr que ton fichier correspond à ta demande ? Je ne vois nulle part 2 lignes vierges...

En tout cas pour n'opérer qu'une ligne sur 3, s'il s'agit des lignes 13, 16, 19, 22...

Condition :

If x Mod 3 = 1 Then

Cordialement.

Excusez moi je me suis trompé de fichier,

Sur celui-ci, il y a deux tableaux, un sans les lignes vides qui m'a servit à pour voir si mon code fonctionnait.

Et le deuxième avec les deux lignes vides entre chaque postes. Il n'y a qu'une avant le premier poste et une autre ligne après le dernier poste.

La quatrième condition de ma macro ne devant s'appliquer qu'aux cellules dont la cellule adjacente à gauche est non vides.

Cette macro n'est que pour le premier tableau. J'ai travaillé dessus pour l'appliquer au deuxième tableau en changeant bien la range.

4test-macro2.xlsm (24.30 Ko)

Re,

Sub Bouton_opt_Cliquer()
    If Not Intersect(ActiveCell, ActiveSheet.Range("B25:B45")) Is Nothing Then
        With ActiveCell
            If .Cells(1, 0) <> "" Then
                .Value = Date
                .Interior.Color = vbBlue
            Else
                MsgBox "poste non référencé"
            End If
        End With
        With ActiveSheet.Range("B25:B45")
            If WorksheetFunction.CountA(.Offset(, 0)) = WorksheetFunction.CountA(.Offset(, -1)) _
             Then .Interior.ColorIndex = xlColorIndexNone
        End With
    End If
End Sub

NB- Elle s'applique qu'il y ait ou non des lignes vides intermédiaires. Il suffit d'ajuster la plage de référence pour application : ici B25:B45...

Cordialement.

Merci, çà correspond bien à ce que je souhaite.

La couleur se réinitialise bien mais on revanche, la macro ne change plus la couleur des cases qu'une fois que toutes les conditions sont respectées ou une fois que la boucle est complète si c'est bien le terme adapté.

Peut on faire en sorte que la macro se réinitialise une fois que toutes les cellules concernées sont de la couleur indiquée?

Par curiosité qu'est ce qui diffère par rapport à ce que j'ai fais?

Et je comprend pas bien le deuxième with de ta macro.

La couleur se réinitialise quand toutes les cellules concernées de la plage ont été servies !

Si ce n'est pas cela, il faut être plus précis !

Le 2e With cible la plage concernée entière. Si toutes les cellules concernées sont servies, il y a le même nombre de valeurs en colonne B qu'en colonne A, ce que l'on peut tester en une seule fois, d'une part, et qui s'appliquera à toute plage quel que soit le nombre de cellules concernées, d'autre part.

Cordialement.

Je me suis trompé dans ma réponse.

Il s'agit de faire en sorte qu'une fois que la condition du deuxième with est remplie, lorsque les cellules concernées redeviennent blanches, faire en sorte que la première boucle s'active à nouveau à la prochaine sélection + clique bouton pour chacunes des cellules concernées.

Si on clique sur le bouton le ou les jours prochains, la date s'actualise, et la couleur de la cellule redevient bleu.

Et si je clique sur le bouton alors que la cellule est bleu, il n'y a que la date qui s'actualise, mais je crois que ta macro le fait automatique pour la date.

Sans effacer les valeurs antérieures ?

sans effacer les dates antérieures oui.

Lorsque je sélectionne la cellule et clique sur le bouton, j'ai deux cas de figure:

1) la cellule a déjà la couleur bleu, dans ce cas seule la date doit s'actualiser

2) la cellule est blanche ou est redevenu blanche (lorsque toute les cases étaient bleu), la cellule devient bleu et la date s'affiche ou s'actualise.

Ainsi :

Sub Bouton_opt_Cliquer()
    Dim n%, i%
    If Not Intersect(ActiveCell, ActiveSheet.Range("B25:B45")) Is Nothing Then
        With ActiveCell
            If .Cells(1, 0) <> "" Then
                .Value = Date
                .Interior.Color = vbBlue
            Else
                MsgBox "poste non référencé"
            End If
        End With
        With ActiveSheet.Range("B25:B45")
            For i = 1 To .Rows.Count
                If .Cells(i, 1).Interior.Color = vbBlue Then n = n + 1
            Next i
            If n = WorksheetFunction.CountA(.Offset(, -1)) Then .Interior.ColorIndex = xlColorIndexNone
        End With
    End If

C'est çà! Merci beaucoup pour votre aide.

Rechercher des sujets similaires à "boucle ligne"