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 :

Problème avec Find dans une boucle [XL-2016]


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
    industrie
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut Problème avec Find dans une boucle
    Bonjour, je galère avec Find pour l'utiliser dans une boucle...
    Voilà en détail ce que je souhaite faire :
    J'ai 2 colonnes sur ma feuille, la 1ere est une liste de valeurs et la seconde contient les valeurs que je souhaite rechercher dans la liste (1ere colonne). Je souhaite colorer les caractères de la valeur en rouge si la valeur n'est pas trouvée dans la liste...
    voici mon code :
    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
    Sub controle()
    Set rgFound = Range("A1:A30")
     
    For i = 1 To 30
     
        rgFound.Find what:=Cells(i, 4).Value
     
        If rgFound Is Nothing Then
            MsgBox "Name was not found."
            Range("D" & i).Font.Color = -16776961
        Else
            MsgBox "Name found in :" & rgFound.Address
        End If
     
    Next i
     
    End Sub
    j'ai l'impression que je n'arrive pas à faire en sorte que Find recherche toutes les valeurs de ma seconde colonne...
    Merci d'avance pour votre aide, je galère là dessus depuis 2 jours maintenant
    ci-joint ma feuille excel
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Est-ce qu'une simple mise en forme conditionnelle dont la formule serait le résultat renvoyé par la fonction EQUIV ne conviendrait pas ?
    Deux minutes à mettre en place
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    industrie
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut
    merci Philippe pour ta réponse, ce que tu me prose marcherai surement mais je souhaite pourvoir maîtriser find car je vais surement avoir a l'utiliser prochainement dans de nombreux projet que j'ai en cours et je comprends vraiment pas pourquoi je ne peut pas lancer des recherches en boucle ...
    Il s'agit peut être d'un simple problème de codage, j'ai arrêté la programmation pendant 10 ans je viens tout juste de m'y remettre, j'ai oublié plein de chose même si cela semble me revenir petit à petit

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Petite procédure rapide. Testée mais peut-être pas tous les cas.
    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
    Sub TestFind()
      Dim rngData_1 As Range
      Dim rngData_2 As Range
      Dim Cell As Range
      Dim C As Range
      Dim msg As String
      With ThisWorkbook.Worksheets("Feuil5")
        Set rngData_1 = .Range("A2:A25")
        Set rngData_2 = .Range("E2:E9")
      End With
      ' Boucle de recherche
      For Each Cell In rngData_1
        Set C = rngData_2.Find(What:=Cell.Value, MatchCase:=False, LookAt:=xlWhole)
        If Not C Is Nothing Then
          msg = msg & vbCrLf & Cell.Value & " trouvé à l'adresse " & C.Address
        End If
      Next
      MsgBox msg
     End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Homme Profil pro
    industrie
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut
    Merci Philippe, j'ai adapté et cela marche nickel

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Sans find :
    Code VBA Excel : 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
    Option Explicit
    Sub controle()
    Dim rngTest As Range    'zone à tester
    Dim tbT As Variant      'valeurs à tester
    Dim tbR As Variant      'valeurs recherchées
    Dim tbC() As Variant    'couleurs
    Dim ix1 As Long         'index 1
    Dim ix2 As Long         'index 2
     
      With Worksheets("Feuil1")
        Set rngTest = .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
        With .Range("D1").CurrentRegion
          tbR = Application.Transpose(.Resize(.Rows.Count - 1).Offset(1).Value)
        End With
      End With
      tbT = Application.Transpose(rngTest.Value)
      ReDim tbC(LBound(tbT) To UBound(tbT))
      For ix1 = LBound(tbC) To UBound(tbC)
        tbC(ix1) = rgbRed
      Next ix1
      For ix1 = LBound(tbR) To UBound(tbR)
        For ix2 = LBound(tbT) To UBound(tbT)
          If tbT(ix2) = tbR(ix1) Then tbC(ix2) = rgbBlack
        Next ix2
      Next ix1
      For ix1 = LBound(tbC) To UBound(tbC)
        rngTest.Cells(ix1, 1).Font.Color = tbC(ix1)
      Next ix1
     
    End Sub

  7. #7
    Membre averti
    Homme Profil pro
    industrie
    Inscrit en
    Janvier 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : industrie
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2020
    Messages : 16
    Par défaut
    Merci Patrice, j'avais pensé faire un truc comme ca, mais Find reste plus lisible je trouve et plus simple à mettre en place.

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

Discussions similaires

  1. [XL-2007] Problème avec If dans une boucle
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/06/2011, 08h48
  2. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  3. Problème de requête dans une boucle avec ADOQuery
    Par Ekik dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/05/2007, 16h07
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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