Effectuer le code qu'une seule fois

Résolu/Fermé
vieuxray - 1 févr. 2014 à 16:08
 vieuxray - 2 févr. 2014 à 19:21
Bonjour a toutes et tous, Forum bonjour


Excel 2007 VBA

Avec le code ci-dessous le premier de chaque mois je déplace d'une colonne vers la droite.

le code fonctionne bien, seulement un petit soucis m'ennuie un peu.

le code est placer dans "Userform initialize"

Une première mise a jour s'est bien effectuer a la première ouverture de mon fichier ce matin.

Mais maintenant le code s'effectue a chaque initialisation de USF

Bon en fait, c'est normal puisque nous sommes le 01 février.

Mais comment faire pour que cette remise a jour ne s'effectue qu'une seule et unique fois

Merci a vous et de votre temps

Bonne après midi et merci

Cdlt Ray


'*** RECOPIER LES COLONNES ET LIGNES LE PREMIER JOUR DE CHAQUE MOIS AUTOMATIQUEMENT *****************
With Sheets("Compte")

With Cells(18, Month(Date) + 3).Resize(9, 1) 'Date déclenchement changement de colonne mensuel
If Month(Date) > 1 Then
.Copy .Offset(0, 1)
.SpecialCells(xlCellTypeConstants, 23).ClearContents
End If
End With
End With
A voir également:

17 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
1 févr. 2014 à 17:18
Bonjour,

Bon en fait, c'est normal puisque nous sommes le 01 février. Non, c'est parce que vous avez ecrit ceci:

If Month(Date) > 1 Then si le numero du mois en cours est supperieur a 1, donc a chaque fois que vous allez ouvrir l'UF vous aurez le code qui va s'executer
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2014 à 20:56
Bonjour Ray, bonjour f894009

Peut être manque-t-il l'information comme quoi la mise à jour a été faite et ne doit pas être une nouvelle fois exécutée ?

;0)


1
Salut polux31,

Merci pour ta réponse,

Merci pour ta contribution qui a permis de faire avancer vers une solution a mon soucis

Bon Dimanche

Cdlt Ray
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
2 févr. 2014 à 15:31
Salut Ray,

Tout le mérite revient à f894009. Je n'ai fait que donner une piste, et je ne doute pas que f894009 avait également cette solution.

Merci, idem et bonne continuation.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 févr. 2014 à 08:46
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 2/02/2014 à 10:02
Re,



Private Sub UserForm_Initialize()
'*** RECOPIER LES COLONNES ET LIGNES LE PREMIER JOUR DE CHAQUE MOIS AUTOMATIQUEMENT *****************
With Sheets("Compte")
If Month(Date) <> .Range("B24") Then
.Range("B24") = Month(Date)
With .Cells(18, Month(Date) + 3).Resize(9, 1) 'Date déclenchement changement de colonne mensuel
.Copy .Offset(0, 1)
.SpecialCells(xlCellTypeConstants, 23).ClearContents
End With
End If
End With
End Sub
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 févr. 2014 à 10:23
Re,

Entre temps, j'ai rectifie l'empilage du code. Ceci au cas ou vous avez plusieurs onglets et que vous ayez selectionne un autre onglet, Range("B24") sera celle de l'onglet selectionne et .Range("B24") sera celle du With Sheets("Compte")

Private Sub UserForm_Initialize()
'*** RECOPIER LES COLONNES ET LIGNES LE PREMIER JOUR DE CHAQUE MOIS AUTOMATIQUEMENT *****************
With Sheets("Compte")
If Month(Date) <> .Range("B24") Then
.Range("B24") = Month(Date)
With .Cells(18, Month(Date) + 3).Resize(9, 1) 'Date déclenchement changement de colonne mensuel
.Copy .Offset(0, 1)
.SpecialCells(xlCellTypeConstants, 23).ClearContents
End With
End If
End With
End Sub
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 févr. 2014 à 18:38
Re,

Mais comment Excel se repère pour savoir qu'on est le premier du mois ??? le mois change le premier jour du mois suivant, donc il suffit de tester le changement de mois par Month(Date): mois(date en cours)
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 févr. 2014 à 18:57
Re,

pour un test jour en dehors du premier, il faut prendre:

Day(Date)=22 si vous voulez le 22
1
Salut f894009,

Merci pour la réponse, c'est gentil

J'ai bien compris la réponse , j'ai pourtant bien fait des modifs a ce niveau mais ca ne change rien

Comment svp modifier le test

Merci pour l'aide

Cdlt Ray
0
Salut f894009

Merci pour la réponse bien matinal

J'ai bien compris mais je ne sais pas comment faire

j'ai essayer de faire une macro a part pour éxécuter le bout de code.

Afin de sortir le bout de code de "userform initialise" ce qui éviterai qu'a chaque mise a jour de l'Usf que ca redéclenche le code.

mais je ne suis pas arriver

Merci pour ton aide, bon Dimanche

Cdlt Ray
0
Re,

Merci pour ta réponse et le fichier exemple, j'ai tester et ca m'a l'air de fonctionner

j'ai simuler le mois (Mars) prochain en modifiant l'horloge de mon PC et ca marche en éxécutant qu'une seule fois le bout de code.

j'ai mis en B24 de ma feuil(Compte) la valeur (2) et modifier le code comme ci-dessous

je pense que c'est bon quand pense tu svp ???

Mais je me pose une question, comment ca va se passer pour la fin de l'année
passer de Décembre 2014 a Janvier 2015

Merci pour ton aide

A plus tard

Ray

 
With Sheets("Compte")

With Cells(18, Month(Date) + 3).Resize(9, 1)
If Month(Date) <> Range("B24") Then
.Copy .Offset(0, 1)
.SpecialCells(xlCellTypeConstants, 23).ClearContents
Range("B24") = Month(Date)
End If
End With
End With
0
Re

Merci pour les corrections pourtant, je viens de regarder mon programme fonctionne sans les points que tu me dit de rajouter.

et pour la question svp.

Mais je me pose une question, la cellule B24 va augmenter de 1 tous les mois

comment ca va se passer pour la fin de l'année pour
passer de Décembre 2014 a Janvier 2015

merci a toi

Ray
0
Re

Merci pour le fichier, j'ai effectivement 4 onglets dans mon programme

alors d'après mes essais ça a l'air de bien fonctionner.

Svp, Que veut dire plus excatement ( l'empilage du code )

a plus tard et merci

Ray
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
2 févr. 2014 à 18:17
Re,

Svp, Que veut dire plus excatement ( l'empilage du code )

Il est plus logique de faire le test de changement de mois avant toutes instructions qui seraient executees si il y a changement de mois.
0
Bonsoir f894009,

Merci pour ta réponse, je comprends mieux.

juste une dernière question si tu veux bien.

je n'ai plus le code ci-dessous qui déclenchai mon déplacement de colonne en début du mois.

 If Month(Date) > 1

par contre a la place j'ai la cellule B24 ou j'ai mis 2

qui s'incrémente toute seule a chaque changement de mois

je pense que 2 corresponds a février, 3 a mars etc etc

Mais comment Excel se repère pour savoir qu'on est le premier du mois ???

Merci Ray
0
Re,

Merci beaucoup la réponse est plus que satisfaisante

Et si je souhaitai changer la date en mettant le 22 de chaque mois a la place du premier du mois

le code serai modifier comment, cela m'interresse beaucoup de savoir comment fonctionne les tests sur les dates

Merci a toi

Ray
0
Re f894009

Merci beaucoup pour toutes ces informations, ca va bien me servir.

Bon sinon pour moi c'est bon ca fonctionne très bien.

je te souhaite une excellente soirée et bon début de semaine pour demain.

Avec tous mes remerciements pour ton aide et ton savoir.

Tu m'a déja beaucoup aider je t'en remercie encore.

Bye bye a bientot sans doute

Bien Cordialement Raymond
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 2/02/2014 à 08:20
Bonjour Ray, bonjour Polux 31,

En effet, il manque la mise en memoire du passage au premier jour du mois et le test de celle-ci pour le prochain premier du mois. Une cellule ferait l'affaire
-1