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 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 !
•
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 !
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
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 !
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