Copier-coller données d'un fichier excel vers un autre. [Résolu/Fermé]

Signaler
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016
-
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
-
Bonjour la communauté,

J'aurai besoin d'un petit coup de main avisé de votre part pour résoudre une macro que j'essaie de mettre en place, sachant que je ne maitrise pas vraiment ce domaine.

J'ai pour objectif (dans un fichier excel déjà ouvert) :

- d'aller ouvrir via macro un autre fichier excel situé dans autre un dossier qui pourra changer selon le nom contenu dans une certaine cellule de mon 1er fichier excel ouvert;

- copier certaine données sélectionnées d'une feuille;

- coller ces données copiées dans un tableau du fichier ouvert (coller façon collage spécial valeur);

- refermer le fichier EXCEL ( le 2e fichier)

J'ai effectué un enregistrement macro qui fonctionne mais pour un seul fichier (le coté variable ne fonctionne pas).

J'ai tenté ensuite en navigant sur les forums d'obtenir un algorithme pouvant respecter le côté variable tout en combinant l'aspect enregistrement macro pour le côté répétitif de la tâche mais ça n'a pas l'air de fonctionner.

veuillez trouver ci dessous l'algorithme que j'ai fait. Les lignes retravaillées provenant de l'enregistrement macro apparaissent en rouge dans l'outil VBA.

ne sachant pas comment vous insérer le code j'ai mis en joint une image pour que vous ayez une petite idée de ce que j'ai fait et des corrections à effectuer.

Je tiens à vous remercier pour la patience et l'attention que vous porterez à ma requête. je sais que je suis sur la bonne voie de la compréhension mais tout seul on atteint rapidement ses limites sur ce sujet.

Merci d'avance pour votre aide.

med_mugen

copier


13 réponses

Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Bonjour
Lignes en rouge, vous avez un "_" à enlever après Skipeblanks et Range(
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Bonsoir,

Tout d'abord je tiens a vous remercier pour votre intervention. En fait je viens de m'apercevoir que sur l'image, il manque une partie des cellules sélectionnées, mais rien de grave.

Lorsque j'ai copié les lignes de codes provenant de l'enregistrement macro, il y avait ces "_" de part et de l'autre de cellules sélectionnées. Mais j vais les retirer.

Je vous tiens au courant


Merci encore pour votre aide
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

j'ai effectué les corrections suggérées. Mais ça ne fonctionne pas, la macro bloque à ce niveau :

 Nomfichierentree = Application.GetOpenFilename("& valeur2 & (*.xlsx), (*xls), *.xlsm") 



Par ailleurs j'ai tenté d'associer la macro à un bouton mais ça m'affiche un message d'erreur (voir image).

 Sub Bouton1_Clic()

End Sub

Private Sub Bouton1_Clic()

Dim Wbk1 As Workbook, Wbk2 As Workbook, Dossier As String

Set Wbk1 = ThisWorkbook

valeur1 = Sheets("Heures N-1").Range("I1").Value
valeur2 = Sheets("Heures N-1").Range("K1").Value
valeur3 = Sheets("Heures N-1").Range("N1").Value
Dossier = "J:\Rom France\France\WPP\& valeur3 &"

Nomfichierentree = Application.GetOpenFilename("& valeur2 & (*.xlsx), (*xls), *.xlsm")

If Nomfichierentree <> False Then

Workbooks.Open Filename:=Dossier

Set Wbk2 = Workbooks.Open(Nomfichierentree)

ActiveSheet("valeur1").Unprotect

Wbk2.Worksheets("valeur1").Range("Z6:Z9,Z12:Z15,Z18:Z22,Z25:Z28,Z31:Z34,Z37:Z41,Z44:Z47,Z50:Z54,Z57:Z60,Z63:Z66,Z69:Z73,Z76:Z79").Select
Selection.Copy
Wbk1.Worksheets("Heures N-1").Range("I5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wbk2.Worksheets("valeur1").Range("AB6:AB9,AB12:AB15,AB18:AB22,AB25:AB28,AB31:AB34,AB37:AB41,AB44:AB47,AB50:AB54,AB57:AB60,AB63:AB66,AB69:AB73,AB76:AB79").Select
Selection.Copy
Wbk1.Worksheets("Heures N-1").Range("J5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wbk2.Worksheets("valeur1").Range("AC6:AC9,AC12:AC15,AC18:AC22,AC25:AC28,AC31:AC34,AC37:AC41,AC44:AC47,AC50:AC54,AC57:AC60,AC63:AC66,AC69:AC73,AC76:AC79").Select
Selection.Copy
Wbk1.Worksheets("Heures N-1").Range("K5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Wbk2.Worksheets("valeur1").Range("AD6:AD9,AD12:AD15,AD18:AD22,AD25:AD28,AD31:AD34,AD37:AD41,AD44:AD47,AD50:AD54,AD57:AD60,AD63:AD66,AD69:AD73,AD76:AD79").Select
Selection.Copy
Wbk1.Worksheets("Heures N-1").Range("L5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Wbk2.Close


End If



End Sub


Par avance merci pour votre aide.
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Bonjour,

plusieurs erreurs de corrigees,

Sub Bouton1_Clic()
    Dim Wbk1 As Workbook, Wbk2 As Workbook, Dossier As String
    Dim valeur1 As String, valeur2 As String, valeur3 As String
    
    Set Wbk1 = ThisWorkbook
    valeur1 = Sheets("Heures N-1").Range("I1").Value
    valeur2 = Sheets("Heures N-1").Range("K1").Value
    valeur3 = Sheets("Heures N-1").Range("N1").Value
    Dossier = "J:\Rom France\France\WPP\" & valeur3

    Nomfichierentree = Application.GetOpenFilename("" & valeur2 & "(*.xls*),*.xls*")

    If Nomfichierentree <> False Then
        Workbooks.Open Filename:=Dossier
        Set Wbk2 = Workbooks.Open(Nomfichierentree)
        ActiveSheet(valeur1).Unprotect
        Wbk2.Worksheets(valeur1).Range("Z6:Z9,Z12:Z15,Z18:Z22,Z25:Z28,Z31:Z34,Z37:Z41,Z44:Z47,Z50:Z54,Z57:Z60,Z63:Z66,Z69:Z73,Z76:Z79").Select
        Selection.Copy
        Wbk1.Worksheets("Heures N-1").Range("I5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Wbk2.Worksheets(valeur1).Range("AB6:AB9,AB12:AB15,AB18:AB22,AB25:AB28,AB31:AB34,AB37:AB41,AB44:AB47,AB50:AB54,AB57:AB60,AB63:AB66,AB69:AB73,AB76:AB79").Select
        Selection.Copy
        Wbk1.Worksheets("Heures N-1").Range("J5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Wbk2.Worksheets(valeur1).Range("AC6:AC9,AC12:AC15,AC18:AC22,AC25:AC28,AC31:AC34,AC37:AC41,AC44:AC47,AC50:AC54,AC57:AC60,AC63:AC66,AC69:AC73,AC76:AC79").Select
        Selection.Copy
        Wbk1.Worksheets("Heures N-1").Range("K5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Wbk2.Worksheets(valeur1).Range("AD6:AD9,AD12:AD15,AD18:AD22,AD25:AD28,AD31:AD34,AD37:AD41,AD44:AD47,AD50:AD54,AD57:AD60,AD63:AD66,AD69:AD73,AD76:AD79").Select
        Selection.Copy
        Wbk1.Worksheets("Heures N-1").Range("L5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Wbk2.Close
    End If
End Sub
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

Bonjour f894009 ,

tout d'abord merci vraiment de prendre de ton temps pour jeter un oeil sur mon petit souci de codage. Tu as pu t'en rendre compte je ne suis pas un expert mais j'essaie de développer cette compétence.

Merci avant tout pour tes corrections, c'est vrai qu'en essayant d'adapter les algo ici et là qui correspondant peu ou prou à notre de recherche de résultat, c'est pas vraiment ce qu'il y a de plus orthodoxe.

Concernant le code, après corrections, la fonction m'ouvre le bon chemin mais n'ouvre pas le fichier demandé par l'algo

Set Wbk2 = Workbooks.Open(Nomfichierentree)


Par ailleurs, si je clique sur le fichier excel que je souhaite (après que le dossier se soit ouvert) ce msg d'erreur apparait (vopir image ci-joint) et le code

Workbooks.Open Filename:=Dossier


est surligné lors du débogage alors qu'il était parvenu à ouvrir ce dossier.

je ne comprends pas..
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

voici le msg d'erreur en question
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,
erreur '1004':
Manque l'extention du fichier

Concernant le code, après corrections, la fonction m'ouvre le bon chemin mais n'ouvre pas le fichier demandé par l'algo cette boite a dialogue est faites pour selectionner/ouviri un fichier manuellement
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

lorsque vous " cette boite de dialogue" vous faites mention de la fonction
 Workbooks.Open Filename:=Dossier 


?
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

pardon je me suis mal exprimé, je voulais dire lorsque vous dites "cette boite de dialogue" vous faites allusion à la fonction ...
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

En fait je ne sais comment traduire l'action suivante :

"si le dossier existe alors l'ouvrir, puis si le fichier excel (dans ce dossier) existe alors l'ouvrir, puis si la feuille existe alors l'activer.."


Cette feuille est au passage protégée d'où la ligne
 ActiveSheet(valeur1).Unprotect


qui est sensé m'ouvrir une boite de dialogue m'obligeant à inscrire le mdp lié à cette feuille, pour ensuite continuer le reste de l'algorithme normalement (comme lorsque j'ai effectué la tâche la première fois avec l'enregistreur macro), i.e copier les cellules selectionnées et les coller dans l'endroit déterminé par l'algorithme.
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

j'ai essayé d'intégrer le nom du classeur à ouvrir (selon variable) dans la détermination de dossier comme suit :

 Dossier = "J:\Rom France\France\WPP\" & valeur3 & "\& valeur2 & (*.xlsx), (*xls), *.xlsm"


car dans votre formule je ne vois pas le moment où on ordonne d'ouvrir le classeur "valeur2".

j'ai tenté de l'intégrer dans "dossier" mais j'ai toujours erreur 1004
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

je sens que nous touchons au but ^^
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,

Valeur2 egal a quoi?
Valeur3 egal a quoi ?

Dossier = "J:\Rom France\France\WPP\" & valeur3 & "\& valeur2 & (*.xlsx), (*xls), *.xlsm" Portnawac !!!!
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

j'ai peut-être une piste à vous de me dire :

- j'ai retiré les extensions dans la définition de "dossier"

 Dossier = "J:\Rom France\France\WPP\" & valeur3 & "\" & valeur2 


- là j'ai eu un nouveau message me disant que le fichier est introuvable (voir image)

Je pense qu'il faut que je trouve la solution pour associer au nom du fichier n'importe quelle extension excel.
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428 >
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

Re
Marche pas, vos fichiers n'ont pas d'extension aléatoire et vous devez bien les connaître!
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016



voila le nouveau msg, puis bien évidemment le msg erreur 1004 relatif à la condition non respectée
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

j'ai tenté de rajouter une extension .xlsx, la macro fonctionne mais je viens de rencontrer une erreur 9 dont je recherche plus d'indo sur le net. Par contre il faut absolument que je trouve une solution pour que la formule prenne en compte tous les types d'extension .xls
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

.xls* fonctionne je pense que cette étape est réglée.

Dossier = "J:\Rom France\France\WPP\" & valeur3 & "\" & valeur2 &".xls*" 
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,

.xls* fonctionne Ca m'etonnerait
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

je vous jure il ouvre n'importe quel fichier dès que je modifie le nom et même si l'extension se termine par "xlsx"
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

savez vous comment on peut transmettre un dossier exemple sur le forum ?
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

je me déclare vaincu si quelqu'un peut m'aider je met à disposition ce dossier exemple. le fichier de travail se trouve dans le dossier 2016. les données à extraire se trouvent dans le dossier 2015. Les mdp des feuilles protégées sont le nom des feuilles.

Dans la macro, en tout début, il faudra modifier le début du chemin dans "dossier".

voici le lien : http://www.cjoint.com/c/FAtkmCazV46


Merci pour votre aide et vos éclaircissements
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

f894009,

je sais j'ai utilisé ce fichier et ai pris soin de modifier le chemin, mais j'ai tjs l'erreur 9 qui s'affiche une fois le fichier données à extraire ouvert.
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428 >
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

Re,
vous allez mettre la ligne On Error Resume Next en commentaire
lancer la procedure
quand vous avez l'erreur, clic sur debugage
passez le curseur souris sur la variable valeur1 pour voir son contenu, parce que si le fichier xlsx est ouvert, c'est un probleme de nom de feuille
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

je n'ai pas la fenêtre débug qui s'affiche :§
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

petite nouveauté la formule fonctionne lorsque j'ai mis en commentaire tous les lignes correspondant à la fonction error resume . Pourquoi à quoi sert cette fonction ?
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

autre point non essentiel cette fois, dans le fichier 602 j'avais dans les cellules une fonction aléatoire. donc lorsque la macro copia les valeur de ce fichier, toutes les valeurs ont été modifiées. je crois qu'il faudrait ajouter à cette macro une fonction "collage speciale valeurs".

Qu'en pensez vous ?
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

aussi je confirme je viens d'effectuer le test, pour prendre en considération tous les types d'extensions excel, il faut mettre à la fin du chemin".xls*"
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,

Impossible ou vous utilisez un autre programme genre recherche de fichiers et a ce moment vous n'utilisez pas le code que je vous modifie
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016
>
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021

la question à se poser maintenant est pourquoi la fonction error resume empechait elle la macro de fonctionner ?
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

je vous jure ça fonctionne. essayez de votre coté avec les docs que vous m'avez envoyé.

- mettez en commentaire toutes les lignes relatives à la fonction error resume et les fonctions If sous jacentes.

- remplacer "x "de ".xlsx" par"*"

- dans le dossier 2015-wpp&budgez, ouvrez le classeur 2015-wpp-601 par exemple, enregistrez sous avec le format .xlsm (prise en compte des macros) par exemple.

- supprimer le fichier précédent (.xlsx)

- lancez la macro.
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,

Ben non:

Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

Mettez en commentaires les If (ainsi que leur fermetures) pour ne pas en tenir compte, comme dans l'image ci dessous
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016



jetez un oeil ici
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Re,

Ben non, les if n'y sont pour rien puisque apres l'erreur sur la ligne:

 Set Wbk2 = Workbooks.Open(Filename:=Dossier)


repassez moi votre fichier
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

bougez pas j vous envoie ça
Messages postés
80
Date d'inscription
lundi 15 juin 2015
Statut
Membre
Dernière intervention
8 juin 2016

f894009,

http://www.cjoint.com/c/FAuiNQBrjb6

voilà le fichier.

remarque lorsqu'on choisit d'extraire les données du doc 602, vous constaterez que les valeurs extraites seront différentes de celles contenues ds le fichiers. C'est tout à fait normal. Dans ce fichier, j'avais utilisé la fonction aléatoire pour remplir les cellules. Une mise à jour se fait donc à chaque ouverture de ce fichier et vu qu'on le referme tout de suite après avoir extrait les données ...
Messages postés
15514
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
13 janvier 2021
1 428
Bonjour,

En effet ca marche sur un disque externe en reseau,mais pas avec une cle USB. Curieux!
Mais interessant