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 la fonction Find


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut Problème avec la fonction Find
    Bonjour à tous, alors voila je me retrouve coincé avec une formule vba et la fonction Find: Voici la syntaxe de ma formule qui utilise une variable comme valeur recherché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cptline = .Range(.Cells(4, 2), .Cells(40, 2)).Find(cx, LookIn:=xlValues, LookAt:=xlWhole).Row
    la variable cx est une string, et est bien définit... selon les critères la recherche devrait aboutir en me donnant la ligne...
    Par contre quand je remplace cx par un chiffre par exemple présent dans la plage, et bien là sa fonctionne.

    j'obtiens une erreur variable objet ou variable de bloc non définit, mais impossible de visualiser l'erreur...

    Merci pour votre aide

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Il faudra recopier le code en entier et notamment comment est affectée la variable cx et le type de données de ta plage.
    Sinon pour mieux gérer la méthode Find tu devra l'&écrire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c As Range
     
        '.....
        Set c = .Range("B2:B40").Find(Cx, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
     
            CptLine = c.Row
            Set c = Nothing
        End If
        '...la suite
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Merci pour votre aide, je viens donc d'appliquer cette méthode pour gérer la fonction find, meme si je ne comprends pas pourquoi nativement elle ne gère pas de variable pour la valeur recherchée.

    Voici le nouveau code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim ava As Integer, c As Range, centre As String,cx as string
            For ava = 3 To DerniereLigne
                cx = Workbooks("Base CPP Historique.xls").Worksheets(w).Cells(2, ava).Value
                Set c = .Range(.Cells(4, 2), .Cells(cptline, 2)).Find(cx, LookIn:=xlValues, LookAt:=xlWhole)
                If Not c Is Nothing Then
     
                   centre = c.Row
                Workbooks("Base CPP Historique.xls").Worksheets(w).Cells(x, ava).Value = .Cells(.Range(.Cells(4, 2), .Cells(cptline - 1, 2)).Find(centre, LookAt:=xlWhole).Row, colonne2).Value
     
                   Set c = Nothing
                End If
     
            Next ava
    Seul problème c'est que la variable C ne renvoi pas de plage, mais renvoi la même valeur que cx, sans que je comprenne pourquoi...

    merci pour votre aide

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tu écris directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig=Range("A1:A200").Find("Toto",Lookin:=xlvalues,Lookat:=xlwhole).row
    Si le mot Toto n'est pas trouvé, tu auras la ligne de RIEN. (Erreur dans le code)

    Maintenant avec le code donnée précédemment,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set c=Range("A1:A200").Find("Toto",Lookin:=xlvalues,Lookat:=xlwhole)
    'Si une cellule contenant Toto est trouvée
    If Not c Is Nothing then
    'On affecte la ligne de cette cellule trouvée à la variable Lig
        Lig=c.Row
     
    EndIf
    A ta question bien sûr c contient la première valeur trouvé (dans notre cas Toto). Alors que tu cherches la ligne de cette valeur trouvée, il suffit de mettre c.Row
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Points : 319
    Points
    319
    Par défaut
    Bonjour,

    Il ne faut pas regarder le contenu de la variable C mais le contenu de la variable centre qui correspond à C.row

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup, j'avais un loupé dans le code ( la ligne 8 contenais encore la fonction find alors qu'elle ne servait plus à rien)

    C'est bon sa fonctionne, mais je ne comprends pas tout de meme:

    je suis d'accord avec ce que tu me dis au début de ton message, si toto n'est pas trouvé, erreur code, donc il vaut mieux palier à l'éventualité ou il ne trouverai pas .

    Mais moi à la place de toto, j'ai inséré une variable, et malgrès que la valeur de la variable soit dans la plage de recherche, j'ai tout de même l'erreur !
    et si je remplace la variable dans la fonction Find par sa valeur fixe, et bien sa marche, sauf qu'étant dans une boucle ou la variable change, je ne peux pas la fixer.

    Merci encore

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu n'as pas expliqué le type de donnée de ta variable et encore des données où la recherche est effectuée.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    La variable rentré pour le critère de la fonction find, était cx , c'est donc une string, et la plage ou elle est recherché: c'est la meme que celle du code : ( B4 à B "cptline" ou cptline est une variable integer qui est fixe et égale à 20.

    Voila.

    Merci encore

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Citation Envoyé par mercatog Voir le message
    Tu n'as pas expliqué le type (de donnée de ta variable et encore) des données où la recherche est effectuée.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. [XL-2010] Problème avec la fonction find-Envoi de mails à différentes adresses
    Par clemmb dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 28/10/2014, 12h12
  2. Problème avec la fonction find
    Par lil900 dans le forum MATLAB
    Réponses: 5
    Dernier message: 06/04/2014, 12h50
  3. problème avec la fonction Find et un passage en argument
    Par paiva44 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/12/2009, 18h56
  4. [E - 03] Problème avec la fonction Find
    Par documentation dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/02/2009, 17h54
  5. [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

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