Fusionner un fichier Excel avec une colonne d'un deuxième fichier sous condition

  • Auteur de la discussion ben_123
  • Date de début

ben_123

Nouveau membre
Bonjour,

Voilà c'est mon premier sujet sur le forum et j'ai besoin de votre aide pour créer une macro spéciale.

Je vous explique, j'ai un premier fichier qui se compose de 11 colonnes allant de "A à K", la première colonne contient des numéros de train et la colonnes "J " contient un texte qui correspond aux tâches attribuées.
Le deuxième fichier contient aussi des colonnes de A à J, avec en première colonne le numéro de train
Ce que je veux faire c'est créer une macro qui cherche le numéro de train dans le premier fichier, elle récupère la colonne "J " correspondante et la copie dans la colonne "K" du deuxième fichier.

La donnée numéro de train sera la liaison entre les deux fichiers

le résultat sera enregistré dans un troisième fichier qui sera en résumé le fichier 2 + la colonne "J" du premier fichier.

Merci pour votre aide
 

drul

Obscur pro du hardware
Staff
Ok, c'est clair, très bonne explication (c'est un très bon début ;)).
Déjà une idée de comment faire, un petite notion de VBA ?

N.B. on pourrait faire ça aussi avec des bêtes formules excel (mais bon les liens externes c'est toujours un peu casse gueule ...)
 

ben_123

Nouveau membre
Je vous remercie premièrement de votre réponse, pour le VBA j'ai eu qlq notions il y a longtemps mais je me suis orientée après à l'informatique industrielle (mais bon c'est l'occasion pour que je m'y remets :) )
alors je pense à créer deux liens où on charge le premier et le deuxième fichier et après on clique sur un bouton qui récupère ces deux fichiers et fait l'opération et propose à la fin une fenêtre pour indiquer où enregistrer le troisième fichier.
je sais qu'on peut faire ça avec un "recherchev" par exemple mais le problème c'est que ça sera une manip quotidienne à faire et les fichiers ils auront pas forcément le même nom. Je sais que ce n'est pas facile pour la créer au début mais après ça sera plus facile
 

ben_123

Nouveau membre
d'un point de vue algorithmique, j'imagine une solution comme ça :

1 --> Récupérer le premier fichier à partir d'un chemin sur l'ordinateur
2 --> Récupérer le deuxième fichier à partir d'un chemin sur l'ordinateur
3 --> Créer deux boucles imbriquées allant de la deuxième ligne à la dernière ligne (Variable)
première boucle (variable i par exemple) va balayer la colonne A du deuxième fichier
deuxième boucle (variable j par exemple) va balayer la colonne A du premier fichier (qui contient la donnée à récupérer)
et si Ai = Aj, on va récupérer le contenu de la cellule Jj et la copier dans la cellule Ki

NB : S'il ne trouve pas de correspondance il ne copie rien et passe à une autre ligne

4 --> Après la fin de la boucle une fenêtre s'ouvre pour indiquer le chemin où enregistrer le nouveau fichier résultat
 

drul

Obscur pro du hardware
Staff
Pas mal. Pour le point 1 et 2 tu définit comment le path ? un fenêtre comme pour la sauvegarde, ou c'est fixe ?
 

ben_123

Nouveau membre
oui c'est comme la sauvegarde ça sera un path pour aller chercher les deux fichiers car chaque jour on a un le premier fichier qu'on récupère d'un outil et à chaque fois il a un nom différent, et pareil pour le deuxième fichier
 

drul

Obscur pro du hardware
Staff
Donc une fenêtre qui demande le fichier ?

Tu me ponds une "base" ? (même si c'est très vide, j'aime bien qu'on parte de ta création)
 

ben_123

Nouveau membre
Est-ce que tu peux m'envoyer un cours de VBA, j'ai besoin d'une liste d'instructions ?
Merci
 

drul

Obscur pro du hardware
Staff
Un cours non, mais pour apprendre le mieux c'est l'enregistreur de macro et le site msdn

On trouve la description de tout les objets et méthodes
 

ben_123

Nouveau membre
Bonjour, je reviens vers toi pour avoir une petite lancée pour pouvoir commencer, j'ai besoin de savoir comment faire pour insérer mes deux fichiers pour pouvoir les fusionner derrière. j'imagine à créer deux liens pour charger les deux fichiers. Est-il possible ?
Merci
 

drul

Obscur pro du hardware
Staff
Le nom et le chemin des deux fichiers est connu et fixe ?
 

ben_123

Nouveau membre
Non il est pas fixe chaque jour, on doit fusionner deux fichiers différents
 

drul

Obscur pro du hardware
Staff
Alors le mieux c'est de faire un truc du genre:
Code:
Sub toto()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim TempFileName As Variant

TempFileName = Application.GetOpenFilename("Excel (*.xlsx), *.xlsx")
If TempFileName = False Then
    MsgBox "premier fichier non valide"
    End
Else
    Set wb1 = Workbooks.Open(TempFileName)
End If
TempFileName = Application.GetOpenFilename("Excel (*.xlsx), *.xlsx")
If TempFileName = False Then
    wb1.Close
    MsgBox "deuxième fichier non valide"
    End
Else
    Set wb2 = Workbooks.Open(TempFileName)
End If
    '... et ensuite tu utilises wb1 et wb2 dans ton code ...
    

End Sub
 

ben_123

Nouveau membre
J'ai fais à peut près la même chose mais il m'affiche une erreur d'execution 424 : objet requis

voici le code :

Private Sub CommandButton1_Click()

Dim QuelFichier
Dim NomMacro, Classeur As String
Dim Retour As Integer

NomMacro = "Trans_NDG"

MsgBox "indiquer d'abord le fichier Note De Gare (NoteDeGare_Nantes_...)", vbInformation, "Note de Gare"
QuelFichier = Application.GetOpenFilename("Note de Gare Excel, *.xls")
If QuelFichier <> False Then
' sauvegarde du lien vers le fichier Base Gare
[FIC_NDG].Value = QuelFichier
Else
GoTo err_fic
End If

MsgBox "indiquer maintenant le tableau de PAQT", vbInformation, "Tableau Export PAQT"
fichier_PAQT = Application.GetOpenFilename("Fichier PAQT, *.xls")
If fichier_PAQT <> False Then
' sauvegarde du lien vers le fichier PAQT
[FIC_PAQT].Value = fichier_PAQT < -------------------------------------------------------------------- le problème est dans cette ligne
Else
GoTo err_fic
End If


' Lancer la macro de conversion adéquate sur le fichier sélectionné
Application.Run NomMacro

Exit Sub




merci
 

drul

Obscur pro du hardware
Staff
Salut, tu as bien une cellule nommée: [FIC_PAQT] dans ton fichier ?

N.B. attention tu ne déclare jamais la variable "fichier_PAQT" ça marche mais c'est pas conseiller.
Utilises "option explicit" afin d'éviter toutes erreurs de saisie ...
 

drul

Obscur pro du hardware
Staff
En fait je ne connais pas cette notation: [FIC_PAQT].Value ...
Tu peux aussi mettre Trans_NDG

Edit: tu es sûr que l'erreur n'est pas ici ?
Application.Run NomMacro

P.S. j'ai trouver l'explication sur [] comme abrégé pour une range.
 

ben_123

Nouveau membre
J'ai une erreur de compilation : Sub ou Fonction non définie
après que je clique sur OK, il me met le Sub en jaune et il me sélectionne la fonction search dans cette ligne

If InStr(num_train, "*_*" <> 0) Then nom_tr = Left(num_train, Search("_", num_train, 1) - 1)

L'intérêt de cette ligne c'est de mettre en forme la première colonne du fichier 2 que j'active avant et je veux supprimer tous ce qu'il y a après un " _ "
 

ben_123

Nouveau membre
J'ai réussi à débeuger le programme, il marche et donne après le chemin pour enregistrer le nouveau fichier sauf que rien ne change par rapport au premier fichier et les données ne sont pas importées :??:


C'est le code de la partie transfert de donnée

' fin de la mise en forme du fichier PAQT

If Not IsEmpty(num_train) Then

ligne_paqt = Application.WorksheetFunction.Match(CStr(num_train), Workbooks(classeur_inote).ActiveSheet.Columns("A"), 0)
If Err.Number = 0 Then
commentaire_paqt = Workbooks(classeur_inote).ActiveSheet.Cells(ligne_paqt, 11)

End If

Workbooks(classeur_ndg).Activate

Workbooks(classeur_ndg).ActiveSheet.Cells(l, 11) = commentaire_paqt
End If
 

ben_123

Nouveau membre
J'ai besoin de mettre Récupéré les données qui existe dan le fichier 2 dans la colonne "K" et les mettre dans la colonne "K" également du premier fichier la liaison est le numéro du train qui existe en première colonne par contre on peut avoir des cases vides dans cette colonne donc il faut les sauter
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 126
Messages
6 717 813
Membres
1 586 365
Dernier membre
matiOs1
Partager cette page
Haut