IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Copier données d'un fichier a un autre.


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 16
    Par défaut Copier données d'un fichier a un autre.
    Bonjour, j'ai 2 fichiers Excel disons comme suis
    Fichier 1
    champs = numero en texte / données texte....
    exemple : numero / voie publique / valeur
    123 / rue Maison / 10 000
    456 / rue bateau / 20 000
    Fichier 2
    champs = numéro en texte / données 1 / données 2 / données 3.
    exemple : numero / 1 / 2 / 3
    123 / code 2 / place / 22020
    456 / code 3 / rappel / 22025
    ce que je voudrais c'est de pouvoir ouvrir le fichier 1 et d'y insérer a un champ en particulier les données 1, 2 et 3 correspondant au même champ Numéro en texte!

    Ce qui donnerait
    Fichier 1
    Numero / voie publique / valeur / 1 / 2 / 3
    123 / rue Maison / 10 000 / Code 2 / place / 22020
    456 / rue bateau / 20 000 / code 3 / rappel / 22025

    Si ya pas de joint il ne copie rien...

    Des idées? Il se pourrait que j'ai e des doublons dans mes numero en texte.... probleme?

    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut copier données d'un fichier
    Bonsoir,

    Les numéros 123 et 456 sont-ils le numéro de la rue mentionnée ou est-ce un code attribué ? Dans le premier cas, il faudra prendre le numéro et la rue comme référence.
    Ainsi les doublons seront impossibles sauf si le fichier concerne plusieurs villes pouvant avoir des noms de rue identiques.

    Cordialement,

  3. #3
    Membre averti
    Inscrit en
    Février 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 16
    Par défaut
    Merci de votre réponse, mais les champs en exemple ne sont la qu'a titre informatif, le champ 'Numero en texte' est un matricule mais stocké dans une cellule texte. Et il se pourrait que j'ai des doublons de ce coté. Mais comme ce ne sera pas la norme, je pourrai les arranger a bras s'il faut. Mais pour les 2000 autres lignes c'est une autre histoire...

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 21
    Par défaut
    Bonsoir
    Si ça peu aider, voici une macro que j'emploi pour une application similaire

    Biensûr, elle sera à modifier pour correspondre à tes besoins
    Fonctionne sur Excel 2003, les autres versions, je ne sais pas, je débute)
    Je cherche à l'ameliorer en ajoutant des inputBox afin de pouvoir la modifier plus facilement pour definir les classeurs, les feuilles et les colonnes mais je rame pour la suite ça avance un peu mais j'ai du mal. (j'ai demandé de l'aide le 19/11/2013 mais n'ai eu aucune réponse : pas très sympa pour un site d'entraide...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
     
     
    Sub Compare_Copie()
     
    'K : Comparer avec la feuille des machines et ajouter le N° d’étagère
     
    '-compare la cellule "A2" de la colonne "A" feuille "Essai" classeur "Inventaire-Essai.xls" avec toutes les cellules de la 
     
    colonne "B" de la feuille "Recapitulatif" du classeur "1Emplacement"
     
    'Si une valeur identique est trouvée: Remplacer le contenu de la cellule "3" (C) de la feuille Essai du classeur "Inventaire-
    Essai.xls"
     
    'par le contenu de la cellule de la colonne "J" de la feuille "Recapitulatif" du classeur "1Emplacement" dont la valeur est 
     
    la même.
     
    'Sinon reprendre la comparaison a la cellule "A3" et ce jusqu'à la fin de la colonne "A"
     
     'Travail sur 2 feuilles dans 2 classeurs différents)
     
    'Définition =======================
     
    Dim Cel As Range, Cel_A As Range
     
    Dim F_A As Worksheet, F_B As Worksheet
     
    'Chemins ==============================
     
    'Set F_A = Workbooks("Inventaire-Essai.xls").Sheets("essai")
     
    'Set F_B = Workbooks("1Emplacement.xls").Sheets("Recapitulatif") 
     
     'ou
     
    Set F_A = Workbooks("Inventaire-Essai.xls").Sheets(3) 
     
    Set F_B = Workbooks("1Emplacement.xls").Sheets(2) 
     
    'Traitement =======================
     
    For Each Cel In F_A.Range(F_A.[A1], F_A.Range("A" & Rows.Count).End(xlUp)) 'Pour chaque cellule de A
     
    'Cel = cellules de références de feuille 3
     
     
     
     If Not (IsEmpty(Cel)) Then 'si Cel n'est pas vide
     
     Set Cel_A = F_B.Columns(2).Find(Cel) 'Columns(2)= colonne B
     
     'fixer Cel_a en tant cellule trouvée identique à Cel 'CelA = cellules de références de feuille 4
     
     
     
     If Not (Cel_A Is Nothing) Then 'si Cel_A existe
     
     
     
    'Copie =======================
     
    '(Différentes options à activer ou désactiver, voir modifier selon les besoins)
    ' Une seule est normalement nessessaire)
     
     'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 1)).Copy F_B.Cells(Cel_A.Row, "B")
     
     'Copie les cellules B et C de la feuille 3 en C et D de la feuille 4
     
     'copier B et C de Cel sur C et D de Cel_A
     
     
     
     'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 2)).Copy F_B.Cells(Cel_A.Row, "B")
     
     'copier B et C de Cel sur C et D de Cel_A
     
     
     
    'F_A.Range(Cel.Offset(0, 1), Cel.Offset(0, 1)).Copy F_B.Cells(Cel_A.Row, "c")
     
    'Copie les cellules B de la feuille 3 en D de la feuille 4
     
    'F_B.Range(Cel_A.Offset(0, 1), Cel_A.Offset(0, 1)).Copy F_A.Cells(Cel.Row, "c")
     
    'Copie les cellules B de la feuille 4 en C de la feuille 3
     
    'F_B.Range(Cel_A.Offset(0, 1), Cel_A.Offset(0, 1)).Copy F_A.Cells(Cel.Row, "e")
     
    'Copie les cellules C de la feuille 4 en E de la feuille 3
     
    F_B.Range(Cel_A.Offset(0, 4), Cel_A.Offset(0, 4)).Copy F_A.Cells(Cel.Row, "C")
     
    'Copie les cellules F de la feuille 4 en C de la feuille 3
     
    '(J=9 : Colonne de référence + différence pour colonne à copier)
     
    'F_B.Range(Cel_A.Offset(0, 9), Cel_A.Offset(0, 6)).Copy F_A.Cells(Cel.Row, "C")
     
    'Copie les cellules H, I, J, K de la feuille 4 en C, D, E, F de la feuille 3
     
     End If
     
     End If
     
    Next Cel 'Cel suivante
     
    End Sub

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonsoir !
    Citation Envoyé par Toine-45 Voir le message
    j'ai demandé de l'aide le 27/11/2013 mais n'ai eu aucune réponse : pas très sympa pour un site d'entraide...
    Pour rappel, ce n'est pas un site d'entraide brute : il y a des règles à respecter,
    certainement la raison pour laquelle point de réponse n'a été formulée …

    Qui plus est aucune obligation de réponse ni de résultat, site de bénévoles oblige !

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Les fichiers sont-ils triés en entrée? Si oui, c'est une simple rupture. Sinon, il faut mettre toutes les données en mémoire avant de mouliner.

    Dans tous les cas, il te faut lire les fichiers, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Ligne1 as String
    Open "Entree1.txt" For Input As #1    ' Ouvre le fichier.
    Do While Not EOF(1)    ' Effectue la boucle jusqu'à la fin du fichier.
        Line Input #1, Ligne1 ' Lit la ligne dans la variable.
    Loop
    Close #1    ' Ferme le fichier.
    Pareil pour le fichier 2

    Ensuite, il faut les découper. Il semblerait que ton séparateur soit un "/"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Entree1() as string, Entree2 as string
    Entree1 = split(Ligne1)
    Entree2 = split(Ligne2)
    Il faut tester si les clefs sont communes. Comme split donne un tableau de base zéro(par exemple, si il découpe en 3 , il renverra les occurences 0, 1 et 2), ta clef sera en position 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Ligne3 as string
    If Entree1(0) = Entree2(0) Then
        Ligne3 = Entree1(0) & "/" Entree1(1) & "/" Entree1(2) 
        Ligne3 = Ligne3 & Entree2(1) & "/" Entree2(2) & "/" Entree2(3) 
    End If
    Et enfin, il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Open "Sortie3" For Output As #3    ' Ouvre le fichier en écriture.
    Print #3, Ligne3    ' Écrit le texte dans le fichier.
    Close #3    ' Ferme le fichier.
    Après, il te reste à assembler tout ça. Tu peux faire un tableau(ou une collection) de Ligne1, un autre de Ligne2, tu fais deux boucles imbriquées sur les deux tableaux, et tu compares systématiquement les clefs. A chaque fois que tu as une correspondance, tu écris(attention à n'ouvrir et fermer le fichier de sortie qu'une seule fois).

Discussions similaires

  1. [XL-2010] Copier des données d'un fichier dans un autre
    Par dozif77 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/03/2015, 18h42
  2. [XL-2003] Copier des données d'un fichier Excel à un autre
    Par Banshor dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/05/2014, 08h15
  3. Copier des données d'un fichier vers un autre sans écraser le second
    Par jalons dans le forum Shell et commandes GNU
    Réponses: 10
    Dernier message: 09/04/2013, 20h07
  4. Réponses: 12
    Dernier message: 09/06/2008, 17h54
  5. copier une partie d´un fichier dans un autre
    Par makohsarah dans le forum Langage
    Réponses: 8
    Dernier message: 23/08/2006, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo