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 :

Rechercher une valeur dans une colonne fonctionne pas avec formule


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 588
    Par défaut Rechercher une valeur dans une colonne fonctionne pas avec formule
    Bonjour à tous,

    J'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With wbExcel.Sheets(NOM_FEUILLE)
        Set a = .Range("C:C").Find(p_nom_court_appli, lookat:=xlWhole)
    Mon problème est que j'ai dans p_nom_court_appli par exemple TOTO. il ne me le trouve pas car mes données dans la colonne C dont des formules.
    Pour tester j'ai copié la colonne C en D en faisant une copie spéciale valeurs.
    Et si je fais ma recherche dans la colonne D, ca fonctionne mais je ne veux pas devoir faire cette manipulation .
    Les formules affichent bien les bon résultats, mais le Find semble se baser sur le texte de la formule et non pas le résultat de celle ci.

    Des idées, conseils.
    Merci @+

  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 174
    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 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si "Toto" est la valeur renvoyée par une formule, chez moi, votre code me renvoie bien l'objet Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
     Dim a As Range
     With ActiveSheet
        Set a = .Range("C:C").Find("Toto", lookat:=xlWhole)
        Debug.Print a.Address
     End With
    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

  3. #3
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 588
    Par défaut
    OK, mais chez moi ca ne marche pas, mince,
    et je viens de faire un Ctrl +F pour chercher TOTO dans ma feuille et il ne me le trouve que dans la colonne D que j'ai copiée en valeur .
    Je suis sous windows 11 ... et office 365
    Je viens de refaire un test dans un autre fichier pour être sur que ça ne vient pas du fichier et idem, cf pièce jointe, ça ne marche pas chez moi.


    Je désespère.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    J'ai testé et ça ne marche pas chez moi non plus, sauf si je remplace lookat:=xlWhole par lookat:=xlPart.

  5. #5
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 588
    Par défaut
    Salut, dans le fichier de test c'est OK avec ton code mais sur mon projet réel, c'est toujours raté:

    J'ai fait un copier de la cellule en question et un coller valeur dans une autre cellule pour voir si je n'ai pas un caractère spécial ou un truc caché, ...
    J'ai ensuite repris la valeur et je l'ai copiée dans notepad ++ et il n'y a que ma chaine de caractères.

    Je sèche.

  6. #6
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    Salut
    Sauf erreur TOTO est calculé ! Donc au lieu d'utiliser LookIn:=xlValues faudrait-il utiliser LookIn:=xlFormulas
    Et si TOTO est présent plusieurs fois dans la colonne peut-être faudra-t-il utiliser FindNext() !

  7. #7
    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 174
    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 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je confirme que si "Toto" est une valeur renvoyée par une formule, l'argument nommé LookIn avec comme valeur la constante xlValues et avec comme valeur à l'argument nommé lookat, xlWhole, cela fonctionne.

    En revanche si la valeur renvoyée par la formule est "La tête à Toto", là, il faudra mettre comme valeur, la constante xlPart et peut être également ajouter l'argument nommé MatchCase avec comme valeur True si l'on souhaite la sensibilité à la casse.

    Cependant, il faut être prudent avec cette méthode car elle conserve la valeur des arguments LookIn, LookAt, SearchOrder et MatchByte lors de la recherche précédente, comme c'est expliqué dans l'aide Range.Find method (Excel)

    [EDIT]
    @ hyperion13
    Sauf erreur TOTO est calculé ! Donc au lieu d'utiliser LookIn:=xlValues faudrait-il utiliser LookIn:=xlFormulas
    On utilise la constante xlFormulas si l'on doit chercher "Toto" utilisé comme constante de la formule (Exemple : =RECHERCHEV("Toto";Tableau1;2;FAUX))
    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

  8. #8
    Membre éclairé Avatar de bartimeus35
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2009
    Messages : 588
    Par défaut
    Je ne pige plus rien car visiblement un certain franc a bien vu le même problème que moi .
    Et il a proposé une solution qui fonctionne sur mon fichier de test mai pas sur mon fichier réel comme je l'ai expliqué plus haut ...

    Je crois que je vais devoir lire mes lignes une par une alors, sniff, fastidieux et long

  9. #9
    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 174
    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 174
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme je l'ai expliqué dans ma dernière réponse, il vaut mieux utiliser les arguments nommés LookIn, LookAt, SearchOrder et MatchByte, même si vous n'en avez pas besoin et ce pour éviter des surprises, c'est bien expliqué dans l'aide en ligne dont je vous ai mis le lien.
    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

  10. #10
    Expert confirmé Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 288
    Par défaut
    re,
    Le problème c'est que vous êtes un peu brouillon dans vos explications.
    - Post#1 vous donnez un bout de code qui concerne la col. C
    - Post#2 Philippe que je salue vous donne la solution à l'aveugle. Il n'y a pas de fichier à disposition.
    - Post#3 vous déposez votre fichier et vous indiquez qu'il trouve TOTO que dans la col. D. Problème dans votre fichier TOTO est en A1 !
    - Post#5 je ne sais pas quoi penser de votre copier/coller sur NotePad++ pour chercher des caractères invisibles. Sérieusement !
    - Post#6 comme vos explications sont du style "flou artistique" je me dis que le gusse ne va pas chercher qu'une seule valeur TOTO dans toute sa colonne et je vous donne la piste de FindNext().
    - Post#7 Philippe vous donne des explications et surtout un lien dans l'aide Range.Find method (Excel). Et la solution à votre problème est donnée.
    - Post#8 visiblement vous n'avez pas lu le Post#7 !
    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
    Sub t()
    Dim a As Range
    Dim strFirstAddress As String
     
    p_nom_court_appli = "TOTO"
     
    With ActiveSheet.Range("A:A")
        Set a = .Find(What:=p_nom_court_appli, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
        If Not a Is Nothing Then
            strFirstAddress = a.Address
            a.Font.Color = vbRed
            Do
                Set a = .FindNext(a)
                a.Font.Color = vbRed
            Loop Until a.Address = strFirstAddress
        End If
    End With
    End Sub
    Images attachées Images attachées  

Discussions similaires

  1. Rechercher une valeur dans une colonne fonctionne pas
    Par bartimeus35 dans le forum VBA Access
    Réponses: 5
    Dernier message: 15/06/2023, 14h42
  2. [LibreOffice][Tableur] recherche de valeur dans plusieurs colonnes
    Par boboss123 dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 25/05/2016, 11h02
  3. [XL-2010] Somme sur une recherche de valeur dans plusieurs colonnes
    Par Marmouz dans le forum Excel
    Réponses: 2
    Dernier message: 21/01/2012, 15h06
  4. Réponses: 4
    Dernier message: 18/12/2009, 13h44
  5. Recherche d'une valeur dans plusieurs colonnes
    Par Arnaud F. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/03/2009, 11h44

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