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 :

Trouver dernière occurrence avec méthode FIND


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 73
    Points : 61
    Points
    61
    Par défaut Trouver dernière occurrence avec méthode FIND
    Bonjour,
    Je travaille sur un classeur Excel 2010 qui comporte 3 feuilles.

    Dans la première (Feuil1) j'ai un tableau avec plus de 6000 lignes,
    Dans la seconde (Feuil2) j'ai un tableau avec plus de 10000 contacts,
    la dernière feuille (Feuil3) va me servir de tableau temporaire.

    Pour chaque ligne de la feuille 1, je dois chercher le contact correspondant dans la feuille 2 (pour ça j'utilise la fonction VBA "Find" sur un code en commun entre les 2 feuilles sur la colonne 1).
    Le problème c'est que j'ai plusieurs contacts possible, et j'aimerai prendre la dernière occurrence que l'on puisse trouver.
    Cependant avec la fonction Find je n'ai que la première valeur trouvée dans ma feuille 2.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ligneCourante = ThisWorkbook.Worksheets("Feuil1").Columns(1).Cells.Find(valSearch, LookIn:=xlValues)
    If Not ligneCourante Is Nothing Then
     
        lastIdFeuil3 = ThisWorkbook.Worksheets("Feuil3").Range("A" & Rows.Count).End(xlUp).Row - 1
        Set tmp_rowDest = ThisWorkbook.Worksheets("Feuil1").Rows(lastIdFeuil3 + 1)
        tmp_rowSource.Copy tmp_rowDest
     
        ThisWorkbook.Worksheets("Feuil3").Range("Z" & lastIdFeuil3 + 1).Value = ThisWorkbook.Worksheets("Feuil2").Cells(ligneDUT.Row, 6) 
     
    End If
    Comment je peux faire pour trouver la dernière occurrence de contact?

    Merci d'avance de vos réponses.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Tu peux faire une boucle sur toute tes lignes de la feuille 1 (bien que je trouve cette solution assez moche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim indiceDerniereOccurence as Integer
    indiceDerniereOccurence=-1
     
    for i=0 to 6000 'ta dernière ligne
        if ThisWorkbook.Worksheets("Feuil1").cells(i,1)=valSearch then
        indiceDerniereOccurence = i
        EndIf
    Next
     
     
    If indiceDerniereOccurence>-1 then
    ...

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Points : 319
    Points
    319
    Par défaut
    Bonjour,

    Voir du coté de la fonction FindNext.

    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
     
    Dim premiereLigne As Integer, derniereligne As Integer
     
    Set ligneCourante = ThisWorkbook.Worksheets("Feuil1").Columns(1).Cells.Find(valSearch, LookIn:=xlValues)
    If Not ligneCourante Is Nothing Then
     
        With ThisWorkbook.Worksheets("Feuil2").Range("a1:a500")
     
            Set c = ThisWorkbook.Worksheets("Feuil2").Columns(1).Cells.Find(valSearch, LookIn:=xlValues)
            If Not c Is Nothing Then
                premiereLigne = c.Row
                Do
                    derniereligne = c.Row
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Row <> premiereLigne
            End If
        End With
    End If

  4. #4
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    La méthode Range.Find permet du premier coup de trouver le dernier élément (sans FindNext)
    et c'est pourtant simple, juste en lisant son aide VBA ‼

    Si son paramètre After n'est pas renseigné ou indique la première cellule de la plage de recheche,
    il suffit donc de bien définir son paramètre SearchDirection !

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Points : 319
    Points
    319
    Par défaut
    Comme quoi on en apprends tous les jours... Merci Marc pour la leçon ( ... et c'est pourtant simple, juste en lisant son aide VBA ‼) .

  6. #6
    Membre actif Avatar de Denis la Malice
    Homme Profil pro
    FabManager
    Inscrit en
    Février 2013
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : FabManager
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2013
    Messages : 133
    Points : 287
    Points
    287
    Par défaut
    Bonjour,
    si le problème est résolu, indique-le et n'oublie pas de cliquer sur les pouces verts de ceux qui t'ont aidé. C'est leur seule récompense et ça ne te coute pas très cher.

Discussions similaires

  1. [XL-2003] Soucis avec la méthode Find
    Par silvere123 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/07/2012, 17h08
  2. [XL-2007] Méthode Find avec une date
    Par Dragi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2012, 17h41
  3. Trouver la dernière ligne avec nombre positif
    Par andrea0 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/02/2011, 20h32
  4. Comment Trouver un tableau comme avec Control->Find
    Par TrollTop dans le forum C++/CLI
    Réponses: 11
    Dernier message: 25/03/2009, 14h31
  5. Méthode find avec plusieurs mots à chercher
    Par domb_st dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2007, 17h33

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