Connexion entre 2 fichiers (export/import de données)

Bonjour, je travail présentement sur un petit projet excel.

Je dois lier 2 fichier excel.

Voici les details de mon probleme :

J'ai une fichier excel "Nomenclature" et un autre "FichePièce"

Ce que je souhaite c'est à partir du fichier "FichePièce", cliquer sur un bouton (déjà crée) qui me permette de sélectionner le fichier "Nomenclature", puis exporter des données d'un fichier à l'autre et vice versa.

Les points communs de mes deux fichiers sont la référence "REP"

En cliquant sur le bouton, la macro lis la REP (ici 1) et la garde en mémoire

L'explorateur de dossier se lance et on ouvre la nomenclature correspondante

Une fois la nomenclature : Recherche de la colonne "REP" ; Puis recherche du numéro REP (ici 1)

De la : lecture de la ligne, récupération des valeurs Couleur et Densité

Collage de ces données dans le fichier Excel dans les cellules correspondantes

La masse se calcul automatiquement par la formule intégrée

Puis exportation de la masse dans la nomenclature

Je ne sais pas si je me suis bien fait comprendre (difficile de tout suivre), mais je joins les 2 fichiers Excel en espérant que cela soit plus clair.

Merci à tous ceux qui prendront le temps de regarder mon problème

27fichepiecep.xlsm (23.86 Ko)
28nomenclature.xlsx (12.57 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

40fichepiecep-v1.xlsm (28.18 Ko)

Salut GMB,

J'ai repris ton Excel, j'ai juste enlevé l'instruction qui ferme le Excel "Nomenclature"

Mise à part cela, ça fonctionne parfaitement

Je vais bien regarder tout ton code pour le comprendre (ça sera plus bénéfique ), je reviens vers toi si je n'ai pas compris quelque chose.

En tout cas merci beaucoup,

Bye

Salut gmb,

Ci-joint le fichier excel avec ton code ou j'y ai rajouté des commentaires

Peux-tu me confirmer si j'ai bien saisi ta méthodologie...

Cette ligne de code permet d'aller dans ma nomenclature chercher la REF correspondante ?

Set cell = MySheet.Range("B4:B" & MySheet.Range("B" & Rows.Count).End(xlUp).Row).Find(ref, lookat:=xlWhole)

A quel moment tu copie la densité de la nomenclature vers la Fiche pièce ???

Ici tu colle la couleur, mais pas la densité(cellule C7) pourtant elle se met bien à jour

fDep.Range("C6").PasteSpecial xlPasteAll, Transpose:=True

Merci par avance

21fichepiecep-v2.xlsm (25.88 Ko)

Bonjour

fehmous a écrit :

Cette ligne de code permet d'aller dans ma nomenclature chercher la REF correspondante ?Code: Tout sélectionnerSet cell = MySheet.Range("B4:B" & MySheet.Range("B" & Rows.Count).End(xlUp).Row).Find(ref, lookat:=xlWhole)

Pas tout à fait.

Elle défint la variable ‘’Cell’’ comme étant, dans la feuille ‘’MySheet ’’, la cellule, si elle existe, où on trouve la valeur de la variable ‘’Ref’’ dans la colonne B.

A quel moment tu copie la densité de la nomenclature vers la Fiche pièce ???

Ici tu colle la couleur, mais pas la densité(cellule C7) pourtant elle se met bien à jour

fDep.Range("C6").PasteSpecial xlPasteAll, Transpose:=True

Cette instruction permet de copier les cellules D et E de la ligne ln :

MySheet.Range("D" & ln & ":E" & ln).Copy

Et l’instruction suivante que tu indiques, permet de coller ces deux cellules, avec leur contenu et leur format (PasteAll = CollerTout) à partir de la cellule C6 en les transposant, c’est-à-dire en C6 et C7.

OK ?

Bye !

OK, merci pour tes explications

Une dernière question : si je souhaite collé sans garder le format initiale (source)

    MySheet.Range("D" & ln).Copy
   'On colle les données copiées dans la feuille "FichePièce
    fDep.Range("F12").PasteSpecial xlPasteAll, Transpose:=False

J'ai essayé un Paste au lieu d'un PasteSpecial, ça ne fonctionne pas..

Je reviens pour dire que j'ai trouver comment ne collé que les valeurs (et pas la mise en forme)

Il faut faire un xlPasteValues au lieu de xlPasteAll

fDep.Range("F12").PasteSpecial xlPasteAll, Transpose:=False[

Au lieu de

fDep.Range("F12").PasteSpecial xlPasteAll, Transpose:=False

Merci encore pour ton aide

Bye

fehmous a écrit :

Je reviens pour dire que j'ai trouver comment ne collé que les valeurs (et pas la mise en forme)Il faut faire un xlPasteValues au lieu de xlPasteAll

Bravo !

Bye !

Salut gmb,

En optimisant mon code, étant donné que la nomenclature peut être modifié (ajout de paramètres...)

Je me suis rendu compte que si quelqu'un insérait une colonne, toute mes données seront collées avec un décalage

d'où ma question : est ce possible de remplacer la colonne D par le fait d'aller sur la ligne et chercher le paramètre précisément (couleur, densité...

   MySheet.Range("D" & ln).Copy
   'On colle les données copiées dans la feuille "FichePièce
   fDep.Range("F12").PasteSpecial xlPasteAll, Transpose:=False

avec

  
'Allez sur ligne 3, lire la ligne jusqu'à le bon paramètre puis copié la valeur
'avec l'enregistreur , j'ai :

Cells.Find(What:="Densité", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate

MySheet.Range("D" & ln).Copy
   'On colle les données copiées dans la feuille "FichePièce
   fDep.Range("F12").PasteSpecial xlPasteAll, Transpose:=False

Si tu as une idée, je suis preneurs

Merci

Salut,

J'ai trouvé la fonction qui me permet de chercher un nom dans une ligne et de garder en mémoire le numéro de la colonne.

Le code ci-dessous si ça peut servir

Set x = MySheet.Range("3:3" & MySheet.Range("A" & Rows.Count).End(xlUp).Row).Find(ref, LookAt:=xlWhole)
 If Not x Is Nothing Then
 Cn = x.Row
 'MsgBox Cn 
  End If

'On copie les données " REF
'C'est ici que ça coince ; j'ai une erreur d’exécution 1004': Erreur définie par l'application ou par l'objet
  MySheet.Range(Cn & ln).Copy

'On colle les données
    fDep.Range("E12").PasteSpecial xlPasteValues, Transpose:=False

Quelqu'un sait pourquoi ça bloque et que signifie l'erreur ?

Merci par avance

A+

Bonjour

L'erreur que te signale VBA signifie que la plage ''Range(Cn & ln)'' n'a pas été trouvée.

Ce qui n'est pas surprenant : cn est un numéro de ligne et ln aussi...

Bye !

Ah d'accord j'ai du rater quelque chose ,

Parce que je souhaitais que Cn soit un numéro de colonne pour avoir par la suite :

Range(numero de colonne Cn & numéro de ligne Ln)

J'ai donc une erreur ici ?

'Données Nomenclature vers Fiche Pièce
'On copie les données "REF"
Set x = MySheet.Range("3:3" & MySheet.Range("A" & Rows.Count).End(xlUp).Row).Find(ref, LookAt:=xlWhole)

Merci pour ta prise en compte de mon problème

J'ai remplacé le rows par column

'Données Nomenclature vers Fiche Pièce
        'On copie les données "Nom Projet
        Set x = MySheet.Range("3:3" & MySheet.Range(Column.Count & 3).End(xlUp).Column).Find(ref, LookAt:=xlWhole)
        'Set x = Range("3:3").Find("aaa", , xlValues, xlWhole, , , False)
        If Not x Is Nothing Then
        Cn = x.Column

Mais je dois avoir un problème de syntaxe car cela ne fonctionne pas

Oh oui !

En fait, ‘’Range’’ permet de définir une plage de cellules selon la forme suivante :

Range(a,b)

Définit la plage qui va de la cellule a à la cellule b

Si la cellule a se définit elle-même par la cellule de la ligne i et de la colonne j et b par la cellule de la colonne k et de la colonne t, on peut écrire :

Range(a,b) est équivalent à Range(Cells(i,j),Cells(k,t))

Pour définir une plage de lignes qui sont collées, par exemple de la ligne 3 à la ligne 4 on doit écrire :

Range("3:4")

Ou encore :

Rows("3:4")

Et s’il s’agit d’une seule ligne, on répète le numéro de la première

Mais quand tu définis ta plage ‘’x’’, tu ajoutes des choses que VBA ne peut pas comprendre.

OK ?

Bye !

En effet, j'avais mal compris la fonction

Parce que le code que tu ma fournis au départ fonctionne bien si les colonnes sont figés (exemple la colonne couleur est en D)

Mais le problème c'est qu'elle peut aussi bien se trouver dans la colonne C ou E ou autre...

D'où ma volonté de trouver une méthode pour récupérer la valeur de la cellule à copier (cellule déterminée par son numéro de colonne et son numéro de ligne).

Et la je sèche complètement...

fehmous a écrit :

Et la je sèche complètement...

Joins ton dernier fichier et on regardera ça !

Bye !

Ci-joint les 2 fichiers

Merci de prendre le temps pour regarder mon problème

Bye

19fichepiecep-v3.xlsm (26.21 Ko)
19nomenclaturev2.xlsx (12.51 Ko)

En retour.

Cela te convient-il ?

22nomenclaturev2.xlsx (16.80 Ko)
19fichepiecep-v4.xlsm (29.31 Ko)

Merci GMB ça fonctionne presque parfaitement :

Quand je décale mes colonnes pas de problème

Mais maintenant, si je rentre la REF = 2 dans ma fiche pièce et que je lance la macro

J'ai une erreur sur la ligne

MsgBox "La REF " & ref & " n'existe pas dans le fichier " & myFile.Name 'Objet requis

Bye !

OK

Nouvelle version corrigée.

Marche-t-elle mieux ?

Bye !

14fichepiecep-v5.xlsm (30.22 Ko)
Rechercher des sujets similaires à "connexion entre fichiers export import donnees"