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 :

Méthode find simple


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 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut Méthode find simple
    Bonjour,

    J’ai deux feuilles excel, je souhaite trouver la valeur de la cellule (21,4) de la feuille « Menu » dans la colonne 4 de la feuille « Resultat » et copier toute la ligne où se trouve cette valeur et la coller dans une autre feuille
    «SousNotice ».


    où se trouve le problème au niveau de mon code (bug au niveau de Loop Whie )??

    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
    Sub MethodeFind()
     
    Dim k As Integer
    Dim c As Range, LigDeb As String
    Dim cle As String, CurrString As String
     
        Sheets("Menu").Select
          'La clé
          cle = Sheets("Menu").Cells(21, 5).Value
     
          'Recherche de la valeur de la cle dans la feuille Resultat et après il copy la ligne où il trouve la clé pour la copier dans la feuille "SousNotice"
          With Sheets("Resultat").Range("D3:D" & Split(Sheets("Resultat").UsedRange.Address, "$")(4))
            Set c = .Find(cle)
            If Not c Is Nothing Then
              LigDeb = c.Address
            Do
                k = c.Row
                CurrString = Sheets("Resultat").Cells(k, 4).Value
                If CurrString = cle Then
                Sheets("Resultat").Cells(k, 4).EntireRow.Select
                Selection.Copy
                Sheets("SousNotice").Activate
                ActiveSheet.Paste
                Set c = .FindNext(c)
            'Message d'erreur Loop While sans do ???
            Loop While Not c Is Nothing And c.Address <> LigDeb
              End If
          End With
      Wend
     
      Application.ScreenUpdating = True
     
      Set c = Nothing
    End If
     
    End Sub

    Merci beaucoup pou l'aide


    @+

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Do
       'blabla
       If CurrString = cle Then
          'blablabla
     
    Loop While Not c Is Nothing And c.Address <> LigDeb
       End If
    Je crois que c'est évident la non ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Ben c'est ce qui est fait dans mon code
    et ca marche pas pour autant

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Ben justement,
    c'est pour cela que cela ne fonctionne pas.

    Tu ne peux pas chevaucher les opérateurs, tu dois les imbriquer.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    ouiii c'est ca le problème....mais si je savais le faire je vous aurez pas posé la question

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Faut inverser..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Do
            k = c.Row
            CurrString = Sheets("Resultat").Cells(k, 4).Value
            If CurrString = cle Then
                 'Et tu peu remplacer tes 4 lignes par...Mais tu ne dis pas ou copier
                 'sur quel ligne ?? remplace les rrr par le N° où copier
                Sheets("Resultat").Rows(k).Copy Sheets("SousNotice").Rows(rrr)
                Set c = .FindNext(c)
            End If
        Loop While Not c Is Nothing And c.Address <> LigDeb

    A+

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Si tu "ouvre" le If après le FOR tu doit le fermer avant...
    Tu ferme TOUJOURS, le dernier opérateur ouvert. Et en faisant ca ton code fonctionne

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 105
    Par défaut
    Voila le code amélioré pourtant ca ne marche pas non plus ?
    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
    Sub MethodeFind()
     
    Dim k As Integer
    Dim c As Range, LigDeb As String
    Dim cle As String, CurrString As String
     
        Sheets("Menu").Select
          'La clé
          cle = Sheets("Menu").Cells(21, 5).Value
     
          'Recherche de la valeur de la cle dans la feuille Resultat et après il copy la ligne où il trouve la clé pour la copier dans la feuille "SousNotif"
          With Sheets("Resultat").Range("D4:D" & Split(Sheets("Resultat").UsedRange.Address, "$")(4))
            Set c = .Find(cle)
            If Not c Is Nothing Then
              LigDeb = c.Address
     
            Do
            k = c.Row
            CurrString = Sheets("Resultat").Cells(k, 4).Value
            If CurrString = cle Then
     
                Sheets("Resultat").Rows(k).Copy Sheets("SousNotif").Rows(1)
                Set c = .FindNext(c)
     
            End If
     
        Loop While Not c Is Nothing And c.Address <> LigDeb
              End If
          End With
     
     
      Application.ScreenUpdating = True
     
      Set c = Nothing
     
     
    End Sub

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

Discussions similaires

  1. VBA-E Problème méthode .find
    Par popo68 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/01/2007, 10h14
  2. Méthode find sensible aux cellules fusionnées?
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/09/2006, 01h22
  3. Réponses: 1
    Dernier message: 31/08/2006, 17h28
  4. Utilisation de la méthode FIND
    Par Jeannot45 dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 15h41
  5. [Collections] - Hash de Hash - Méthode plus simple
    Par spidetra dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 30/12/2005, 12h07

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