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
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 SubC'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)
.Range("G3:G50") au lieu de .Range("B2:B50")
Désolé
Solutionné, je te remercie tout de même !