VBA EXCEL copier jusqu'a la fin du fichier
Résoluxav3601 Messages postés 3390 Statut Membre -
J'ai un petit souci avec EXCEL, je voudrai automatiser des actions avant la fermeture (beforeclose) car mes utilisateurs ne sont pas trés pousser niveau informatique donc faut les aider au maximum...Donc il faut que sa copie le contenu de 4 colonnes jusqu'à la fin de la feuille. J'ai trois colonnes de formules et une de date si on pouvait même faire une textbox qui demanderai la date et qui la copierai jusqu'à la fin sa sera cool mais ce n'est pas le principal. Donc voila je demande votre aide et je vous remercis d'avance.
--
Si vous avez besoin de quelque chose, appelez-moi. Je vous dirai comment vous en passer.
-Coluche-
Configuration: Une bonne bébétte bien docile ;-)
- VBA EXCEL copier jusqu'a la fin du fichier
- Fin windows 10 - Guide
- Fichier epub - Guide
- Fichier bin - Guide
- Forcer la suppression d'un fichier - Guide
- Fichier .dat - Guide
60 réponses
- 1
- 2
- 3
Le problème porte sur l'automatisation d'actions dans Excel avant la fermeture, notamment copier le contenu de quatre colonnes jusqu'à la fin de la feuille et, éventuellement, saisir une date via une textbox. La solution principale propose une macro VBA déclenchée sur l'événement Workbook_BeforeSave, parcourant les lignes et remplissant les colonnes 23 à 25 avec des formules et une date. Des réponses complémentaires évoquent l'utilisation d'une InputBox et signalent des difficultés d'enregistrement des formules, avec des conseils pour supprimer la saisie ou corriger des erreurs de compilation dans le code. En pratique, le choix des colonnes et feuilles sources et l'obligation éventuelle de la date peuvent varier, ce qui influence le comportement du script selon le contexte des données.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
letemps = Time ' heure du système.
ladate = Format(InputBox("Donner la date SVP...", "Saisie de la date", Date), "dd/mm/yyyy")
ladate = ladate & "_" & letemps
introw = 1
While ActiveSheet.Cells(introw, 1) <> ""
If ActiveSheet.Cells(introw, 23).Value = "" Then
'ActiveSheet.Cells().Value = "=RECHERCHEV(D2;'Commune CAD PDL'!A:B;2;FAUX)"
ActiveSheet.Cells(introw, 23).FormulaR1C1 = "=VLOOKUP(RC[-19],'Commune CAD PDL'!C[-22]:C[-21],2,FALSE)"
End If
If ActiveSheet.Cells(introw, 24).Value = "" Then
ActiveSheet.Cells(introw, 24).Value = ladate
End If
If ActiveSheet.Cells(introw, 25).Value = "" Then 'ActiveSheet.Cells(introw, 25).Value = "=RECHERCHEV(W2;'Communes BEX'!$A$2:$C$601;3;FAUX)"
ActiveSheet.Cells(introw, 25).FormulaR1C1 = "=VLOOKUP(RC[-2],'Communes BEX'!R2C1:R601C3,3,FALSE)"
End If
If ActiveSheet.Cells(introw, 34).Value = "" Then
'ActiveSheet.Cells(introw, 34).Value = "=SI(NBCAR(F2)<8;"*Non Référencé";SI(DROITE(F2;6)="000000";"Non Référencé";F2))"
ActiveSheet.Cells(introw, 34).FormulaR1C1 = "=IF(LEN(RC[-28])<8,""Non Référencé"",IF(RIGHT(RC[-28],6)=""000000"",""Non Référencé"",RC[-28]))"
End If
introw = introw + 1
Wend
End Sub
Merci ;-)
Faudrait que tu expliques la structure de ton fichier excel plus en détails, et aussi montrer ce que tu as déjà plus ou moins fait ^^
j'ai lu et relu, mais j'ai du mal à suivre.
petite remarque ... tu sais de quoi tu parles mais moi pas.
Je crois comprendre que la source (par exemple Colonne A B C D ) il y aurait une Date en A et Qu'il faudrait
copier/coller la ou les lignes après une date définie (en colonne A peut-être) dans une autre feuille.
Est-ce cela?
Précise La source (colonne /nom de feuille)
précise le but (colonne /nom de feuille)
le format des données (valeurs ou formule)
Tu dis et j'essaye de t'aider.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMon fichier se présente comme ca.
A B C D E ... W X Y ....AH avec le nombre de lignes de toutes les colonnes sont égal mais pas fixe.
W -> Formule RECHERCHEV
X -> Date à mettre (pour l'instant à la main même si j'aimerai le faire en Textbox)
Y -> Formule RECHERCHEV
AH -> Formule RECHERCHEV
Voila les 4 col que je rajoute, toutes les autres arrivent d'un vulgaire copier/coller.
Donc une fois que c'est copier pour l'instant je dois descendre les formules jusque en bas (pour moi sa me prend 2s mais pour les autres...sa prend facile la minute :-/ )
Je sais pas si sa t'aide pour le moment, mais merci.
http://www.cijoint.fr/cjlink.php?file=cj200907/cijkZBQcC4.xls
Je pense que sa aidera à la comprehension, donc comme je le disais j'ai préremplie certaine colonnes mais si on rajoute beaucoup d'enregistrement il faudra copier les formules et la date vers la fin du fichier.
et je comprends xav3601.... tu ne réponds pas aux questions.
je comprends Ca!
W -> Formule RECHERCHEV
X -> Date à mettre (pour l'instant à la main même si j'aimerai le faire en Textbox)
Y -> Formule RECHERCHEV
AH -> Formule RECHERCHEV
en fait tu voudrais écrire en "Automatique" les formules déjà existante en Wnn , la date en Xnn, et ..
à nouveau 2 formules en Ynn et AHnn ( nn représente le n° de ligne)
pour la date je conseille d'utiliser un inputbox plutôt qu'un textbox (ce sera plus souple).
sub test()
Dim ladate As Date
ladate = Format(InputBox("Donner la date SVP...", "Saisie de la date", Date), "dd/mm/yyyy")
Range("X1").Select
Selection.End(xlDown).Select 'dernière ligne pleine
ActiveCell.Offset(1, 0).Select ' ligne suivante ou première ligne vide
' il ne doit pas y avoir de "vide dans les dates"
activecell.value=ladate
' tu vas en W ( recul de 1 colonne )
activecell.offset(0,-1).select
ActiveCell.FormulaR1C1 = " recopie ici la formule de rechercheV "
'tu vas en Y
activecell.offset(0,2).select
ActiveCell.FormulaR1C1 = " recopie ici la formule en utilisant l'enregistreur de macro.."
' tu es en Y tu vas en AH
activecell.offset(0,9).select
ActiveCell.FormulaR1C1 = " recopie ici la formule en utilisant l'enregistreur de macro.."
' ensuite tu peux sauvegarder
' Activeworkbook.save
end sub
J'ai fait un fichier tel qu'il serai actuellement (en allégé) les colonnes avant W sont remplie par un copier/coller.
on peut voir que les autres ne sont pas remplie et c'est ce qu'il faut automatiser, que les colonnes désirées soient aussi remplies. J'éspère avoir été compris :-/
Pour ton code Bidouilleu_R c'est la inputBox ? je travail sur la compréhension actuelement.
Ta colonne A est rempli, et tu voudrais qu'on fasse un copier coller des formules présentes dans les cellule w1 x1 y1 ah1 dans les cellules en dessous jusqu'à la derniere ligne rempli dans la colonne A?
Comment fonctionne l'enregistreur de macro?
introw=1
Do until activesheet.cells(1, introw) <> ""
Activesheet.cells(25,introw)= formule
Activesheet.cells(24,introw)= formule
Activesheet.cells(23,introw)= formule
Activesheet.cells(,introw)= formule
introw=introw + 1
Loop
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ladate As Date
ladate = Format(InputBox("Donner la date SVP...", "Saisie de la date", Date), "dd/mm/yyyy")
Range("X1").Select
introw=1
Do until activesheet.cells(1, introw) <> ""
Activesheet.cells(25,introw)= formule
Activesheet.cells(24,introw)= ladate
Activesheet.cells(23,introw)= formule
Activesheet.cells(,introw)= formule
introw=introw + 1
Loop
End Sub
Récapitulation sa met la Formule pour W1 , la date renseigner dans la box dans X1, la formule pour Y1 et la formule pour AH1 puis sa passe à la deuxiéme ligne et rebelote...
Non?!?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ladate As Date
ladate = Format(InputBox("Donner la date SVP...", "Saisie de la date", Date), "dd/mm/yyyy")
Range("X1").Select
Selection.End(xlDown).Select 'dernière ligne pleine
ActiveCell.Offset(1, 0).Select ' ligne suivante ou première ligne vide
' il ne doit pas y avoir de "vide dans les dates"
ActiveCell.Value = ladate
introw = 1
Do Until ActiveSheet.Cells(1, introw) <> ""
ActiveSheet.Cells(25, introw) = "RECHERCHEV(D2;'Commune CAD PDL'!A:B;2;FAUX)"
ActiveSheet.Cells(24, introw) = ActiveSheet.Cells(24, introw - 1)
ActiveSheet.Cells(23, introw) = "=RECHERCHEV(W2;'Communes BEX'!$A$2:$C$601;3;FAUX)"
->>>ActiveSheet.Cells(, introw) = "=SI(NBCAR(F2)<8;"Non Référencé";SI(DROITE(F2;6)="000000";"Non Référencé";F2))"
introw = introw + 1
Loop
End Sub
au post 11 tu dis
Comment fonctionne l'enregistreur de macro?
en excel 2003 : outils.macro/enregistrer une macro appelle là "toto"
click sur une formule valide en appuyant sur entrée passe à la formule suivante.
quand tu as fini outils/macro/arrêter l'enregistreur.
Alt F11 (il y a un nouveau module avec la macro toto) tu trouveras la syntaxe.
Je vous laisse.
Bon courage.
- 1
- 2
- 3