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 Sub

Merci 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+

Rechercher des sujets similaires à "probleme boucle"