[Résolu] Macro qui ne prend en compte que la première ligne

Lucie

XLDnaute Nouveau
Bonjour à tous,

J'ai construit un tableau de prises de RDV de Outlook.

Je bute sur mon dernier souci, il ne prend en compte que la première ligne de RDV et ne passe pas aux autres.
Je ne sais pas si je suis assez claire mais il me crée bien un RDV pour H7 mais rien pour H8, 9, 10...

Voici mon code :

Code:
Sub NouveauRDV_Calendrier()
'nécéssite d'activer la référence Microsoft Outlook 10.0 Object Library
Sheets("OUTIL STORE LOCATOR").Select
Dim myOlApp As New Outlook.Application
Dim MyItem As Outlook.AppointmentItem
Dim Cell As Range

For Each Cell In Range("H7:H" & Range("H22").End(xlUp).Row)
    If IsEmpty(Range("P" & Cell.Row)) Then
    Set MyItem = myOlApp.CreateItem(olAppointmentItem)
    
    With MyItem
        .MeetingStatus = olNonMeeting
        .Subject = Cell
        .Start = Cell.Offset(0, 2) ' Attention : format mm/dd/yy
        .Duration = Cell.Offset(0, 3) 'minutes
        .Location = Cell.Offset(0, 4)
        .Save
    End With
    Range("P" & Cell.Row) = "ok"
    End If
    Set MyItem = Nothing
Next Cell

End Sub

Voyez-vous d'où peut venir le souci ?

D'avance merci pour votre aide.
Lucie
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Macro qui ne prend en compte que la première ligne

Bonjour Lucie,

Voyez-vous d'où peut venir le souci ?
Pour nous, c'est -sans conteste- l'absence de fichier qui en est un :rolleyes:

On ne peut pas savoir si les cellules de H8 à H22 contiennent bien des valeurs, pas plus qu'on ne peut affirmer que les mêmes cellules, mais en colonne P sont effectivement vides!?

As-tu essayé en mode pas-à-pas? Pour voir à quel moment tu "sors de la boucle"?


[Edit:] Salut camarchepas :)
 
Dernière édition:

Lucie

XLDnaute Nouveau
Re : Macro qui ne prend en compte que la première ligne

Oops, au temps pour moi, voici le fichier de test.

Ce que je ne comprend pas c'est qu'il ne me fait aucun message d'erreur, le code tourne sans problème mais ne crée le RDV que pour la première ligne... :/

(Et soyez indulgents pour la construction du tableau, je ne suis que débutante ;) )
 

Pièces jointes

  • Test2.xls
    264 KB · Affichages: 42
  • Test2.xls
    264 KB · Affichages: 43
  • Test2.xls
    264 KB · Affichages: 43

Modeste

XLDnaute Barbatruc
Re : Macro qui ne prend en compte que la première ligne

Re-bonjour,

En colonne H, tu as une formule jusqu'en ligne 668. Donc, quand tu écris "Range("H22").End(xlUp).Row", tu te retrouves avec une référence à la seule cellule H6

Essaie de remplacer le H22 dans cette instruction, par la lettre d'une colonne où tu as des cellules (vraiment) vides entre la ligne 22 et le début des données.

Pas testé: pas Outlook, ici, pour le moment!
 

Lucie

XLDnaute Nouveau
Re : Macro qui ne prend en compte que la première ligne

Merci Modeste,

C'est un peu technique pour moi...

Si je comprends bien, cela ne fonctionne pas car la formule présente pour définir l'objet de l'alerte ne laisse pas de palce à une cellule vide à la macro.
Je constate bien, en effaçant à la main le contenu des cellules qui vont jusqu'en H22, les RDV se créent bien.

J'ai donc essayé de coller une petite macro pou appliquer la formule et copier/coller en valeurs sur la colonne H mais cela ne change pas.
Les cellules à partir de H13 sont bien vides mais les RDV de H8 à H12 ne sont pas pris en compte.
Une fois que je supprime à la min le contenu des cellules H13 et + (alors qu'elles sont bien vides!), cela fonctionne.
 

Pièces jointes

  • Test2.zip
    77.3 KB · Affichages: 38
  • Test2.zip
    77.3 KB · Affichages: 25
  • Test2.zip
    77.3 KB · Affichages: 20

Si...

XLDnaute Barbatruc
Re : Macro qui ne prend en compte que la première ligne

salut

à tester (car je n'ai pas installé ...)
Code:
Sub NouveauRDV_Calendrier()
  'nécessite d'activer la référence Microsoft Outlook 10.0 Object Library
  Sheets("OUTIL STORE LOCATOR").Select
  Dim myOlApp As New Outlook.Application
  Dim MyItem As Outlook.AppointmentItem
  Dim R As Range
  For Each R In Range("H7", [H6].End(xlDown))
    If R.Value = "" Then GoTo 1  'au suivant si la cellule semble vide
    If R(1, 9) = "" Then
    GoTo 1
      Set MyItem = myOlApp.CreateItem(olAppointmentItem)
      With MyItem
        .MeetingStatus = olNonMeeting
        .Subject = R
        .Start = R(1, 3)
        .Duration = R(1, 4)
        .Location = R(1, 5)
        .Save
      End With
      R(1, 9) = "ok"
    End If
1   Next
   Set MyItem = Nothing
End Sub
 

Modeste

XLDnaute Barbatruc
Re : Macro qui ne prend en compte que la première ligne

Re,

(et à ce moment précis, je m'aperçois que Si... vient d'ouvrir une autre porte :))
Pour expliquer brièvement à Lucie: l'aide vba dit que Range("H22").End(xlUp) Revient à appuyer sur Fin+Flèche vers le haut
Fais donc cette manipulation au départ de F22 (colonne qui contient aussi des formules), puis au départ de C22.
Constates-tu une différence? Est-ce que ça t'éclaire?

Ce que je disais tout à l'heure, c'était donc d'utiliser une colonne où tu n'as pas de formules (plutôt que d'essayer de les supprimer) Il me semble que tu peux écrire
For Each Cell In Range("H7:H" & Range("B22").End(xlUp).Row)
Là ta dernière cellule non-vide sera bien en ligne 12 et ta boucle va bien parcourir la plage de H12 à H7.

@ Si... Si... on a des cellules non-vides le xlDown permettra bien de démarrer en H7, mais la boucle va se poursuivre jusqu'en ligne 668, sans grand intérêt ... Si... je ne me trompe pas!!??
[Edit:] Pardon, Si... je n'avais pas vu le If juste en-dessous! :eek:
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Macro qui ne prend en compte que la première ligne

salut

pour rester droit comme un If (n'est-ce pas Modeste ;)) ... j'ai donné un code avec un test pour sauter les lignes qui me gênaient donc inefficace :eek:. Il y a un Goto 1 de trop
Code:
... 
 For Each R In Range("H7", [H6].End(xlDown))
    If R.Value = "" Then GoTo 1  'au suivant si la cellule semble vide
    If R(1, 9) = "" Then
    GoTo 1 '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< à supprimer !
      Set MyItem = myOlApp.CreateItem(olAppointmentItem)
      With MyItem
        .MeetingStatus = olNonMeeting
        .Subject = R
        .Start = R(1, 3)
        .Duration = R(1, 4)
        .Location = R(1, 5)
        .Save
      End With
      R(1, 9) = "ok"
    End If
1   Next
   Set MyItem = Nothing
End Sub
 

Lucie

XLDnaute Nouveau
Re : Macro qui ne prend en compte que la première ligne

Bonjour et navrée pour le délai de réponse.

Merci à tous les 2 pour votre aide et vos explications. C'est compliqué mais je comprend un peu mieux.

Merci beaucoup If... tout fonctionne à la perfection maintenant, je passe le sujet en Résolu.

Très bonne journée !
Lucie
 

Discussions similaires

Statistiques des forums

Discussions
312 158
Messages
2 085 832
Membres
102 997
dernier inscrit
sedpo