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 :

macro copie de données d'un fichier à un autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut macro copie de données d'un fichier à un autre
    Bonjour,
    Débutante en Excel VBA, j'ai deux fichiers: fichier1.xls dans lequel il y 3colonnes A, B et C et un deuxiéme fichier fichier2.xls dans le quel il y plusieurs colonnes il y a les memes colonnes A et B que dans le premier fichier.

    La macro que je dois faire doit me comparer les deux colonnes du premier fichier si elle trouve les memes dans le deuxiéme elle doit m'afficher la colonne C à la fin du fichier 2.

    Aidez-moi SVP je suis bloquée et mon Boss ne veux rien savoir.

    Merci d'avance de votre compréhension.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut recherche sur 2 colonnes
    Bonjour mdakini, Bonjour le Forum,

    Bienvenu au Forum.

    Certes, un processus est envisageable par macro.

    Mais si tu veux une solution rapide, et donc faire plaisir à ton boss, tu peux
    - dans ton premier fichier, crééer une colonne supplémentaire dont les cellules seraient cahacune la concaténation des 2 premières
    - dans ton deuxième fichier, même process
    - toujours dans ce 2ème fichier, une colonne supplémentaire pour rechercher la position de ta concaténation dans le 1er fichier (fonction Equiv)
    - si ta fonction Equiv ne te renvoie pas d'erreur, dans une colonne supplémentaire, recherchercher la valeur de la colonne C correspondant de ton 1er Fichier en utilisant la fonction Index dont l'un des arguments est la fonction Equiv précédente.

    Si je me fais mal comprendre, envoie une extraction de ton fichier.

    Pour le fun, ensuite, on envisagera le processus macro. Le but etant de répondre au plus vite, si j'ai bien compris, à ton besoin.

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Merci beaucoup pour ta réponse et ton aide,
    Je joints deux fichiers de ce que je veux faire je veux comparer les deux colonnes( MLI et GRP) qui se trouve dans les deux fichiers, si elles sont identiques je pren la colonne type qui se trouve dans le deuxiéme fichier et je la copie dans la colonne summary du premier fichier.

    Merci d'avance.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut recherche
    Voici, mdakini.

    Dans le fichier joint, j'ai regroupé tes 2 feuilles (les liaisons ne seraient pas les mêmes sinon)

    J'ai colorié les cellules de calcul, en les indéxant par leur ordre (1ère ligne)

    En espérant avoir répondu à ton besoin (reviens sinon).

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Merci beaucoup Marcel pour ta réponse c'est exactement le résultat que je cherche mais le probléme c'est que mon boss ne veux pas l'afficher comme ca, il veut cliquer sur un bouton dans le fichier 1 puis la colonne summary se remplie automatiquement. donc il faut une macro .

    Merci d'avance.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut masque colonnes
    makidi,

    Dans le fichier joint,

    A l'ouverture, l'évènement suivant est actif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Sheets("Fichier1").Columns("D:D").EntireColumn.Hidden = True
    End Sub
    J'ai affecté un code au bouton "Affiche le résultat".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Btn_Affiche_Click()
    ActiveSheet.Columns("D:D").EntireColumn.Hidden = False
    End Sub

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut formules automatiques
    Salut mdakini,

    Apparemment la solution - provisoire - a été adoptée.

    Pour le fun, voici un développement qui affiche les valeurs sur activation du bouton "Affiche le résultat"

    Macro évènementielle à l'ouverture de ton classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
    With Sheets("Fichier1")
            .Columns("D:D").EntireColumn.Hidden = False
            'information de la dernière ligne informée
            derlign = .Range("A" & Rows.Count).End(xlUp).Row
            'efface les valeurs précédentes
            .Range("D3:D" & derlign).ClearContents
    End With
    End Sub
    A ton bouton, tu affectes le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Btn_Affiche_Click()
    'information de la dernière ligne informée
    derlign = Sheets("Fichier1").Range("A" & Rows.Count).End(xlUp).Row
    'Affectation au champ ainsi défini...
    With Range("D3:D" & derlign)
            '...de la formule
             .FormulaR1C1 = _
                "=IF(ISNA(RC[2]),"""",INDEX(Fichier2!R3C1:R20C4,Fichier1!RC[2],3))"
            'collage spécial afin de n'obtenir que des valeurs
            .Value = .Value
    End With
    End Sub
    Dans lafeuille "Fichier1", les colonnes E et F restent masquées.
    La colonne D reste, elle, affichée.

    Reviens si besoin.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Merci beaucoup Marcel, je suis vraiment desolé pour ma réponse tardive,
    Pour ton code c'est ce qu'il me faut mais je n'arrive pas à l'adapter à mon fichier, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_Open()
    Sheets("Fichier1.xls").Columns("C:AK").EntireColumn.Hidden = True
    End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Btn_Affiche_Click()
    ActiveSheet.Columns("C:AK").EntireColumn.Hidden = False
    End Sub
    Car les deux colonnes ne sont pas dans le meme endroits, et j'appelle le fichier1.xls car les deux feuilles ne sont pas dans le meme fichier.


    Merci d'avance

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Ouh ! la ! la !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Fichier1.xls").Columns("C:AK").EntireColumn.Hidden = True
    Tu sembles confondre feuille et classeur.

    Question : Pourquoi avoir 2 classeurs séparés? Les laisons sont toujours lourdes à gérer.

    Pour ton cas, il te faut réécrire les formules en ayant les 2 fichiers ouverts.

    La formule figurant dans la 2ème partie de mon code peut être adaptée par l'enregistreur.

    Je pars pour la fin de la journée.

    Je te reviens avec un classeur exemple en fin de journée.

  10. #10
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut formulation par VBA
    Bonsoir mnadiki, Bonsoir le Forum,

    En considérant que tes 2 classeurs Fichier1.xls et Fichier2.xls appartiennent au mêmerépertoire, voici une proposition de code qui te renverra une formulation sans - lourdes - liaisons.

    Dans le code de l'objet "ThisWorkbook"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open()
    With Sheets("Fichier1")
            .Columns("D:D").EntireColumn.Hidden = False
            'information de la dernière ligne informée
            derlign = .Range("A" & Rows.Count).End(xlUp).Row
            'efface les valeurs précédentes
            .Range("D3:F" & derlign).ClearContents
    End With
    End Sub
    Dans le code de ton objet Feuil1 "Fichier1", relatif à ton bouton.
    (Je te conseille de créer tes boutons par la barre d'outils "boîte à outils contrôles")

    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
    Private Sub Btn_Affiche_Click()
     
    Application.ScreenUpdating = False
     
    'Ouverture du Classeur et définition du champ de référence
    Workbooks.Open Filename:=ThisWorkbook.Path & Application.PathSeparator & "Fichier2.xls"
    'information de la dernière ligne informée du classeur Fichier2.xls
    derlign2 = ActiveWorkbook.Sheets("Fichier2").Range("A" & Rows.Count).End(xlUp).Row
     
    ThisWorkbook.Activate
     
    With ThisWorkbook.Sheets("Fichier1")
     
            'information de la dernière ligne informée du classeur Fichier1.xls
            derlign = .Range("A" & Rows.Count).End(xlUp).Row
     
            'Affectation aux champs ainsi définis...
     
            '...de la formule de concaténation
            Range("E3:E" & derlign).FormulaR1C1 = "=+RC[-4]&RC[-2]"
     
            '...de la formule intermédiaire de recherche
             With .Range("F3:F" & derlign)
                    .FormulaR1C1 = "=MATCH(RC[-1],Fichier2.xls!R3C4:R" & derlign2 & "C4,0)"
                    .Value = .Value
             End With
     
            '...de la formule globale
            With Range("D3:D" & derlign)
                     .FormulaR1C1 = _
                        "=IF(ISNA(RC[2]),"""",INDEX(Fichier2!R3C1:R" & derlign2 & "C4,Fichier1!RC[2],3))"
                    'astuce pour n'obtenir que des valeurs
                    .Value = .Value
            End With
     
    End With
     
    Workbooks("Fichier2.xls").Close (False)
     
    End Sub
    Le fait de n'obtenir que les valeurs supprime la liaison de Fichier1.xls avec Fichier2.xls.

    Pour le comprendre, relis le code en t'arrêtant sur chaque ligne.

    Même s'il répond à ton souhait, reviens si nécessaire.

    Bon week-end.

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Merci beaucoup Marcel,

  12. #12
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Marcel, Merci beaucoup et désolé pour cette réponse tardive, j'ai essayé ton code il marche mais j'ai un problème.

    Dans la colonne du fichier1 c-à-d celle qui se remplit automatiquement à partir du fichier2, on ne retrouve pas exactement le type associé, j'ai mis dans le fichier1 une colonne concaténation comme on la compare à celle qui se trouve dans le fichier2 si c'est bon on affiche le type, mais on dirrait que cette comparaison ne fasse pas.

    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_Open_click()
    With Sheets("Fichier1")
            .Columns("AL9:AL").EntireColumn.Hidden = False
            'information de la dernière ligne informée
            derlign = .Range("AK" & Rows.Count).End(xlUp).Row
            'efface les valeurs précédentes
            .Range("AL9:AL" & derlign).ClearContents
    End With
    End Sub
    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
    Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
     
    'Ouverture du Classeur et définition du champ de référence
    Workbooks.Open FileName:=ThisWorkbook.Path & Application.PathSeparator & "Fichier2.xls"
    'information de la dernière ligne informée du classeur Fichier2.xls
    derlign2 = ActiveWorkbook.Sheets("Fichier2").Range("F" & Rows.Count).End(xlUp).Row
     
    ThisWorkbook.Activate
     
    With ThisWorkbook.Sheets("Fichier1")
     
            'information de la dernière ligne informée du classeur BOM.xls
            derlign = .Range("AK" & Rows.Count).End(xlUp).Row
     
            'Affectation aux champs ainsi définis...
          '...de la formule de concaténation
           ' Range("AL9:AL" & derlign).FormulaR1C1 = "=RC[-34]&""&""&RC[-24]"
     
            '...de la formule globale
            With Range("AL9:AL" & derlign)
                     .FormulaR1C1 = _
                        "=IF(ISNA(RC[2]),"""",INDEX(Fichier2!R3C1:R" & derlign2 & "C4,Fichier1!RC[2],3))"
                    'astuce pour n'obtenir que des valeurs
                    .Value = .Value
            End With
     
    End With
     
    Workbooks("Fichier2.xls").Close (False)
     
    End Sub
    La colonne qu'elle doit se remplir se trouve dans la colonne AL du fichier 1
    La colonne de concaténation dans AK du fichier 1
    La colonne de concaténation du fichier 2 dans la colonne F

  13. #13
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir mdakini, marcelg, re le forum,
    Je m'excuses auprès de MarcelG, je propose une solution qui ne tient pas compte de colonne concaténée, je me suis simplement fié à la demande originale et pris les deux fichiers comme base 'fichier1" et "fichier2", il faudra donc adapter en fonction du nom des fichiers et du nom des feuilles, voilà ma proposition, code sur bouton en fichier1 :
    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
    Private Sub CommandButton1_Click()
    Dim derLg1 As Long, derLg2 As Long, v1 As Range, v2 As Range, cel1 As Range
    Dim wb1 As Workbook, wb2 As Workbook, wb As Workbook, cel2 As Range
    Set wb1 = ActiveWorkbook
    'on vérifie si le fichier2 est ouvert
    For Each wb In Application.Workbooks
       If wb.Name = "fichier2.xls" Then
          Exit For 'on sort de la boucle s'il est ouvert
       Else
       'sinon on l'ouvre
          Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "Fichier2.xls"
       End If
    Next wb
    wb1.Activate
    Set wb2 = Workbooks("fichier2.xls") 'on attribue un objet workbook au fichier1
    With wb1.Sheets("sheet1")
       derLg1 = .Range("A" & .Rows.Count).End(xlUp).Row
       Set v1 = .Range("A2:A" & derLg1)
    End With
    With wb2.Sheets("sheet1")
       derLg2 = .Range("A" & .Rows.Count).End(xlUp).Row
       Set v2 = .Range("A2:A" & derLg1)
    End With
    For Each cel1 In v1
       For Each cel2 In v2
          If cel1 & cel1.Offset(0, 2) = cel2 & cel2.Offset(0, 1) Then
             cel1.Offset(0, 3) = cel2.Offset(0, 2)
          End If
       Next cel2
    Next cel1
    End Sub
    En espérant que ça soit utile... bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Merci beaucoup pour ta réponse, je l'ai essayé dans mon fichier mais ca ne m'affiche rien voila le code:

    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
    Private Sub CommandButton1_Click()
    Dim derLg1 As Long, derLg2 As Long, v1 As Range, v2 As Range, cel1 As Range
    Dim wb1 As Workbook, wb2 As Workbook, wb As Workbook, cel2 As Range
    Set wb1 = ActiveWorkbook
    'on vérifie si le fichier2 est ouvert
    For Each wb In Application.Workbooks
       If wb.Name = "MLI.xls" Then
          Exit For 'on sort de la boucle s'il est ouvert
       Else
       'sinon on l'ouvre
          Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "MLI.xls"
       End If
    Next wb
    wb1.Activate
    Set wb2 = Workbooks("MLI.xls") 'on attribue un objet workbook au fichier1
    With wb1.Sheets("BOM DE TRAVAIL")
       derLg1 = .Range("D" & .Rows.Count).End(xlUp).Row
       Set v1 = .Range("D9:D" & derLg1)
    End With
    With wb2.Sheets("MLI")
       derLg2 = .Range("D" & .Rows.Count).End(xlUp).Row
       Set v2 = .Range("D2:D" & derLg1)
    End With
    For Each cel1 In v1
       For Each cel2 In v2
          If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1) Then
             cel1.Offset(0, 36) = cel2.Offset(0, 2)
          End If
       Next cel2
    Next cel1
    End Sub

  15. #15
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    peux-tu controler les remarques que j'ai faites sur ton code :
    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
    ...
    wb1.Activate
    Set wb2 = Workbooks("MLI.xls") 'on attribue un objet workbook au fichier1
    With wb1.Sheets("BOM DE TRAVAIL") 'à revoir, ce n'est pas BON au lieu de BOM ,
       derLg1 = .Range("D" & .Rows.Count).End(xlUp).Row 'tu es sur D et non A ?
       Set v1 = .Range("D9:D" & derLg1) 'tu es sur D et non A ?
    End With
    With wb2.Sheets("MLI") 'c'est le nom de la feuille ?
       derLg2 = .Range("D" & .Rows.Count).End(xlUp).Row 'tu es sur D et non A ?
       Set v2 = .Range("D2:D" & derLg1) 'tu es sur D et non A ?
    End With
    For Each cel1 In v1
       For Each cel2 In v2
          If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1) Then 'à vérifier les offset
             cel1.Offset(0, 36) = cel2.Offset(0, 2) 'à vérifier les offset
          End If
       Next cel2
    Next cel1
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  16. #16
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Bonjour,
    j'ai bien vérifier mon code, je ne vois pas d'ou viens le probléme

    je te mets mes deux fichiers en piéces jointes:

  17. #17
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    si je reprends le code que je t'ai envoyé et que tu as adapté, cette ligne me parait bizarre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1) Then
    cel1 dans ton cas représente la colonne D donc cel1.Offset(0, 13) représente la colonne Q
    cel2 représente la colonne D en feuille "MLI" donc cel2.Offset(0, 1) représente dans la même feuille la colonne E
    et tu m'as dit que tu était sur alors je ne comprends plus.

    PS : d'autre part, les fichiers que tu envoies ont gardé un ancien code sur lequel j'ai remarqué que tes variables ne sont pas déclarées, ainsi que tu ne précises pas "Option Explicit" en début de code
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  18. #18
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Bonjour,
    Merci beaucoup, oui je crois aussi que le probléme vien de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1)
    Mais même quand je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cel1 & cel1.Offset(0, 3) = cel2 & cel2.Offset(0, 3)
    qui correspondent à la colonne D dans les deux feuilles ca ne marche pas, peut-être que je n'ai pas bien déclaré mes lignes cel1 et cel2.
    voila mes deux fichiers.

  19. #19
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour le forum, mdakini
    Je ne peux (cause de temps) regarder en profondeur tes fichiers mais un conseil : ajoutes des msgbox temporairement pour controler si tu compares les bonnes cellules, dans cette partie de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each cel1 In v1
       For Each cel2 In v2
          msgbox cel1.address & "=>" & cel2.address 'ou .value ou cel1.offset(0,13).address (ou .value), etc...
          If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1) Then 'à vérifier les offset
             cel1.Offset(0, 36) = cel2.Offset(0, 2) 'à vérifier les offset
          End If
       Next cel2
    Next cel1
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  20. #20
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 13
    Par défaut
    Bonjour Dominique,
    Ton programme marche bien quand je change la colonne MLI de la colonne D à la colonne A, mais je n'arrive pas à changer ton programme pour que la colonne reste en D, peut-tu m'aider STP STP

    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
    Private Sub CommandButton1_Click()
    Dim derLg1 As Long, derLg2 As Long, v1 As Range, v2 As Range, cel1 As Range
    Dim wb1 As Workbook, wb2 As Workbook, wb As Workbook, cel2 As Range
    Set wb1 = ActiveWorkbook
    'on vérifie si le fichier2 est ouvert
    For Each wb In Application.Workbooks
       If wb.Name = "MLI.xls" Then
          Exit For 'on sort de la boucle s'il est ouvert
       Else
       'sinon on l'ouvre
          Workbooks.Open FileName:=ThisWorkbook.Path & "\" & "MLI.xls"
       End If
    Next wb
    wb1.Activate
    Set wb2 = Workbooks("MLI.xls") 'on attribue un objet workbook au fichier1
    With wb1.Sheets("BOM")
       derLg1 = .Range("D" & .Rows.Count).End(xlUp).Row
       Set v1 = .Range("D2:D" & derLg1)
    End With
    With wb2.Sheets("MLI")
       derLg2 = .Range("D" & .Rows.Count).End(xlUp).Row
       Set v2 = .Range("D2:D" & derLg1)
    End With
    For Each cel1 In v1
       For Each cel2 In v2
          If cel1 & cel1.Offset(0, 13) = cel2 & cel2.Offset(0, 1) Then
             cel1.Offset(0, 36) = cel2.Offset(0, 2)
          End If
       Next cel2
    Next cel1
    End Sub

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/03/2012, 09h59
  2. Réponses: 8
    Dernier message: 15/10/2009, 12h13
  3. Copie de données entre deux fichiers Excel
    Par qltmi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/03/2008, 19h20
  4. Réponses: 8
    Dernier message: 25/01/2008, 11h48
  5. copie de données entre 2 fichiers excel
    Par kalu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/10/2006, 17h31

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