Copiers des données spécifiques vers un autre fichier

Bonjour le Forum,

Joyeuses fêtes à tous!

Je fais quelques insomnies pour une problématique de copie de données spécifiques de divers fichiers pour les déplacer vers un autre fichier. Mes recherches sur ce forum et par ailleurs se heurtent à des solutions non adaptées... Car, dans mon cas, il s'agit de copier le contenu de certaines cellules de certaines feuilles d'un classeur (Feuille source) vers un classeur (Feuille destinataire) contenant 2 feuilles.

La feuille à copier est sélectionnée via un userform (ici Userform2).

La première de ces 2 feuilles du classeur destinataire (parametres) ne reçoit qu'une valeur en B2, celle qui se trouve invariablement en A7 de la feuille copiée.

La 2e feuille du classeur destinataire (donnees) prend quant à elle l'essentiel des informations comprises dans la plage A8:H jusqu'à la dernière colonne non vide, à l'exception des données de la colonne D qui ne sont pas à copier.

Alors, avec ça, vous comprenez pourquoi j'ai des migraines au point de rester éveillé jusqu'à 02h32! J'ai tenté un code mais, ça va pas à chaque fois...

Pour simplifier, on va dire que les 2 fichiers joints sont dans C:\Mes Documents\VBA.

Je joins les fichiers pour plus de clarté.

Merci par avance

Jeanba

Bonjour

Un essai à tester. Te convient-il ?

Bye !

26jeanba.zip (202.15 Ko)

Bonjour gmb, bonjour le Forum,

Je suis stupéfait de voir la rapidité avec laquelle tu as abordé le problème que j'ai soumis.

La solution est exactement celle-là!

La seule petite chose qui me comblerait, serait de pouvoir 1) effacer toutes les données du classeur destinataire et 2) écrire dans le classeur destinataire sans l'ouvrir. J'ai lu quelque part dans ce forum que des gens en sont arrivés. Sauf que moi je suis pas doué...

Merci en tous les cas pour tout!

Joyeux Noël!

Jeanba

Dis gmb,

j'aimerais que le copier/coller soit en valeur.

Comment insérer l'instruction PasteSpecial Paste:=xlPasteValues dans ta formule là:

           fp.Range("B2") = fm.Range("A7")
            fd.Range("A1").CurrentRegion.Offset(1, 0).ClearContents
            fm.Range("A8:C" & fm.Range("A" & Rows.Count).End(xlUp).Row).Copy fd.Range("A2")
            fm.Range("E8:H" & fm.Range("A" & Rows.Count).End(xlUp).Row).Copy fd.Range("D2")
Jeanba a écrit :

La seule petite chose...

Je crois qu’en fait il y en a plusieurs :

pouvoir 1) effacer toutes les données du classeur destinataire

La macro efface déjà les données du tableau destinataire de la page ‘’DONNEES’’ et écrase ce qu’il y a dans la cellule B2 de la feuille ‘’PARAMETRES’’.

Doit-elle effacer autre chose ?

2) écrire dans le classeur destinataire sans l'ouvrir

Je ne sais pas faire ça. Mais je peux faire en sorte que la macro ouvre le fichier, remplace les données et le referme en l’enregistrant.

j'aimerais que le copier/coller soit en valeur.

Ce n’est pas un problème

Nouvelle version :

Bye !

15jeanba.zip (216.60 Ko)

2) écrire dans le classeur destinataire sans l'ouvrir

Je ne sais pas faire ça. Mais je peux faire en sorte que la macro ouvre le fichier, remplace les données et le referme en l’enregistrant.

Cher gmb,

Tout est parfait! Si tu peux juste faire ouvrir le fichier, y écrire, l'enregistrer et le refermer...

Dans la dernière version que tu as envoyée, je crois que la macro ouvre déjà le fichier, y inscrit les données mais ne le referme pas

En effet, je suis en train de développer derrière un module qui récupère le fichier destinataire ainsi obtenu pour d'autres fins..

Et cette procédure doit débuter après ton message "Exportation réussie". Je clique sur ok et je fais un Call d'une autre procédure pour terminer...

Au passage, ce qui m'embête aussi c'est l'enregistrement sous pdf d'une feuille (attention, pas tout le classeur!!) sous le nom de la feuille + la valeur en A7. Ainsi, si ma feuille s'appelle Janvier, j'aimerai pouvoir sauvegarder les données de ce mois sous pdf sous ce nom "Journal 01 2016" (2016 étant une valeur stockée dans une feuille "parametres" et correspondant à l'année en cours...

Avec les autres sur ce forum et ailleurs, vous m'avez suffisamment bleuffé que je crois que ce serait un jeu d'enfant pour vous...

Merci par avance,

Jeanba

Jeanba a écrit :

je crois que la macro ouvre déjà le fichier, y inscrit les données mais ne le referme pas

Mais si ! Dans la dernière version envoyée, le fichier se refermait, en tout cas sur mon PC.

Dans celle ci-jointe, le fichier reste ouvert et un autre fichier, fermé, est enregistré au format PDF dans le dossier d'origine.

Bye !

13jeanba.zip (218.85 Ko)

Effectivement, dans la version précédente, le fichier se charge et se referme.

J'ai dû pas prêter attention du fait que tu as laissé cette ligne de code (qui ne devrait plus avoir lieu alors?):

OuvrirFichier:
    MsgBox "Vous devez ouvrir le fichier ''fichier vers autre - Feuille destinataire.xlsm''", 16
End Sub

En m'en tenant à ton dernier chef-d'oeuvre, je m'incline! C'est exactement en tout point ce dont je rêvais!

Ce sera mon cadeau de Noël, tu ne réalises pas combien de temps j'ai déjà passer dessus à chercher...

Donc, pour finir en beauté, je te parlais d'une procédure que j'appelle en fin de procédure après lemessage "Exportation réussie".

Cette autre procédure appelons là inventaire. Elle se trouve dans un autre fichier que la macro doit ouvrir et s'exécuter.

J'ai tapé cette ligne de code que j'ai chopée chez toi et ça fonctionne bien:

    MsgBox "Exportation réussie !"
    [b][color=#0000BF]Workbooks.Open Filename:=ThisWorkbook.Path & "\Inventaire.xlsm"[/color][/b]
Exit Sub

Alors, ma question est de savoir si c'est mieux d'ouvrir ce classeur ainsi ou faut-il dans les règles de l'art préférer le faire dans un module qu'on appelle?

Encore merci!

Jeanba

Jeanba a écrit :

ma question est de savoir si c'est mieux d'ouvrir ce classeur ainsi ou faut-il dans les règles de l'art préférer le faire dans un module qu'on appelle?

Si ça marche comme ça, pourquoi chercher autre chose ?

Bye !

Bonjour gmb, bonjour le Forum,

Bon, là j'y comprends plus rien..

Hier soir, en exécutant ta macro gmb, ça marchait comme sur des roulettes.

J'ai voulu intégré cette macro dans mon projet final, ça bugg!

Je joins les fichiers :

1) "Souci d'exec..." qui contient l'usf et donc aussi les feuilles à copier en fonction de la sélection

2) "Feuille export" qui est la feuille destinataire des données copiées

3) "Inventaire" qui contient le programme extérieur que j'appelle en milieu de procédure

Et, petite cerise sur le gâteau, si c'est possible, une barre de progression pendant l'exécution de tout ça pour faire patienter...

Merci par avance

Jeanba

14feuille-export.xlsm (26.35 Ko)
12inventaire.xlsm (58.40 Ko)

Bonjour à tous,

Quelqu'un a-t-il une idée de la raison pour laquelle cette macro (voir fichiers joints post précédent) ne marche pas s'il vous plaît?

Voici l'algo:

Option Explicit

Dim WbData As Workbook         ' WbData = Classeur de données source
Dim WbExp As Workbook          ' WbExp = Classeur destinataire
Dim ShData As Worksheet           ' ShData = Feuille du classeur de données source, sélectionné sur l'userform 08
Dim ShExpP As Worksheet           ' ShExpP = Feuille du classeur destinataire nommé "PARAMETRES"
Dim ShExpD As Worksheet          ' ShExpD = Feuille du classeur destinataire nommé "DONNEES"
Dim mois, i&

' *********************************

Private Sub USF08_CommandButton1_Click()
    Unload Me
End Sub

' ************************************

Private Sub USF08_CommandButton2_Click()
    Application.ScreenUpdating = False
    mois = (Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", _
            "Décembre"))

    For i = 1 To 12
        If Me.Controls("USF08_OptionButton" & i).Value = True Then
            Set ShData = WbData.Sheets(mois(i - 1))
            DeverrouillerFeuille
            On Error GoTo OuvrirFichier
            Set ShExpP = WbExp.Sheets("PARAMETRES")
            Set ShExpD = WbExp.Sheets("DONNEES")
            ShExpP.Range("B2") = ShData.Range("A7")
            ShExpD.Range("A4").CurrentRegion.Offset(1, 0).ClearContents
            ShData.Range("A8:C" & ShData.Range("A" & Rows.Count).End(xlUp).Row).Copy
            ShExpD.Range("A4").PasteSpecial xlPasteValues
            ShData.Range("E8:H" & ShData.Range("A" & Rows.Count).End(xlUp).Row).Copy
            ShExpD.Range("D4").PasteSpecial xlPasteValues
            Exit For
        End If
    Next i
    ShData.Copy
    ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\Sauvegarde Journal " & Format(i, "00") & " " & WbExp.Range("parametres!B2") & ".pdf"
    ActiveWindow.Close False
    WbExp.Close
    Unload Me
    Application.CutCopyMode = False
    MsgBox "Génération du Fichier Comptable: " & Chr(13) & Chr(10) & "Etape 1: Export des données du mois exécutée à 100%!"
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Inventaire.xlsm"
Exit Sub
OuvrirFichier:
    MsgBox "Vous devez ouvrir le fichier ''Feuille export.xlsm''", 16
    Unload Me
End Sub

'*******************************************

Private Sub UserForm_Initialize()
    Set WbData = ActiveWorkbook
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Feuille export.xlsm"
    Set WbExp = ActiveWorkbook
    WbData.Activate
End Sub

Merci beaucoup!

Jeanba

Bonjour

Essaie ça :

Pour ce qui est de la cerise, ce n'est pas dans mes cordes. Fais un nouveau post !

Bye !

Bonjour gmb,

Content d'avoir de tes nouvelles.

J'ai essayé ton fichier, il bug avec ce message, je sais vraiment pas ce qu'il se passe:

erreur execution 30 12

Désolé ! Je n'ai jamais rencontré ce message...

Bye !

Bonsoir gmb,

Non, ne sois pas désolé!

A l'impossible nul n'est tenu. Tu m'as déjà énormément aidé.

Gratitude ++

Bonnes fêtes à tous et Meilleurs voeux pour 2017!

Jeanba

Rechercher des sujets similaires à "copiers donnees specifiques fichier"