VBA EXCEL copier jusqu'a la fin du fichier

Résolu/Fermé
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 - 30 juin 2009 à 15:04
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 - 2 juil. 2009 à 10:40
Bonjour, je repost içi je pense que c'est plus approprier :-)
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.
A voir également:

60 réponses

xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
2 juil. 2009 à 09:57
voilà la solution, en tout cas j'espere \o/

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
2
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 08:19
B'jour, en faite en relisant sa le fait pas trop :-/ j'ai besoins d'aide pour le code, je suis un peu (beaucoup) nul en VBA...le C/C++ je dit pas mais là...je galére grave. En piquant à droite à gauche j'ai chopé des lignes de code mais aprés comment les imbriquer les unes aux autres...I don't know.Donc si quelqu'un pouvait me débloquer sa serai genti
Merci ;-)
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 08:30
Salut!
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 ^^
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
1 juil. 2009 à 08:44
Bonjour,

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+
0

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

Posez votre question
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 09:04
Ahh merci. Mon code n'a pas été sauvegarder hier soir ( oublie de ma part :-/ faut dire qu'il l'avais chercher...) donc je peux toujours retrouver la structure du beforeclose dans le worktruc , j'avais trouvé la forme du TANT QUE et aprés plein de code différent pour tester une cellule vide et copier/coller mais c'est tout.
Mon 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.
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 09:06
petite précision je rejoute toute les collones à partir de W
Non de la feuille -> Fiches
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 09:08
Toujours rien compris o_O
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 09:12
Voila le fichier
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.
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
1 juil. 2009 à 09:33
j'ai lu 3 fois ....
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
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 09:50
http://www.cijoint.fr/cjlink.php?file=cj200907/cijXO2KLnD.xls
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.
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 09:54
Je crois avoir compris...
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?
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 09:59
OUUUIII c'est ca :D YES! J'ai un petit souci avec ton code Bidouilleu_R. Avec la derniére ligne où je doit mettre la formule RECHERCHEV j'ai une erreur.
Comment fonctionne l'enregistreur de macro?
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:04
Ok ba alors si c'est rien de plus simple pour ta 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
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 10:06
O_o pourrai tu m'expliquer un peu s'il te plait?
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:07
tant que la premiere colonne n'est pas vide tu écrais la formule que tu veux dans la colonne X,Y,Z et AH
enfin AH j'ai compté à quoi ca correspondé comme numero la flemme xD
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 10:13
OK donc combiner la inputBox avec ton code sa pourrai donner sa?

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?!?
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:14
J'ai pas compris l'histoire de la date par contre ^^
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 10:21
ma colonne X correspond à une date pas une formule. Et Bidouilleur ma je pense donné le code d'une inputbox donc ladate doit correspondre à la variable de stockage de la box. On renseigne une fois la date et sa la copie jusqu'a la fin. Par contre si je rajoute des lignes et que précédamment tous était correctement remplies est-ce que sa va recopier encore les formules?
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:25
Mais si tu veux mettre la même date dans toutes les cellules, tu as juste à leur faire remplir la première case et après dans ta macro tu mets:

Activesheet.Cells(24,introw) = Activesheet.cells(24, introw - 1)
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 10:31
J'ai une erreur de compilation je pense que c'est à cause des " mais je ne sias pas réglé le problème.

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
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:33
A quelle endroit ton erreur de compilation?
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
1 juil. 2009 à 10:33
Je suis obligé de vous laisser mais je vois que vous avez bien progréssé.
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.
0
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 38
1 juil. 2009 à 10:34
Autre petite question ^^ j'ai besoin de l'heure aussi. Comment je fait? j'ai essayer de rajouter le format derriére la date mais errer de compil aussi.
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
1 juil. 2009 à 10:40
ActiveSheet.Cells(!!!!!, introw) = "=SI(NBCAR(F2)<8;"Non Référencé";SI(DROITE(F2;6)="000000";"Non Référencé";F2))"

A cet endroit il faut un chiffre.
Pour l'heure Fonction time


Dim letemps as time
letemps=time ' heure du système.
utilise aussi la fonction format comme ça format (letemps,"hh:mm:ss")
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
1 juil. 2009 à 10:41
Ben oui il faut un chiffre xD
je lui ai dis que j'avais pas cherché à quel numéro correspondait la colonne AH car j'avais la flemme xD

Et après pour temps et date tu concatene:

date= ladate & "_" & letemps
0