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 :

Utilisation de FIND.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut Utilisation de FIND.
    Bonjour,

    Ci dessous une petite macro qui me permet de rechercher une valeur dans une feuille et si elle est trouvé et que suivant certaines conditions copier des cellules de cette page vers une autre page:
    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
    Set SHtmpIO = Sheets("Temp IO")
    ligne = 2
    Do Until SHtmpIO.Cells(ligne, 1) = ""
        ctrl = SHtmpIO.Cells(ligne, 7)
        Var = SHtmpIO.Cells(ligne, 1)
     
        Set SHctrl = Sheets(ctrl)
     
        Cells.Find(What:=(Var), After:=SHctrl.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder _
        :=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
        With Application.ActiveCell
        NumLg = .Row
        End With
        If Not Cells(NumLg, 12) = "" Then
            Range(SHtmpIO.Cells(ligne, 14), SHtmpIO.Cells(ligne, 16)).Value = Range(SHctrl.Cells(NumLg, 12), SHctrl.Cells(NumLg, 14)).Value
        End If
        ligne = ligne + 1
    Loop
    Mon probleme est que si j'utilise cette macro tels quel le resultat n'est pas coherent. Pour qu'il soit juste il faut que je rajoute la partie de code ci dessous avant d'appliquer FIND:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets(ctrl).Select
        Cells(1, 1).Select
        Cells.Find(What:=(Var), After:=SHctrl.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder _
        :=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
    Pourquoi?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Lancez votre macro en mode débogage et en appuyant sur "F8" et vous constaterez que la recherche se fait sur la feuille active, autrement dit dans les paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    After:=SHctrl.Cells(1, 1),
    SHctrl n'est pas pris en compte et il ne le serait pas plus si vous indiquiez le nom réel de la feuille.

  3. #3
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    bonjour,

    c'est toujours le même probléme lorsqu'on veut se limiter à travailler sur la feuille active avec des select, activate, des range ou Cells sans rien devant....


    pour ta recherche il faut préciser la feuille concerné (et même le classeur..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim yaCherche As Range
    Set SHctrl = Thisworkbook.Sheets(ctrl)
     
     Set yaCherche = SHctrl.Cells.Find(What:=(Var), After:=SHctrl.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder _
        :=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
     If Not yaCherche Is Nothing Then
        MsgBox "Trouvé : " & yaCherche.Parent.Name & "!" & yaCherche.Address
     
     End If

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut
    Bonjour,

    Désolé pour le retard, beaucoup d'activite pro cette semaine. Bref je viens de tester le code, tout fonctionne correctement avec 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
    ligne = 2
    Do Until SHtmpIO.Cells(ligne, 1) = ""
        ctrl = SHtmpIO.Cells(ligne, 7)
        Var = SHtmpIO.Cells(ligne, 1)
        Set SHctrl = Sheets(ctrl)
        Set Cherche = SHctrl.Cells.Find(What:=(Var), After:=SHctrl.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder _
           :=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
        If Not Sheets(ctrl).Cells(Cherche.Row, 12) = "" Then
            Range(SHtmpIO.Cells(ligne, 14), SHtmpIO.Cells(ligne, 16)).Value = Range(SHctrl.Cells(Cherche.Row, 12), _
            SHctrl.Cells(Cherche.Row, 14)).Value
        End If
        ligne = ligne + 1
    Loop
    Par contre si j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SHctrl = ThisWorkbook.Sheets(ctrl)
    à la place de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SHctrl = Sheets(ctrl)
    le code ne fonctionne plus correctement, pourquoi?

  5. #5
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,

    Citation Envoyé par zeralium Voir le message
    ...
    le code ne fonctionne plus correctement, pourquoi?
    Ton code et bien dans le même classeur que ta feuille ctrl ?

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut
    Bonjour,

    Tu avais raison Jacques, mon code n'étant pas dans le même classeur ça ne pouvait pas fonctionner correctement. Donc j'ai remplacé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SHctrl = ThisWorkbook.Sheets(ctrl)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set SHctrl = ActiveWorkbook.Sheets(ctrl)
    et ça fonctionne correctement.

    Merci pour ton aide.

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

Discussions similaires

  1. utilisation de Find
    Par Beluga_71 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2008, 17h03
  2. utilisation de find pour trouver date
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/03/2008, 14h23
  3. Utilisation de find
    Par Fry dans le forum Administration système
    Réponses: 2
    Dernier message: 02/11/2006, 15h39
  4. [C++ .NET] Comment utiliser fonction Find ?
    Par thecrax dans le forum Framework .NET
    Réponses: 3
    Dernier message: 17/08/2006, 09h02
  5. [VBA-E] Pb avec l'utilisation de .Find
    Par belfaigore dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2006, 07h38

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