VBA EXCEL copier jusqu'a la fin du fichier

Résolu
Fou_Du_Guidon Messages postés 347 Statut Membre -  
xav3601 Messages postés 3390 Statut Membre -
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.

--
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 ;-)

60 réponses

  • 1
  • 2
  • 3
Résumé de la discussion

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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. xav3601 Messages postés 3390 Statut Membre 312
     
    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
  2. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  3. xav3601 Messages postés 3390 Statut Membre 312
     
    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
  4. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  7. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    petite précision je rejoute toute les collones à partir de W
    Non de la feuille -> Fiches
    0
  8. xav3601 Messages postés 3390 Statut Membre 312
     
    Toujours rien compris o_O
    0
  9. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  10. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  11. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  12. xav3601 Messages postés 3390 Statut Membre 312
     
    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
  13. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  14. xav3601 Messages postés 3390 Statut Membre 312
     
    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
  15. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    O_o pourrai tu m'expliquer un peu s'il te plait?
    0
    1. xav3601 Messages postés 3390 Statut Membre 312
       
      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
  16. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
    1. xav3601 Messages postés 3390 Statut Membre 312
       
      J'ai pas compris l'histoire de la date par contre ^^
      0
  17. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
    1. xav3601 Messages postés 3390 Statut Membre 312
       
      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
  18. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
    1. xav3601 Messages postés 3390 Statut Membre 312
       
      A quelle endroit ton erreur de compilation?
      0
  19. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  20. Fou_Du_Guidon Messages postés 347 Statut Membre 38
     
    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
  21. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
    1. xav3601 Messages postés 3390 Statut Membre 312
       
      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
  • 1
  • 2
  • 3