Macro excel vba et copier coller entre classeur
Résolu/Fermé
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
-
9 févr. 2016 à 11:26
FixiF Messages postés 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 10 février 2016 - 10 févr. 2016 à 15:30
FixiF Messages postés 10 Date d'inscription mardi 9 février 2016 Statut Membre Dernière intervention 10 février 2016 - 10 févr. 2016 à 15:30
A voir également:
- Macro excel vba et copier coller entre classeur
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Si et excel - Guide
- Liste déroulante excel - Guide
- Copier coller pdf - Guide
- Word et excel gratuit - Guide
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
9 févr. 2016 à 11:35
9 févr. 2016 à 11:35
Bonjour
Chaque ligne aurait donc 5 colonnes remplies.
Colonnes jointives ou toute les 2 colonnes? ou se trouve la copie de A2 ?
ou se trouve le classeur avec 5 cellules (A2, A4, A6, A8, A10)
les classeurs "cible" ont ils un nom générique et quel suffixe Excel ?
Merci d'^tre précis et complet dans votre demande
Chaque ligne aurait donc 5 colonnes remplies.
Colonnes jointives ou toute les 2 colonnes? ou se trouve la copie de A2 ?
ou se trouve le classeur avec 5 cellules (A2, A4, A6, A8, A10)
les classeurs "cible" ont ils un nom générique et quel suffixe Excel ?
Merci d'^tre précis et complet dans votre demande
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 10/02/2016 à 14:02
Modifié par michel_m le 10/02/2016 à 14:02
re
me re voilà j'avais pigé l'inverse!
pas la forme today !
sans ouvrir les classeurs TO;xlsx
me re voilà j'avais pigé l'inverse!
pas la forme today !
sans ouvrir les classeurs TO;xlsx
Option Explicit
Const Chemin As String = "D:\docus\" 'A adapter au contexte
Sub compiler_N_classeurs()
Dim Lig As Integer, Fich As String
Application.ScreenUpdating = False
With ActiveSheet
ChDir Chemin
Fich = Dir("TO" & "*.xlsx")
Lig = 2
While Fich <> ""
.Cells(Lig, "B") = ExecuteExcel4Macro("'" & Chemin & "[" & Fich & "]Feuil1'!R2C1") 'R2C1=A2
.Cells(Lig, "C") = ExecuteExcel4Macro("'" & Chemin & "[" & Fich & "]Feuil1'!R2C3") 'C2
.Cells(Lig, "D") = ExecuteExcel4Macro("'" & Chemin & "[" & Fich & "]Feuil1'!R2C5") 'E2
.Cells(Lig, "E") = ExecuteExcel4Macro("'" & Chemin & "[" & Fich & "]Feuil1'!R2C7") 'G2
.Cells(Lig, "F") = ExecuteExcel4Macro("'" & Chemin & "[" & Fich & "]Feuil1'!R2C9") 'I2
Lig = Lig + 1
Fich = Dir
Wend
End With
End Sub
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
10 févr. 2016 à 14:22
10 févr. 2016 à 14:22
Re Michel !
Merci pour ce nouveau code !
Je l'ai intégré à visual basic en remplacant le chemin (à savoir pour moi : "C:\essai_copie") dans lequel sont présent mes fichiers xlsx.
L'exécution de la macro ne remplis rien dans le fichier mère ou la macro est implantée...
Y a t'il un autre élément à modifier ?
Merci pour ce nouveau code !
Je l'ai intégré à visual basic en remplacant le chemin (à savoir pour moi : "C:\essai_copie") dans lequel sont présent mes fichiers xlsx.
L'exécution de la macro ne remplis rien dans le fichier mère ou la macro est implantée...
Y a t'il un autre élément à modifier ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
10 févr. 2016 à 14:26
10 févr. 2016 à 14:26
n'aurais tu pas oublier l'antislash car chez moi ca marche (enfin!)
"C:\essai_copie\"
"C:\essai_copie\"
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
10 févr. 2016 à 14:46
10 févr. 2016 à 14:46
l'antislash est bien dans le chemin ciblée, j'ai intégré : Const Chemin As String = "C:\essai_copie\"
Je n'ai rien modifié d'autre.
Mon dossier est bien dans le lecteur C:
J'ai créé deux fichier sources nommés "FO(1)" et "FO(2)" dans lesquels les cellules A2,A4,A6,A8,A10 sont remplies (format de cellule texte) Ils sont ouverts avant l'exécution de la macro.
La macro est bien implantée dans le fichier mère "mere.xlsm" que j'ai placé dans le même dossier.
J'ai crée un bouton "controle de formulaire" pour exécuter la macro.
Je ne vois pas ce que qui cloche...
Je n'ai rien modifié d'autre.
Mon dossier est bien dans le lecteur C:
J'ai créé deux fichier sources nommés "FO(1)" et "FO(2)" dans lesquels les cellules A2,A4,A6,A8,A10 sont remplies (format de cellule texte) Ils sont ouverts avant l'exécution de la macro.
La macro est bien implantée dans le fichier mère "mere.xlsm" que j'ai placé dans le même dossier.
J'ai crée un bouton "controle de formulaire" pour exécuter la macro.
Je ne vois pas ce que qui cloche...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
Modifié par pijaku le 10/02/2016 à 14:57
Modifié par pijaku le 10/02/2016 à 14:57
Dans la macro de Michel, écrire "FO" au lieu de "TO" :
Fich = Dir("TO" & "*.xlsx")
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
10 févr. 2016 à 15:29
10 févr. 2016 à 15:29
Oui en effet !!! Merci Pijaku ! ;)
Le code fonctionne :) le code ne sélectionne pas encore les bonnes cellules dans les "fichiers source" mais je peux corriger tout seul ce détail :) Merci beaucoup pour votre aide précieuse ! :)
Le code fonctionne :) le code ne sélectionne pas encore les bonnes cellules dans les "fichiers source" mais je peux corriger tout seul ce détail :) Merci beaucoup pour votre aide précieuse ! :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 9/02/2016 à 17:12
Modifié par michel_m le 9/02/2016 à 17:12
OK
A demain dans la matinée
encore une question !!!
type de données copiées: texte, nombre, date ?
Michel
A demain dans la matinée
encore une question !!!
type de données copiées: texte, nombre, date ?
Michel
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
9 févr. 2016 à 18:59
9 févr. 2016 à 18:59
Les données copiées seront des textes ;)
D'accord, à demain, je resterai disponible: )
Bonne soirée
D'accord, à demain, je resterai disponible: )
Bonne soirée
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
10 févr. 2016 à 08:13
10 févr. 2016 à 08:13
Bonjour
c'est parti
sois patient, y'a du boulot !
c'est parti
sois patient, y'a du boulot !
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 10/02/2016 à 10:20
Modifié par michel_m le 10/02/2016 à 10:20
Re,
J'avais tenté un truc sans ouvrir les fichiers (rapidité) mais c'est refusé depuis XL2007, hélas! :-(
Important écrire le dossier de la constante "Chemin"
Michel
J'avais tenté un truc sans ouvrir les fichiers (rapidité) mais c'est refusé depuis XL2007, hélas! :-(
Important écrire le dossier de la constante "Chemin"
Option Explicit
Const Chemin As String = "D:\docus\" 'A adapter au contexte
Sub copier_dans_N_classeurs()
Dim Col As Byte, Tablo, Cptr As Byte, Fich As String
Application.ScreenUpdating = False
ReDim Tablo(4)
With ActiveSheet
'Mémorisation des données à copier
For Col = 1 To 9 Step 2
Tablo(Cptr) = .Cells(2, Col)
Cptr = Cptr + 1
Next
End With
ChDir Chemin
Fich = Dir("TO" & "*.xlsx")
While Fich <> ""
Workbooks.Open (Chemin & Fich)
With ActiveWorkbook
Sheets("feuil1").Range("B2").Resize(1, 5) = Tablo
.Save
.Close
End With
Fich = Dir
Wend
End Sub
Michel
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 10/02/2016 à 11:29
Modifié par pijaku le 10/02/2016 à 11:29
Bonjour Michel,
Excuse l'incruste, mais je crois que tu as fait l'inverse de ce que demandais FixiF :
- Copier le contenu de 5 cellules (A2, A4, A6, A8, A10) sur 50 tableurs excels de structure identiques localisés dans un dossier source.
- Coller ces contenus de cellule dans un tableur excel mère avec 1 ligne pour chaque tableur source.
Les 5 cellules à copier sont dans les 50 classeurs, et ,il veut les coller dans un classeur "récap".
Ce qui t'as induit en erreur c'est ceci :
qu'il faut comprendre comme ceci, je pense :
La copie de A2 se trouve sur la cellule Bi du classeur mère,
La copie de A4 se trouve sur la cellule Ci,
La copie de A6 se trouve sur la cellule Di,
La copie de A8 se trouve sur la cellule Ei,
La copie de A10 se trouve sur la cellule Fi.
ou i est le numéro de la dernière ligne du classeur "mère" (récap)
Excuse l'incruste, mais je crois que tu as fait l'inverse de ce que demandais FixiF :
- Copier le contenu de 5 cellules (A2, A4, A6, A8, A10) sur 50 tableurs excels de structure identiques localisés dans un dossier source.
- Coller ces contenus de cellule dans un tableur excel mère avec 1 ligne pour chaque tableur source.
Les 5 cellules à copier sont dans les 50 classeurs, et ,il veut les coller dans un classeur "récap".
Ce qui t'as induit en erreur c'est ceci :
La copie de A2 se trouve sur la cellule B2 du classeur mère,
La copie de A4 se trouve sur la cellule B3,
La copie de A6 se trouve sur la cellule B4,
La copie de A8 se trouve sur la cellule B5,
La copie de A10 se trouve sur la cellule B6.
qu'il faut comprendre comme ceci, je pense :
La copie de A2 se trouve sur la cellule Bi du classeur mère,
La copie de A4 se trouve sur la cellule Ci,
La copie de A6 se trouve sur la cellule Di,
La copie de A8 se trouve sur la cellule Ei,
La copie de A10 se trouve sur la cellule Fi.
ou i est le numéro de la dernière ligne du classeur "mère" (récap)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
10 févr. 2016 à 11:44
10 févr. 2016 à 11:44
Si c'est le cas, et que je ne me goure pas, ce genre de code devrait convenir :
!!!Adapter les 3 constantes avec les noms des feuilles
!!!Adapter les 3 constantes avec les noms des feuilles
Option Explicit Const NomFeuilFichiers As String = "Feuil1" 'le nom commun à l'unique feuille des xxx fichiers Const NomFeuilTemp As String = "Feuil2" 'le nom d'une autre feuille, vierge, du fichier mère Const NomFeuilRecap As String = "Feuil1" 'le nom de la feuille du fichier mère qui accueille les données Sub Import() Dim objShell As Object, objFolder As Object Dim Chemin As String, fichier As String Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&) If objFolder Is Nothing Then MsgBox "Abandon opérateur", vbCritical, "Annulation" Else Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\" fichier = Dir(Chemin & "*.xlsx") Do While Len(fichier) > 0 If fichier <> ThisWorkbook.Name Then ThisWorkbook.Names.Add "Plage", RefersTo:="='" & Chemin & "[" & fichier & "]" & NomFeuilFichiers & "'!$A$2:$A$10" With Sheets(NomFeuilTemp) .[A2:A10] = "=Plage" .Range("A2,A4,A6,A8,A10").Copy Sheets(NomFeuilRecap).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True End With End If fichier = Dir() Loop ThisWorkbook.Names("Plage").Delete End If End Sub
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
10 févr. 2016 à 13:02
10 févr. 2016 à 13:02
Bonjour,
Désolé pour ma réponse tardive...
Je vais intégrer le code pour tester !
Mais oui en effet comme dit pikaju les 5 cellules à copier sont dans les 50 classeurs sources, et l'idée est de les coller dans le classeur mère (ou "récap").
Est ce qu'on s'est mal compris ?
Désolé pour ma réponse tardive...
Je vais intégrer le code pour tester !
Mais oui en effet comme dit pikaju les 5 cellules à copier sont dans les 50 classeurs sources, et l'idée est de les coller dans le classeur mère (ou "récap").
Est ce qu'on s'est mal compris ?
FixiF
Messages postés
10
Date d'inscription
mardi 9 février 2016
Statut
Membre
Dernière intervention
10 février 2016
10 févr. 2016 à 13:55
10 févr. 2016 à 13:55
Re-bonjour !
Tout d'abord merci pour votre aide :)
j'ai donc testé les deux codes sources:
Le premier ne semble rien donner, l'implémentation de données dans le classeur mère ne s'effectue pas mais aucun message d'erreur.
Pijaku j'ai ensuite essayé ton code qui, une fois le dossier sélectionné, m'a écrit dans 5 colonnes sur une ligne "=page"
La partie du code :
With Sheets(NomFeuilTemp)
.[A2:A10] = "=Plage"
est elle à modifier ?
merci de votre aide :)
Tout d'abord merci pour votre aide :)
j'ai donc testé les deux codes sources:
Le premier ne semble rien donner, l'implémentation de données dans le classeur mère ne s'effectue pas mais aucun message d'erreur.
Pijaku j'ai ensuite essayé ton code qui, une fois le dossier sélectionné, m'a écrit dans 5 colonnes sur une ligne "=page"
La partie du code :
With Sheets(NomFeuilTemp)
.[A2:A10] = "=Plage"
est elle à modifier ?
merci de votre aide :)
9 févr. 2016 à 14:56
Oui chaque ligne du classeur mère aurait 5 colonnes remplies.
Il n'y a qu'une seule feuille dans les classeurs sources et mère
Les colonnes dans le classeur mère sont jointives.
La copie de A2 se trouve sur la cellule B2 du classeur mère,
La copie de A4 se trouve sur la cellule B3,
La copie de A6 se trouve sur la cellule B4,
La copie de A8 se trouve sur la cellule B5,
La copie de A10 se trouve sur la cellule B6.
Les classeurs cibles ont ce nom générique : "FO (X)" avec X allant de 1 à 50 minimum (le nombre n'est pas déterminé mais peut se limiter à 50).
S'il manque des informations je peux vous les fournir sans problème.
Modifié par michel_m le 9/02/2016 à 15:38
un oubli de ma part:
on copie uniquement des valeurs ?
copie en feuille1?
Classeur cible xls, xlm, xlsx, xlsm ?
9 févr. 2016 à 16:30
Toutes les données sont en feuille 1
Les tableurs sources sont en .xlsx et le tableur mère en .xlsm ;)