JMM1963
Messages postés1Date d'inscriptionmardi 9 juin 2015StatutMembreDernière intervention 9 juin 2015
-
Modifié par NHenry le 9/06/2015 à 19:01
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823
>
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
9 juin 2015 à 22:37
J'ai essayé mais ça tourne toujours en boucle
Merci par avance pour ton aide
Jean marc
Modifié par cs_MPi le 9/06/2015 à 22:58