Autres Modifier automatiquement une suite de cellule selon la date du jour

Tmdu79

XLDnaute Nouveau
Bonjour à tous,
J'essai sans succès de créer une macro pour qu'au lancement et à la fermeture du fichier le contenu de la cellule J et K soient copier en "dur" lorsque la donnée date d'après la date du jour.

Cela doit permettre de modifier les cellules de saisi sans qu'il n'y ai d'incidence sur les données passées.

Je travail sous Excel 2007.

Je vous remercie d'avance pour votre aide !
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Pour info
Seuls les fichiers *.xls, *.xlsm et *.xlsb peuvent contenir des macros.
Donc ton fichier exemple test.xlsx ne peut pas en contenir.
 

Staple1600

XLDnaute Barbatruc
Re

Voir ci cela peut t'inspirer
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim DerL&
DerL = Cells(Rows.Count, 2).End(3).Row
For i = 2 To DerL
If Cells(i, 2) > Date Then
Cells(i, 10).Resize(, 2) = Cells(i, 10).Resize(, 2).Value
End If
Next
End Sub
 

Tmdu79

XLDnaute Nouveau
Bonjour Staple1600,

Merci pour ton message, mais je débute vraiment sur VBA.

Peux tu m'expliquer si tu as un moment la ligne de code que tu as saisi, car en faisant un coller sur mon fichier Excel, je ne voit pas la différence.
 

Staple1600

XLDnaute Barbatruc
Re

Si tu exécutes la macro sur le fichier exemple que tu as mis ici
Puis que tu vas voir ce qu'il y a dans les colonnes J et K, tu y trouveras quoi?
 

Tmdu79

XLDnaute Nouveau
Et bien par exemple si nous somme le 3 janvier 2020, et bien sur la ligne référant au 2 janvier, les formules sur les cellules J7 et K7 ne serait plus une formule mais uniquement une valeur.
 

Victor21

XLDnaute Barbatruc
Supporter XLD
Bonjour, Claudy.

Vous qui en êtes à votre 731° message, savez-vous ce qu'est et à quoi sert un moteur de recherche ?
1572173199155.png
PS : Bonjour le fil, bien entendu :)

Edit : @Staple1600 "Du coup", j'ai supprimé les digressions qui suivaient ce post ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Du coup Assailli d'un doute, j'ai relu tout le fil et je vois que j'ai manqué de précision
Le code que j'ai posté doit être mis dans ThisWorkBook
(et non pas dans un module standard)
Et j'ai ajouté quelque commentaires dans le code
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'C'est une procédure événementielle 
'(à ne pas placer dans un Module standard comme Module1)
Dim DerL&
DerL = Cells(Rows.Count, 2).End(3).Row
For i = 2 To DerL
If Cells(i, 2) < Date Then ' si inférieur à date du jour
Cells(i, 10).Resize(, 2) = Cells(i, 10).Resize(, 2).Value ' alors valeurs seules en colonne J et K
End If
Next
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Au moins, moi j'assume, Monsieur!
Je n'efface pas mon erreur ou ma coquille en mode édition.
;)

PS: J'ai un doute, il n'y a pas une carabistouille avec "Au moins", au moins?
 

Tmdu79

XLDnaute Nouveau
hum fuir non, impressionné oui. merci beaucoup pour ton aide Staple1600, le code fonctionne, cependant comment le faire fonctionner sur cet onglet uniquement lorsque le fichier excel comporte plusieurs onglets ?

- Deuxième question, comment faire si je souhaite intégrer une autre colonne (L) dans la ligne de code ?
Merci d'avance
 
Dernière édition:

fanch55

XLDnaute Nouveau
Salut, une contribution à ce que propose Staple1600
(j'ai pas bien compris pourquoi il commence le processus en ligne 2 et non en 7 comme dans l'exemple que tu as fourni)

Pour la première question de ta dernière requête :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'C'est une procédure événementielle
'(à ne pas placer dans un Module standard comme Module1)
Dim DerL&
Sheets("Ton_Onglet").activate
DerL = Cells(Rows.Count, 2).End(3).Row
For i = 7 To DerL
If Cells(i, 2) < Date Then ' si inférieur à date du jour
Cells(i, 10).Resize(, 2) = Cells(i, 10).Resize(, 2).Value ' alors valeurs seules en colonne J et K
End If
Next
End Sub
ou
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'C'est une procédure événementielle
'(à ne pas placer dans un Module standard comme Module1)
Dim DerL&
With Sheets("Ton_Onglet")
DerL = .Cells(Rows.Count, 2).End(3).Row
For i = 7 To DerL
If .Cells(i, 2) < Date Then ' si inférieur à date du jour
.Cells(i, 10).Resize(, 2) = .Cells(i, 10).Resize(, 2).Value ' alors valeurs seules en colonne J et K
End If
Next
End With
End Sub
Pour la 2ème question :

Je ne vois pas ce qui t'empêche de rajouter une colonne après celle de la DEFAITE, ce serait plutôt si tu devais en insérer une autre avant,
En ce cas il faudrait renseigner les colonnes cible et source comme ci-dessous
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'C'est une procédure événementielle
'(à ne pas placer dans un Module standard comme Module1)
Dim DerL&, Cible&, Source&
Sheets("Ton_Onglet").activate
DerL=Cells(Rows.Count, 2).End(3).Row
Cible=10
Source=2
For i = 7 To DerL
If Cells(i, Source) < Date Then ' si inférieur à date du jour
Cells(i, Cible).Resize(, 2) = Cells(i, Cible).Resize(, 2).Value ' alors valeurs seules en colonne J et K
End If
Next
End Sub
Ceci dit, ce ne sont que des exemples rapides avec des valeurs de référence en "dur", le code peut être évolutif ...


Oups, mal lue la deuxième question, en fait tu sembles vouloir étendre les colonnes à conserver :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'C'est une procédure événementielle
'(à ne pas placer dans un Module standard comme Module1)
Dim DerL&, Cible&, Source&,NombreDeColonnes&
Sheets("Ton_Onglet").activate
DerL=Cells(Rows.Count, 2).End(3).Row
Cible=10
Source=2
NombreDeColonnes&=3

For i = 7 To DerL
If Cells(i, Source) < Date Then ' si inférieur à date du jour
Cells(i, Cible).Resize(, NombreDeColonnes) = Cells(i, Cible).Resize(, NombreDeColonnes).Value ' alors valeurs seules en colonne J et K
End If
Next
End Sub
 
Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas