Sauvegarde qui tourne en boucle

JMM1963 Messages postés 1 Date d'inscription mardi 9 juin 2015 Statut Membre Dernière intervention 9 juin 2015 - Modifié par NHenry le 9/06/2015 à 19:01
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 9 juin 2015 à 22:58
Bonjour à toutes et à tous
je ne sais pas si ce sera très lisible.... mon programme tourne en boucle et bloque excel. je ne trouve pas la solution. Si vous avez une idée elle sera la bienvenue. Je me débrouille comme je peux avec la programmation VBA pour les nuls.
Merci par avance pour votre aide
Jean-Marc

Sub Sauvegarde5()
'
' Sauvegarde5 Macro
'
If MsgBox("ATTENTION : Voulez-vous réellement sauvegarder tout l'historique du calendrier de Prises ?", vbQuestion + vbYesNo, "QUESTION...") = vbYes Then
varDate = Range("C22").Value
Range("C22").Select ' la première date est en C22 puis à la suite dans la colonne
End If

Do While Not (IsEmpty("C22")) ' tant que la cellule C22 est non vide

If (DateDiff("d", Now, ActiveCell.Value) < 1) Then 'si la date en C22 est antérieure à la date du jour
    Range("B22:AM22").Select 'Je sélectionne les données que je souhaite sauvegarder sur la ligne correspondant à la date
        Selection.Copy
            Sheets("Feuil2").Activate 'j'active la feuille sur laquelle je veux sauvegarder
                ActiveCell.Offset(1, 0).Select 'je me positionne sur la case vide à la suite des précédentes
                     ActiveSheet.Paste ' je colle
                        Application.CutCopyMode = False 'je quitte le mode copier coller sur ma page de sauvegarde
                            Sheets("Feuil1").Activate 'je retourne sur la feuille un qui contient mon calendrier initial
                                Application.CutCopyMode = False 'je quitte le mode copier coller sur mon calendrier
                                     Rows("22:22").Delete   ' je supprime la ligne 22 que je viens de sauvegarder
                                        Range("C22").Select 'je me repositionne sur la case C22 qui contient la nouvelle date à sauvegarder
End If


Loop ' et on reboucle
'
Range("E22").Select 'pour finir je me repositionne dans mon tableau sur la case que je dois remplir

End Sub


EDIT: Ajout de la coloration syntaxique.

1 réponse

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
9 juin 2015 à 19:33
Bonjour,

Ta boucle doit tourner en rond.

Ici
If (DateDiff("d", Now, ActiveCell.Value) < 1) Then 'si la date en C22 est antérieure à la date du jour
Range("B22:AM22").Select 'Je sélectionne les données que je souhaite sauvegarder sur la ligne correspondant à la date


Si la condition n'est pas respectée, le code remonte en haut et recommence sans arrêt.

Ça te prendrait un Else avant le End If pour y supprimer la ligne, si c'est ce que tu veux.
Si tu ne veux pas supprimer la ligne, il te faudrait repenser ton code.

Ceci dit, essaie d'éviter les Select, Selection,... qui ne sont pas utiles.

Finalement, lorsqu'on veut supprimer des lignes, il est préférable de commencer par le bas. Dans ce cas-ci, ça ne changerait rien puisque tu demeures toujours sur la ligne 22, mais bon... aussi bien le savoir car ce ne sera pas toujours le cas.
0
peux tu m'en dire plus sur l'endroit ou je dois positionner Else dans ma macro ?
J'ai essayé mais ça tourne toujours en boucle
Merci par avance pour ton aide
Jean marc
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23 > JM1963
Modifié par cs_MPi le 9/06/2015 à 22:58
If (DateDiff("d", Now, ActiveCell.Value) < 1) Then 'si la date en C22 est antérieure à la date du jour
Range("B22:AM22").Select 'Je sélectionne les données que je souhaite sauvegarder sur la ligne correspondant à la date
Selection.Copy
Sheets("Feuil2").Activate 'j'active la feuille sur laquelle je veux sauvegarder
ActiveCell.Offset(1, 0).Select 'je me positionne sur la case vide à la suite des précédentes
ActiveSheet.Paste ' je colle
Application.CutCopyMode = False 'je quitte le mode copier coller sur ma page de sauvegarde
Sheets("Feuil1").Activate 'je retourne sur la feuille un qui contient mon calendrier initial
Application.CutCopyMode = False 'je quitte le mode copier coller sur mon calendrier
Rows("22:22").Delete ' je supprime la ligne 22 que je viens de sauvegarder
Range("C22").Select 'je me repositionne sur la case C22 qui contient la nouvelle date à sauvegarder
Else
Rows("22:22").Delete ' je supprime la ligne 22 où la date ne correspond pas à la condition précédente
End If
0
Rejoignez-nous