Problème avec boucle
Bonjour
J'ai une problématique avec mon code.
Si la loop trouve une date en F5 qui est plus de 365 jours. Le tout fonctionne
Si la loop trouve une date en F5 est vide et que F6 est plus de 365 jours. Le tout fonctionne
Si la loop trouve une date en F5 et F6 qui sont plus de 365 jours. Le tout fonctionne
Si la loop trouve une date en F5 qui est plus de 365 jours, que F6 est vide et que F7 est plus de 365 jours . Le MsgBox me donne seulement le résultat de F5
Même résultat avec
Si la loop trouve une date en F5 qui est plus de 365 jours, que F6 est moins de 365 jours et que F7 est plus de 365 jours . Le MsgBox me donne seulement le résultat de F5
Je suis certain qu'il me manque une indication... Voici mon code
Private Sub Workbook_Open()
Dim Cel As Range, s As String
's est une chaine de caractères
s = "Attention!! Il y a une inscription de plus d'un an pour:"
'Pour chaque cellule de F5 à la fin de la colonne F
For Each Cel In Range("F5:" & Range("F5").End(xlDown).Address)
If Cel.Value = "" Or Cel.Value + 365 >= Date Then
'Si la valeur de la cellule est égale ou plus vieille que 365 jours que la date d'aujourd'hui
Else
'Sinon: MsgBox
'on ajoute au texte et le contenu de la cellule en colonne A et B
'(-1 = colonne à gauche de la cellule cible)
s = s & vbCr & Cel.Offset(0, -5) & "," & " " & Cel.Offset(0, -4)
'Fin de la condition
End If
'prochaine cellule
Next Cel
'Si le dernier caractère à droite du texte n'est pas le caractère ":"
'Donc si on a ajouté du texte au texte de départ,
'on affiche le texte dans la boite de message
If Right(s, 1) <> ":" Then MsgBox s, vbInformation, "Inscription"
End SubMerci de votre aide
Bonsoir master_x_99,
* tu peux écrire ta ligne For plus simplement : For Each Cel In Range("F5:F" & [F5].End(xlDown).Row)
* entre Then et Else : y'a une ligne de commentaire et aucune ligne d'exécution : tu as dû oublier quelque chose !
* entre Else et End If : tu as écrit ce commentaire : '(-1 = colonne à gauche de la cellule cible)
mais la ligne d'exécution juste dessous utilise -5 et -4 ; c'est normal ? comment savoir sans ton fichier ?
ton problème vient peut-être de là ? à toi de le vérifier !
s = s & vbCr & Cel.Offset(0, -5) & "," & " " & Cel.Offset(0, -4)
* de plus, & "," & " " peut s'écrire & ", " ➯ s = s & vbCr & Cel.Offset(0, -5) & ", " & Cel.Offset(0, -4)
tu a écrit :Si la loop trouve une date en F5 qui est plus de 365 jours, que F6 est vide et que F7 est plus de 365 jours . Le MsgBox me donne seulement le résultat de F5
pour ça et c'que tu as écrit ensuite, difficile de le vérifier sans ton fichier ! sans fichier, y'a pas d'cellule vide sur du papier !
pour joindre un fichier, tu peux utiliser le bouton « Ajouter des fichiers » qui est situé juste sous la fenêtre d'édition de ton post.
dhany
Bonjour à tous,
S'il s'agit de trouver dans la colonne F (à partir de F5) les dates renseignées de plus d'un an, il vaudrait mieux utiliser :
Private Sub Workbook_Open()
Dim Cel As Range, s As String
's est une chaine de caractères
s = "Attention!! Il y a une inscription de plus d'un an pour:"
For Each Cel In Range("F5:F" & [F5].End(xlDown).Row) 'correction dhany 'Pour chaque cellule de F5 à fin de colonne F
If Cel.Value <> "" And Cel.Value + 365 <= Date Then ' si cellule non vide et plus d'un an
'on ajoute au texte et le contenu de la cellule en colonne A et B
'(-1 = colonne à gauche de la cellule cible)
s = s & vbCr & Cel.Offset(0, -5) & "," & " " & Cel.Offset(0, -4)
End If 'Fin de la condition
Next Cel 'prochaine cellule
.../...Par ailleurs, sans précision de la feuille de la plage (F5:Fxx) pas sûr que ça fonctionne bien dans Sub Workbook_Open()
A+