Transfert de données d'un classeur à l'autre

Résolu/Fermé
bm44000 - 14 mars 2012 à 10:01
 bm44000 - 6 avril 2012 à 08:41
Bonjour,

Avis aux experts de VBA !
J'ai deux fichiers: Fichier A et Fichier B.
J'ai 10 contenus de cellule du fichier A que je veux envoyer (copier/coller) dans le fichier B.
Par exemple en cellule B3 du fichier A j'ai le nom d'un client que je veux copier coller dans le fichier B dans la colonne intitulée "Nom du client" dans une cellule vide (à la suite d'une série de cellules remplies). Je veux faire cela pour 10 autres cellules.

Pouvez vous m'indiquer la démarche à suivre, les fonctions à utiliser ? Et si possible le code associé !!

Merci d'avance,

Cordialement,
bm44000

10 réponses

J'ai deux fichiers: Fichier A et Fichier B.
- Nom du fichier A [exemple : Classeur1.xls] : DRAFT Enregistrement projet.xls
- Chemin d'accès complet au fichier A [exemple : "C:\Travail\toto\Excel\"] :D:\Documents and Settings\bmatte\Bureau\Enregistrement de projets

J'ai 10 contenus de cellule du fichier A que je veux envoyer (copier/coller) dans le fichier B.
- fichier A : adresses complètes (nom de la feuille + adresse cellule) des 10 cellules à copier, [par exemple : feuil1!A2] : ce sont des cellules fusionnées
Contenu 1 : 'Demande d''enregistrement'!S23:W23
Contenu 2 : 'Demande d''enregistrement'!G23:O23
Contenu 3 : 'Demande d''enregistrement'!AD19:AJ19
Contenu 4 : 'Demande d''enregistrement'!G21:N21
Contenu 5 : 'Demande d''enregistrement'!K29:O29
Contenu 6 : 'Demande d''enregistrement'!AD40:AJ40
Contenu 7 : 'Demande d''enregistrement'!B73:AJ77
Contenu 8 : 'Demande d''enregistrement'!F15:P15

- fichier B : adresses complètes (nom de la feuille + adresse cellule) des 10 cellules ou coller.
Chemin d'accès au fichier B : M:\SPEC- \ENCOURS\TOOLS\Enregistrement commandes
Pour le contenu 1 : Feuille 'En cours'! / Colonne intitulée « A » en cellule B1
Pour le contenu 2 : Feuille 'En cours'! / Colonne intitulée « B » en cellule C1
Pour le contenu 3 : Feuille 'En cours'! / Colonne intitulée « C » en cellule E1
Pour le contenu 4 : Feuille 'En cours'! / Colonne intitulée « D » en cellule F1
Pour le contenu 5 : Feuille 'En cours'! / Colonne intitulée « E » en cellule G1
Pour le contenu 6 : Feuille 'En cours'! / Colonne intitulée « F » en cellule H1
Pour le contenu 7 : Feuille 'En cours'! / Colonne intitulée « G » en cellule J1
Pour le contenu 8 : Feuille 'En cours'! / Colonne intitulée « H » en cellule O1

Pour les adresses de cellules, il y a deja des valeurs dans les cellules, il faut donc que le contenu 1 se mette dans une case vide et que les autres contenus se mettent sur la même ligne.

Est -il possible d'ajouter un bouton sur le fichier A, afin que au clic, cela transfère les données vers le fichier B

Merci bcp d'avance pour ton aide.
3
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
Modifié par pijaku le 16/03/2012 à 16:22
Avec la feuille "Demande d''enregistrement", le chemin d'accès du fichier de destintaion des données en A1 (.Range("A1")) et le nom du fichier en A2 (.Range("A2")) :
With Sheets("Demande d''enregistrement") 
    Fichier = .Range("A1") & .Range("A2")


toujours dans la même feuille on "copie" dans une variable tableau les données contenues dans les plages que tu m'as donné... :
    Tabl(0) = .Range("S23").Value 
    Tabl(1) = .Range("G23").Value 
    Tabl(2) = .Range("AD19").Value 
    Tabl(3) = .Range("G21").Value 
    Tabl(4) = .Range("K29").Value 
    Tabl(5) = .Range("AD40").Value 
    Tabl(6) = .Range("B73").Value 
    Tabl(7) = .Range("F15").Value


On ouvre le classeur de destination des données :
Workbooks.Open Fichier


Dans la feuille "En cours" du classeur de destination on détermine la ligne de la première cellule vide dans la colonne B :
With ActiveWorkbook.Worksheets("En cours") 
    Lig = .Range("B" & Rows.Count).End(xlUp).Row + 1


On colle, dans cette ligne (Lig) les données collectées dans les colonnes 2, 3, 5, 6, 7, 8, 10, 15 soit B, C, E, F, G, H, J et O comme convenu... :
    .Cells(Lig, 2) = Tabl(0) 
    .Cells(Lig, 3) = Tabl(1) 
    .Cells(Lig, 5) = Tabl(2) 
    .Cells(Lig, 6) = Tabl(3) 
    .Cells(Lig, 7) = Tabl(4) 
    .Cells(Lig, 8) = Tabl(5) 
    .Cells(Lig, 10) = Tabl(6) 
    .Cells(Lig, 15) = Tabl(7)


OK Comme ça??

Cordialement,
Franck P
1
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
14 mars 2012 à 10:15
Bonjour,
Peut être un début de piste ici...
0
Merci pour ta réponse mais je suis un peu novice sous VBA.
Est ce que ton exemple pourrait plus se rapprocher de ma demande stp ?
Merci bcp d'avance,
bm44000
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
Modifié par pijaku le 14/03/2012 à 11:02
Est ce que ton exemple pourrait plus se rapprocher de ma demande stp ?
Oui bien sur. mais j'ai besoin de précisions :

J'ai deux fichiers: Fichier A et Fichier B.
- Nom du fichier A [exemple : Classeur1.xls]
- Chemin d'accès complet au fichier A [exemple : "C:\Travail\toto\Excel\"]

J'ai 10 contenus de cellule du fichier A que je veux envoyer (copier/coller) dans le fichier B.
- fichier A : adresses complètes (nom de la feuille + adresse cellule) des 10 cellules à copier, [par exemple : feuil1!A2]
- fichier B : adresses complètes (nom de la feuille + adresse cellule) des 10 cellules ou coller.
Cordialement,
Franck P
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
16 mars 2012 à 14:31
Salut,

Non je ne t'ai point oublié.
N'hésite pas à relancer.....

Exemple classeurA
Exemple ClasseurB

Dans le classeur "source" :
- En A1 : le chemin d'accès complet au fichier destination avec \ à la fin, sans le nom du classeur!
- En A2 : le nom du classeur avec extension (.xls, .xlsx...)
- dessines un bouton sur ta feuille, double clic dessus et copies colles ce code :

Private Sub CommandButton1_Click()
Dim Fichier As String, Tabl(7), Lig As Long

With Sheets("Demande d''enregistrement")
    Fichier = .Range("A1") & .Range("A2")
    Tabl(0) = .Range("S23").Value
    Tabl(1) = .Range("G23").Value
    Tabl(2) = .Range("AD19").Value
    Tabl(3) = .Range("G21").Value
    Tabl(4) = .Range("K29").Value
    Tabl(5) = .Range("AD40").Value
    Tabl(6) = .Range("B73").Value
    Tabl(7) = .Range("F15").Value
End With
Workbooks.Open Fichier
With ActiveWorkbook.Worksheets("En cours")
    Lig = .Range("B" & Rows.Count).End(xlUp).Row + 1
    .Cells(Lig, 2) = Tabl(0)
    .Cells(Lig, 3) = Tabl(1)
    .Cells(Lig, 5) = Tabl(2)
    .Cells(Lig, 6) = Tabl(3)
    .Cells(Lig, 7) = Tabl(4)
    .Cells(Lig, 8) = Tabl(5)
    .Cells(Lig, 10) = Tabl(6)
    .Cells(Lig, 15) = Tabl(7)
End With
With ActiveWorkbook
    .Save
    .Close
End With
End Sub


Ferme visual basic, arrête le mode création (icône en forme d'équerre + règle dans la barre d'outils boite à outils controles) et testes.
0
Merci beaucoup !
Mais ton code ne comporte pas les noms des deux fichier A et B ni les noms des entêtes de colonne pour savoir dans quelle colonne coller la valeur.
Quelles lignes de ton code représente ces données ?
Merci !
Bien cordialement,
0
Merci ca marche bien !
J'aime bien ta facon de coder.
Est ce que tu aurais un bouquin ou une liste de codes à me fournir récapitulant les principales fonctions?
J'aimerais ajouter des conditions if ...
Merci !
bm44000
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 2 703
20 mars 2012 à 08:35
0
Bonjour !
J'ai encore un souci que je n'arrive pas à résoudre.
J'ai toujours deux fichiers excel A et B.

Le fichier A est tjrs ouvert. Je souhaite aller dans le fichier B pour récupérer des données avec la fonction vlookup mais je n'arrive pas à la faire marcher. par cette formule, je souhaite que des cellules de mon fichier A reste constamment à jour en un clic.

Merci bcp pour ton aide.

Bien cordialement,

bm44000
0