Remplacer un for each

Bonjour,

Je précise tout d'abord que je suis novice en VBA (ne jugez pas trop mon code, enfin je prends les conseils )

Pour un petit projet que j'ai actuellement, j'ai à sélectionner dans une feuille excel, un grand nombre de date afin d'y ajouter un nombre de jour (en l’occurrence une année) et de planifier ensuite des réunions sur Outlook. Chose que j'ai réussi tant bien que mal.

J'avais au commencement juste une condition à la non-sélection de l'une des dates (une croix dans une case, activable par un double clic, permettant d'ajouter un nombre de jour moindre avec un autre sub), ce que j'ai pu aisément faire avec un for each.

Cependant j'ai une 2ème condition qui vient de s'ajouter : Si la réunion Outlook est planifié ou non(afin de ne pas créer de doublon ensuite), à la suite de ma macro originale, lorsque une réunion est planifiée, un "Oui" s'ajoute dans la case.

Hors cela me bloque complètement, j'ai essayé d'imbriquer un for each dans celui que j'avais déjà réalisé, impossible et je ne sais pas comment faire avec une autre boucle.

Le code en question (ne correspond qu'à la partie étudiée) :

Sub Yes4() Dim cel As Range, plage As Range 'Une variable à ajouter j'imagine With ActiveSheet For Each cel In ActiveSheet.Range("c2:c21") 'Quand je mets b2:c21 -> Erreur If cel = "" Then If plage Is Nothing Then Set plage = .Range("A" & cel.Row) Else Set plage = Application.Union(plage, .Range("A" & cel.Row)) End If End If Next End With plage.Select 'Permet l'ajout des jours (je pense que ce n'est pas dans cette partie) periodicite = 365 For Each cel In Selection.Cells If cel = "" Then cel = "" Else cel = cel + periodicite End If Next End Sub

Ci-joint un tableau afin de simuler mes dires

Merci d'avance pour toute réponse quelles qu'elles soient !

Arthur

8pbforeach.xlsx (17.53 Ko)

Bonjour,

Un essai de ce que je comprends.

Cdlt.

Public Sub Yes4()
Dim cel As Range, plage As Range
    With ActiveSheet
        For Each cel In .Range("B2:B21")
            If IsEmpty(cel) And IsEmpty(cel.Offset(, 1)) Then
                If plage Is Nothing Then
                    Set plage = .Cells(cel.Row, 1)
                Else
                    Set plage = Application.Union(plage, .Cells(cel.Row, 1))
                End If
            End If
        Next
    End With
    If Not plage Is Nothing Then
        For Each cel In plage.Cells
            If Not IsEmpty(cel) Then cel = DateAdd("yyyy", 1, cel)
        Next
    End If
End Sub

C'est exactement ça, je te remercie Jean-Eric !

Cependant, peux-tu me détailler ta démarche afin que je l'adapte à mon code final ? Si ce n'est pas trop te demander, j'aimerai la comprendre ne fonctionnant pas quand je le fais moi même

Cependant rien à faire, cela ne fonctionne pas dans mon excel de base, je cherche un peu de mon côté et je reviens vers vous si je bloque

Une fois adapté à ma feuille, cela donne :

Public Sub Yes3() Dim cel As Range, plage As Range With ActiveSheet For Each cel In .Range("b2:b50") If IsEmpty(cel) And IsEmpty(cel.Offset(, 1)) Then If plage Is Nothing Then Set plage = .Cells(cel.Row, 6) Else Set plage = Application.Union(plage, .Cells(cel.Row, 6)) End If End If Next End With If Not plage Is Nothing Then For Each cel In plage.Cells If Not IsEmpty(cel) Then cel = DateAdd("yyyy", 1, cel) Next End If End Sub

Cependant rien ne se passe, des données peuvent-être géner le bon fonctionnement de la macro ?

J'ai joint le fichier (sans macro si jamais vous doutez de son contenu)

3pbforeach.xlsx (23.96 Ko)

.Range("G3:G50") au lieu de .Range("B2:B50")

Désolé

Solutionné, je te remercie tout de même !

Rechercher des sujets similaires à "remplacer each"