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 / String et Single


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut Méthode Find / String et Single
    Bonjour,

    J'utilise la méthode "Find" (à tord, à raison) relativement souvent.
    Je m'aperçois quand même que je ne la maîtrise pas complètement au vu du nombre de fois où j'ai des erreurs...

    Je fais une recherche sur une colonne on je trouve des String, des Integer et des Single.
    ... D
    1 ... Test1
    2 ... Condition
    3 ... 9
    4 ... 14.2
    5 ... 36,5
    Mon soucis se situe au niveau de la recherche de "36,5" (valeur numérique).

    Lorsque je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Set oRng = .Rows(1).Find(Me.ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole) 'je recherche test1 - je trouve bien "test1"
        Set oRng = .Columns(oRng.Column).Find(Me.ComboBox2.Value, LookIn:=xlValues, LookAt:=xlWhole) 'là, ça coince... parfois...
    ... mon "oRng" est bien sété quand je place "Me.ComboBox2.Value" = 9 (entier) ou 14.2 (valeur texte).

    Par contre, mon Find n'arrive pas à se séter lorsque j'ai Me.ComboBox2.Value = 36,5.
    oRng = Nothing à ce moment là...

    J'ai utilisé l'enregistreur de macro pour essayer de voir mon erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro3()
        Columns("D:D").Select
        Selection.Find(What:="36,5", After:=ActiveCell, LookIn:=xlValues, LookAt _
            :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
    End Sub
    Formidable : quand je la lance => Erreur 91 : "Variable objet ou variable de bloc With non définie...

    J'ai ainsi testé de remplacer What:="36,5" par What:="36.5" et la miracle, ça fonctionne !

    J'imagine que l'erreur dans ma macro d'origine doit venir de là... mais j'ai essayé toutes les transformations possible... rien n'y fait...

    Quelqu'un aurait une piste ?

    Merci par avance !
    Cordialement,
    Kimy

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour,

    c'est la même problématique de la discussion dans laquelle tu avais apporté cette solution

    Déjà, mauvaise utilisation de la méthode Find car il faut tester l'objet renvoyé comme dans l'exemple de son aide !
    As-tu essayé de convertir le texte en numérique ?
    Sinon joindre un classeur permettant de tester à coup sûr avant de répondre …


    __________________________________________________________________________________________________
    Tous unis, tous Charlie

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    L'erreur 91 se produit quand la valeur n'est pas trouvée et que tu veux activer la cellule contenant le résultat. Utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro3()
        Set c = Columns("D:D").Find(What:="36,5", After:=ActiveCell, LookIn:=xlValues, LookAt _
            :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False)
        If Not c Is Nothing Then c.Select
    End Sub

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour Marc, Daniel,

    Tout d'abord merci pour vos réponses.
    @Marc : Ce que j'ai du mal à comprendre, c'est que je remplis les éléments de ma ComboBox à l'aide de la colonne sur laquelle je fais la recherche. C'est pourquoi, je ne fais pas de tests préalables ou postérieurs car il me semble évident que je vais trouver quelque chose...
    Voici un fichier : FindMethod.xlsm

    J'ai essayer de tout convertir, CSng, CStr, etc... Je n'ai jamais réussi à "trouver" toutes les valeurs...

    PS : à quelle discussion fais-tu référence dans ton premier post ?

    @Daniel : J'ai une incompatibilité de type sur le code que tu m'as proposé... et je ne vois pas trop où tu veux en venir.
    Comme je disais juste au dessus, je remplis les valeurs de ma ComboBox avec les valeurs de la colonne en question. Donc je ne fais pas le test If Not oRng is Nothing then que je fais, bien entendu, naturellement dans d'autres cas.

    Voici le code pour remplir ma ComboBox2 :
    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
    Private Sub ComboBox1_Change()
    Dim oRng As Range
    Dim i As Integer
     
    Me.ComboBox2.Clear
    With Worksheets("ArnaudYes")
        Set oRng = .Rows(1).Find(Me.ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
        'If Not oRng Is Nothing Then
            For i = 2 To .Columns(oRng.Column).Find("*", , , , , xlPrevious).Row - 1
                If oRng.Offset(i, 0) <> "" Then
                    Me.ComboBox2.AddItem oRng.Offset(i, 0)
                End If
            Next i
        'End If
    End With
     
    End Sub
    Merci pour vos conseils !

    Cordialement,
    Kimy

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bon, la seule solution que j'ai trouvée est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub ComboBox2_Change()
    Dim oRng As Range
     
    With Worksheets("ArnaudYes")
        Set oRng = .Rows(1).Find(Me.ComboBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
        Set oRng = .Columns(oRng.Column).Find(Replace(Me.ComboBox2.Value, ",", "."), LookIn:=xlValues, LookAt:=xlWhole)
     
        Me.TextBox1.Value = oRng.Offset(0, 1)
    End With
     
    End Sub
    Je ne trouve pas ça "très propre" mais ça fonctionne.

    Je serais que la différence entre la virgule "," et le point "." pour la recherche joue beaucoup.

    Merci encore pour vos réponses.

    Cordialement,
    Kimy

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Ton code fonctionne normalement sauf que je ne vois pas ce que tu veux faire. Tu obtiens toujours un résultat de la "condition 2" ?

  7. #7
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Ton code fonctionne normalement sauf que je ne vois pas ce que tu veux faire. Tu obtiens toujours un résultat de la "condition 2" ?
    L'objectif du code est décrit dans cette discussion : http://www.developpez.net/forums/d14...ation-valeurs/.
    Pour résumer :
    1. Menu déroulant 1 avec tous les éléments de la ligne 1
    2. Menu déroulant 2 avec tous les éléments de la colonne sélectionnée dans le menu déroulant 1
    3. Affichage de la "Condition 2" de l'élément sélectionné dans le menu déroulant 2
    Ainsi en récupérant les éléments dans mon menu déroulant 2, et lorsque j'ai une valeur du type "36,5", le Find pose soucis.
    J'ai donc remplacé la virgule "," par un point "." pour faire ma recherche, et, ainsi, j'arrive à retrouver l'ensemble des mes valeurs.
    Je ne trouve pas ça très propre et il y a surement mieux...
    Je ne sais pas si je mets . ^^

    Merci encore à tous !

    Kimy

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Citation Envoyé par Kimy_Ire Voir le message
    PS : à quelle discussion fais-tu référence dans ton premier post ?
    A celle de l'étudiant Arnaud

    Sinon ne pas tester le résultat de la méthode Find est vraiment chercher les ennuis !

    Et surtout, ne pas oublier la conversion du type de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub ComboBox2_Change()
        Dim oRng As Range, V
     
        With Feuil3.Cells(1).CurrentRegion
            Set oRng = .Rows(1).Find(ComboBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
     
            With ComboBox2
                If IsNumeric(.Value) Then V = CDbl(.Text) Else V = .Text
            End With
     
            TextBox1.Value = .Columns(oRng.Column).Find(V).Offset(0, 1).Text
                  Set oRng = Nothing
        End With
    End Sub
    Ce que je t'avais indiqué dès mon premier message, conversion du texte (toute donnée d'un Userform est du texte !)
    en numérique … (idem en remplaçant la propriété Text par Value qui est toujours du texte !)

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

Discussions similaires

  1. méthode FIND EXCEL
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/01/2007, 18h06
  2. 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
  3. utilisation de std::find( string )
    Par ccensam dans le forum SL & STL
    Réponses: 1
    Dernier message: 24/11/2006, 22h07
  4. 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
  5. Utilisation de la méthode FIND
    Par Jeannot45 dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 15h41

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