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 :

Fonctions Find() et FindNext() en cascade [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut Fonctions Find() et FindNext() en cascade
    Bonjour,
    Je fais une macro dans laquelle j'utilise les fonctions Find() et FindNext() afin de parcourir tous mes résultats :

    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
     
    Set CellIng = Sheets("2012").Range("BL:BL").Find(sNom, LookIn:=xlValues)
        If Not CellIng Is Nothing Then
            PremiereLigne = CellIng.Address
            Do
                nLigSem = CellIng.Row
                nColSem = CellIng.Column
     
                Do
     
                    ' TRAITEMENT
     
                    nColSem = nColSem + 1
                Loop While Sheets("2012").Cells(nLigSem, nColSem).Value > Sheets("2012").Cells(nLigSem, nColSem - 1).Value
     
     
                Set CellIng = Sheets("2012").Range("BL:BL").FindNext(CellIng)
            Loop While Not CellIng Is Nothing And CellIng.Address <> PremiereLigne
        End If
    Jusque là pas de soucis.
    Par contre dans ma deuxième boucle, je fait une deuxième recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set CellPast = Sheets("J PRJ").Rows("1:1").Find(Sheets("2012").Cells(nLigSem, nColSem).Value, LookIn:=xlValues)
    If Not CellPast Is Nothing Then
        Sheets("J PRJ").Cells(i, CellPast.Column).Value = Sheets("J PRJ").Cells(i, CellPast.Column).Value + Sheets("2012").Cells(CellIng.Row, nColSem).Value
    End If
    J'obtient donc 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Set CellIng = Sheets("2012").Range("BL:BL").Find(sNom, LookIn:=xlValues)
        If Not CellIng Is Nothing Then
            PremiereLigne = CellIng.Address
            Do
                nLigSem = CellIng.Row
                nColSem = CellIng.Column
     
                Do
     
                    Set CellPast = Sheets("J PRJ").Rows("1:1").Find(Sheets("2012").Cells(nLigSem, nColSem).Value, LookIn:=xlValues)
                    If Not CellPast Is Nothing Then
                        ' Coller en additionnant
                        Sheets("J PRJ").Cells(i, CellPast.Column).Value = Sheets("J PRJ").Cells(i, CellPast.Column).Value + Sheets("2012").Cells(CellIng.Row, nColSem).Value
                    End If
     
                    nColSem = nColSem + 1
                Loop While Sheets("2012").Cells(nLigSem, nColSem).Value > Sheets("2012").Cells(nLigSem, nColSem - 1).Value
     
     
                Set CellIng = Sheets("2012").Range("BL:BL").FindNext(CellIng)
            Loop While Not CellIng Is Nothing And CellIng.Address <> PremiereLigne
        End If
    Le soucis, c'est que du coup ma fonction FindNext() me renvoie 'Nothing' dès le premier appel.
    Alors qu'il ya a bien plusieures occurrences qui me sont correctement renvoyées si j'enlève mon 2ème appel à la fonction Find()

    J'ai beau chercher dans la doc, je ne trouve pas pourquoi il est impossible de procéder ainsi !

    Si quelqu'un à une petite idée
    Merci

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    En fait FindNext refait un Find avec les paramètres précédents, donc tu comprends bien qu'il faut remplacer ton FindNext par un nouveau Find comme l'initial, mais en précisant le paramètre After

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 42
    Par défaut
    Effectivement, c'est tout simple !
    Je n'avais pas compris le principe du paramètre 'After' (ni la syntaxe, merci la doc anglaise !).

    Et merci à toi ZebreLoup pour l'éclairage des lanternes

    Si ca peut aider quelqu'un : Il suffit de remplacer la ligne FindNext() par celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CellIng = Sheets("2012").Range("BL:BL").Find(sNom, After:=ActiveCell, LookIn:=xlValues)
    A+

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

Discussions similaires

  1. Petit soucis de find et findnext
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/08/2007, 13h20
  2. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  3. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  4. [VBA-E]Fonction .find
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/01/2006, 11h03
  5. [VBA-E] Fonction "FIND"
    Par cinc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2005, 11h16

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