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 :

comparer deux cellules de deux fichiers différents


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut comparer deux cellules de deux fichiers différents
    Bonjour à tous !

    J'ai regardé les posts qui ont été postés précédemment sur ce sujet mais je n'ai pas trouvé mon bonheur car cela ne correspondait pas ou parce que je n'ai pas réussi à bien interpréter...

    J'ai bien compris qu'il y avait la formule "find" qui pouvait m'etre très utile mais après avoir fait là aussi des recherches, je n'ai pas trouvé de tuto ou d'explications pour apprendre à l'utiliser.

    Via l'aide d'excel, j'ai pu voir que les fonction "EXACT" ou "OU" pouvaient aussi servir mais je ne crois pas que ce soit applicable dans mon cas.

    Je vous explique mon problème pour plus de clarté :
    Je souhaite comparer un colonne "A" d'un fichier 1 à un colonne "D" du fichier 2. Le fait est que, dans le fichier 1, les données ne sont pas triées de la meme façon ce qui fait que dans l'idéal, il faudrait, pour chaque cellule de la colonne "A" du fichier 1, je compare une par une les cellules de la colonne "D" du fichier 2. Idem pour la cellule suivante etc.

    En gros, voilà mes fichiers :

    fichier 1 :
    A | B
    -------
    E42 | 3

    fichier 2 :
    A | B
    -------
    E41 | 4
    E42 | 5

    fichier 3 :
    A | B | C
    -------
    E42 | 3 | 5
    Sachant que mon fichier 3 correspond à un fichier final, comprenant les valeurs de mon premier tableau puis celle de mon second.

    J'espère avoir été assez précise...

    Merci à tous ceux qui auront le courage de m'aider !

    Iloon.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 557
    Par défaut
    Bonjour
    Voici la commande suivante pour ouvrir un autre classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.Open Filename:=chmein complet du fichier"
    Et ensuite, pour passer d'un fichier à un autre, tu fais ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Workbooks(Fichier1).Select
    ...... traitement
    Workbooks(Fichier2).Select
    ........ traitement

  3. #3
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par iloon Voir le message
    J'ai bien compris qu'il y avait la formule "find" qui pouvait m'etre très utile mais après avoir fait là aussi des recherches, je n'ai pas trouvé de tuto ou d'explications pour apprendre à l'utiliser.

    Via l'aide d'excel, j'ai pu voir que les fonction "EXACT" ou "OU" pouvaient aussi servir mais je ne crois pas que ce soit applicable dans mon cas.
    Tu dois regarder dans l'aide de Visual Basic
    Alt+F11 puis F1 --> mot clé : Find --> 2ème rubrique : Find, méthode (voir l'exemple)

  4. #4
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut
    Merci pour vos réponses,

    fring : je viens de faire ces recherches sur le pc où j'ai acces à l'internet, et effectivement, j'ai plus de réponses, parce qu'en fait, l'ordinateur sur lequel je travaille n'a pas acces au net, donc je n'avais pas de réponses correspondantes.... Idiot en fait


    Je vais regarder tout ça et je suppose que je vais revenir si j'ai pas tout compris !

    Je fermerai le post si je parviens à l'utiliser, j'ai peur de ne pas pouvoir tester ça aujourd'hui.

    Je vous tiens au courant, merci encore !

    Iloon

  5. #5
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Mais...tu ne dois pas avoir accès au net, c'est l'aide de Visual Basic, aide installée sur ton pc.

    Find, méthode


    Recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.

    Pour plus d'informations sur la fonction de feuille de calcul Find de Visual Basic, consultez Utilisation des fonctions de feuille de calcul dans Visual Basic.

    Syntaxe

    expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)

    expression Obligatoire. Expression qui renvoie un objet Range.

    What Argument de type Variant obligatoire. L'élément à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.

    After Argument de type Variant facultatif. La cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After doit désigner une seule cellule de la plage et que la recherche commence après cette cellule ; la recherche ne porte pas sur la cellule spécifiée avant que la méthode y revienne avoir exploré la totalité de la plage de recherche. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.

    LookIn Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlFindLookIn suivantes : xlFormulas, xlValues ou xlComments.

    LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlLookAt suivantes : xlPart ou xlWhole.

    SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByColumns ou xlByRows.

    SearchDirection Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchDirection suivantes : xlNext ou xlPrevious. La constante par défaut est xlNext.

    MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.

    MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets correspondent uniquement à des caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.

    Remarques

    Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.

    Les méthodes FindNext et FindPrevious permettent de répéter la recherche.

    Lorsque la recherche atteint la fin de la plage de recherche spécifiée, elle revient au début de cette plage. Pour arrêter une recherche lorsqu'elle revient au point de départ, enregistrez l'adresse de la première cellule trouvée, puis comparez l'adresse de chaque cellule ultérieurement trouvée avec l'adresse enregistrée.

    Pour effectuer des recherches plus complexes, utilisez une instruction For Each...Next avec l'opérateur Like. Par exemple, l'exemple de code suivant montre comment rechercher toutes les cellules de la plage A1:C5 qui utilisent une police dont le nom commence par les lettres « Cour ». Lorsque Microsoft Excel trouve une cellule correspondante, il lui affecte la police Times New Roman.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each c In [A1:C5]
        If c.Font.Name Like "Cour*" Then
            c.Font.Name = "Times New Roman"
        End If
    Next
    Find, méthode - Exemple

    Cet exemple montre comment rechercher toutes les cellules de la plage A1:A500 de la première feuille de calcul qui contiennent la valeur 2, puis grise ces cellules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Worksheets(1).Range("a1:a500")
        Set c = .Find(2, lookin:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Interior.Pattern = xlPatternGray50
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With

  6. #6
    Membre confirmé Avatar de Iloon
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 70
    Par défaut
    Bonjour bonjour,

    merci d'avoir mis ici cette partie de l'aide parce que je ne la trouve pas dans l'aide de Visual Basic, je ne sais pas pourquoi !

    Après avoir lu tout ça, je crois comprendre un peu mieux comment on s'en sert, mais comment faire pour que la constante "2" ne soit plus une constante mais une variable qui s'incrémente ? Pour que chaque ligne de la colonne du fichier 2 soit balayée lorsque l'on regarde chaque ligne de la colonne du fichier 1 ?
    Il faudrait que la colonne du fichier 1 s'incrémente de 1 lorsque la colonne du fichier 2 a été totalement parcourue...

    Je sais que j'en demande beaucoup par rapport au niveau que j'ai, mais si vous avez un peu de temps à me consacrer, ce serait très gentil !!

    Merci d'avance pour vos idées,

    Iloon


    EDIT : Je vous ajoute un fichier d'exemple en espérant que ça vous inspire....
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Je n'ai pas regardé ton fichier mais si je m'inspire de tes premières explications, tu as des données dans le fichier3 qu'il faut rechercher dans les fichiers 1 et 2. Si ces données existent, on copie dans le fichier3 les valeurs correspondantes.

    Il ne te reste plus qu'à adapter le code ci-dessous (noms de fichiers, noms de feuilles, colonnes)
    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
    Sub test()
    Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet
    Dim i As Long, c As Range
     
    Set Sh1 = Workbooks("fichier1.xls").Sheets("feuil1")
    Set Sh2 = Workbooks("fichier2.xls").Sheets("feuil1")
    Set Sh3 = Workbooks("fichier3.xls").Sheets("feuil1")
     
    For i = 2 To Sh3.Cells(Rows.Count, 1).End(xlUp).Row
     
        '*****recherche des données dans le fichier 1*****
        With Sh1.Range("A:A")
        Set c = .Find(what:=Sh3.Cells(i, 1), LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    Sh3.Cells(i, Cells(i, Columns.Count).End(xlToLeft).Column) = c.Offset(0, 1).Value
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
     
        '*****recherche des données dans le fichier 2*****
        With Sh2.Range("A:A")
        Set c = .Find(what:=Sh3.Cells(i, 1), LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    Sh3.Cells(i, Cells(i, Columns.Count).End(xlToLeft).Column) = c.Offset(0, 1).Value
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
     
    Next
     
    Set Sh1 = Nothing
    Set Sh2 = Nothing
    Set Sh3 = Nothing
     
    End Sub

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/02/2015, 14h19
  2. [XL-2003] Lier deux cellules sur des feuilles différentes
    Par Olivier.p dans le forum Excel
    Réponses: 6
    Dernier message: 21/07/2009, 14h03
  3. comparer le contenu de deux cellules
    Par maroinoide dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/03/2009, 12h53
  4. Réponses: 2
    Dernier message: 10/10/2008, 20h35
  5. Comparer le contenu de deux cellules
    Par _Nimy_ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/05/2008, 16h18

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