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 :

[VBA-E]recopier des cellules dans un fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut [VBA-E]recopier des cellules dans un fichier
    Bonjour à tous,

    Je vous expose ma problématique.
    J'ai un fichier A dans lequel il existe une colonne code avec plus de 400 lignes de codification:

    code

    12344
    12345
    23111
    23112
    23114
    35677
    35777
    etc...

    a ces codes sont associés sur d'autres colonnes des valeurs

    code /DEFM / DES / OEE / ColonneLibre1 / ColonneLibre2

    12344 / 12 / 3 / 23
    12345 / 0 / 2 / 23
    23111 / 6 / 1 / 22
    23112 / 5 / 3 / 43
    23114 / 4 / 12 / 4
    35677 / 1 / 34 / 5
    35777 / 34 / 42 / 3

    etc....

    J'ai un fichier B qui contient lui les données suivantes toujours les codes


    code / ColonneLibre1

    12344 / 3
    12345 / 2
    23111 / 1
    23114 / 3
    35677 / 2
    35777 / 1
    etc...


    J'ai un fichier C qui contient lui les données suivantes toujours les codes


    code / ColonneLibre2

    12344 / 5
    12345 / 4
    23111 / 3
    23112 / 6
    35677 / 4
    35777 / 3
    etc...

    Pourriez-vous m'aider à créer un code VBA qui me permette de recopier les valeurs de ColonneLibre1 du fichier B dans colonneLibre du fichier A selon les valeurs de "code", valeurs de ColonneLibre2 du fichier C dans colonneLibre du fichier A selon les valeurs de "code",

    Mais il arrive que des codes du fichier A ne soit pas existant dans le fichier B et C, dans ce cas par exemple le fichier B ne contient pas la ligne associer au code 23112 et le fichier C la 23114

    Autre contrainte les lignes de codes du fichier B ou C ne se situe pas à tous les coup au même endroit (même ligne même colonne) donc difficile d'affecter définitivement une zone de copie. La copie doit se faire donc uniquement selon la valeur des lignes codes du fichier A.

    Exemple du tableau après exécution du code


    code / DEFM / DES / OEE / ColonneLibre1 / ColonneLibre2

    12344 / 12 / 3 / 23 / 3 / 5
    12345 / 0 / 2 / 23 / 2 / 4
    23111 / 6 / 1 / 22 / 1 / 3
    23112 / 5 / 3 / 43 / .. 6
    23114 / 4 / 12 / 4 / 3/..
    35677 / 1 / 34 / 5 / 2 / 4
    35777 / 34 / 42 / 3 / 1 / 3


    Je ne maitrise pas bien le VBA pour cette manip.

    Merci pour le coup de main.

    Excuser pour la représentation des colonnes!!!

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    tu peu faire cela par formule en mettant dans la colonne E (ColonneLibre1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =RECHERCHEV(A2;[FichierB.xls]Feuil1!$A$1:$B$7;2;0)
    et F (ColonneLibre2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(A2;[FichierC.xls]Feuil1!$A$1:$B$7;2;0)
    puis recopier vers le bas...


  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Oui mais je suis obligé de spécifié dans ce cas les coordonnées des cellules. Moi je voudrais que le code copie la colonne des valeurs colonneLibre1 ou colonneLibre2 selon les valeurs de la colonnes "code" du fichier B ou C et ce de manière automatique.

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    bon alors si c'est du VBA . un peu de code à tester :
    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
     
    Sub Importe()
     Dim wkB As Workbook
     Dim wkC As Workbook
     Dim fA As Worksheet 'Feuille A...
     Dim r As Range
     Dim i As Integer
     Set fA = ThisWorkbook.Sheets("Feuil1")
     
     Set wkB = Workbooks.Open(ThisWorkbook.Path & "\FichierB.xls") 'Ouverture classeur b
     Set wkC = Workbooks.Open(ThisWorkbook.Path & "\FichierC.xls") 'Ouverture classeur c
     'Parcours les lignes du fichier A
     For i = 2 To fA.Range("A1").CurrentRegion.Rows.Count
     
     'Traitement fichier B
     Set r = wkB.Sheets("feuil1").Range("A1").EntireColumn.Find(what:=fA.Cells(i, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
         If Not r Is Nothing Then
         fA.Cells(i, 5) = r.Offset(0, 1).Value
        End If
      'Traitement fichier C
     Set r = wkC.Sheets("feuil1").Range("A1").EntireColumn.Find(what:=fA.Cells(i, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
         If Not r Is Nothing Then
         fA.Cells(i, 6) = r.Offset(0, 1).Value
        End If
     
    Next
     
    End Sub

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci bbil cela fonctionne!!!
    Pourrais-tu m'expliciter plus précisément le code, pour que je puisse l'adapter au mieux?

    Merci

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Lex O'Mil
    Merci bbil cela fonctionne!!!
    Pourrais-tu m'expliciter plus précisément le code, pour que je puisse l'adapter au mieux?

    Merci
    ben je vais avoir du mal .. dis moi e que tu n'as pa compris dans mes commentaires...

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    La ligne set r

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Lex O'Mil
    La ligne set r
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Set r = wkB.Sheets("feuil1").Range("A1").EntireColumn.Find(what:=fA.Cells(i, 1).Value, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)

    wkB.Sheets("feuil1").Range("A1").EntireColumn
    c'est la plage ( le range..) de recherche : feuil1,la colonne de la cellule A1..

    .find
    fonction de recherche voir pour les diverses options...elle renvoi la cellule trouvée.. où "Nothing" (rien) si aucune recherche ne correspond...

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci pour tout

    Lex

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Remplir des cellules dans un fichier par rapport à un autre en VBA
    Par gregou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/01/2015, 10h40
  2. [XL-2003] recopier des lignes dans différents fichiers
    Par fortbelin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2011, 14h02
  3. Réponses: 0
    Dernier message: 17/03/2011, 21h42
  4. Réponses: 11
    Dernier message: 08/01/2011, 22h52
  5. [VBA-E] Lire des valeurs dans un fichier excel
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/05/2006, 15h40

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