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 :

Recherche d'une plage de cellules identiques entre 2 feuilles Excel


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Recherche d'une plage de cellules identiques entre 2 feuilles Excel
    Bonjour,

    Je cherche un moyen rapide de déterminer si un groupe de cellules de ma feuille "encours" existe aussi dans la feuille "historique".

    Par exemple la feuille "encours" est définie comme suit:
    No Obj | Date Recep | Récepteur
    022152| 01/01/2005 | ALEC
    022352| 01/02/2005 | ALEC
    023512| 01/10/2005 | FMAR
    025622| 01/05/2005 | ALEC
    028652| 01/01/2005 | ALEC
    029652| 01/06/2005 | FMAR


    et la feuille "historique" est définie de la façon suivante:
    Date Histo | No Obj | Date Recep | Récepteur
    28/12/2005| 052365| 01/12/2005 | AHIN
    01/01/2006| 029652| 01/06/2005 | FMAR
    01/02/2006| 028652| 01/01/2005 | ALEC
    05/05/2006| 012354| 25/05/2003 | FCHA

    Je souhaiterais savoir si une fonction du type VLOOKUP existe pour rechercher la plage composée de toutes les données d'une ligne de la feuille "encours" dans la feuille historique:
    j'aurais ainsi un indicateur d'existence pour les 2 dernières lignes de ma feuille "encours".

    Actuellement, j'ai mis en place la recherche suivante:
    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
     
    ' Calcul de nombre de ligne dans le fichier des encours
        maxLigneEC = Calc_Lignes(ActiveWorkbook.Name, Sheets(wksEC).Name)
    ' Calcul de nombre de ligne dans le fichier des historiques
        maxLigneHisto = Calc_Lignes(ActiveWorkbook.Name, Sheets(wksHisto).Name)
    ' Définit la plage de cellules à traiter dans la feuille des encours
        Set plageEC = Range(Cells(2, 1), Cells(maxLigneEC, 3))
    ' Définit la plage de cellules à traiter dans la feuille des historiques
        Set plageHisto = Sheets(wksHisto).Range(Cells(2, 2), Cells(maxLigneHisto, 3))
     
        ligneEC = 1
        ligneHisto = 1
        For ligneEC = 1 to maxLigneEC
    	For ligneHisto = 1 to maxLigneHisto
    ' Si les colonnes correspondent
          	    If  plageEC(ligneEC, 1).Value = plageHisto(ligneHisto, 1).Value _
                And plageEC(ligneEC, 2).Value = plageHisto(ligneHisto, 2).Value _
    	    And plageEC(ligneEC, 3).Value = plageHisto(ligneHisto, 3).Value Then
                    ligneDiff = False
    		Exit For
    	    End If
    	Next ligneHisto
    ' je prend en compte mon ligneDiff et je boucle
    ' ......
        Next ligneEC
    Toutefois, lorsque je traite plus de 6000 lignes par feuilles, le temps de traitement est un peu trop long. L'optimisation de ce dernier serait une bonne chose.

    Je vous remercie d'avance de vos réponses.
    Cordialement,
    Asayeh

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Ce genre d'accrobatie est plus rapide avec une boucle combinée à la fonction Find au lieu de 2 boucles imbriquées.
    Tu peux tester ceci :
    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
    Sub test_recherche()
    Dim C As Range, i As Integer, wksEC As Worksheet, wksHisto As Worksheet, firstaddress As String
     
    Set wksEC = Sheets("encours")
    Set wksHisto = Sheets("historique")
     
    For i = 2 To wksEC.Cells(Rows.Count, 1).End(xlUp).Row
        Set C = wksHisto.Range("D:D").Find(what:=wksEC.Cells(i, 3), lookat:=xlWhole)
        If Not C Is Nothing Then
            firstaddress = C.Address
            If wksEC.Cells(i, 1) & wksEC.Cells(i, 2) = wksHisto.Cells(C.Row, 2) & wksHisto.Cells(C.Row, 3) Then
                wksEC.Cells(i, 4) = "ok"
            Else
    suite:
                Set C = wksHisto.Range("D:D").FindNext(C)
                If Not C Is Nothing And C.Address <> firstaddress Then
                    If wksEC.Cells(i, 1) & wksEC.Cells(i, 2) = wksHisto.Cells(C.Row, 2) & wksHisto.Cells(C.Row, 3) Then
                        wksEC.Cells(i, 4) = "ok"
                    Else
                        GoTo suite
                    End If
                End If
            End If
        End If
    Next
    End Sub

Discussions similaires

  1. Copier une plage de cellule entre 2 classeurs
    Par azertym dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/02/2012, 11h11
  2. [Toutes versions] Rechercher une valeur max dans une plage de cellules variable
    Par Laur3nt62 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/05/2011, 19h34
  3. [Toutes versions] Recherche d'un numéro d'identification commun entre 2 feuilles excel
    Par thirdeye dans le forum Excel
    Réponses: 2
    Dernier message: 15/09/2010, 14h38
  4. Réponses: 25
    Dernier message: 30/05/2007, 13h03
  5. [VBA-E]Instancier une plage de cellules prises dans plusieurs feuilles
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/03/2007, 12h08

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