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 méthode find


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut Problème avec la méthode find
    Bonjours à tous et à toutes,

    J'ai un message d'erreur:

    Erreur d'exécution '91':
    Variable objet ou variable de bloc With non définie

    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
    Sub BEV(m As Byte)
     
    Dim i As Integer, j As Integer
    Dim d As Date
    Dim c As Integer, a As Integer
     
        d = "01/" & m & "/" & Year(Date)
     
        MsgBox d
     
        c = Sheets("Présence").Rows(18).Find(d, LookAt:=xlWhole).Column
     
     
        MsgBox c
     
    End Sub
    L'erreur provient au mon ou je souhaite définir c. Pourtant d est bien défini.

    Pourtant avec la box je vois bien que d est bien définie exemple: 01/04/2017.
    En ligne 18 j'ai bien une cellule qui est égale à ça. Je ne comprend pas mon erreur.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d=DateSerial( Year(Date),m,1)

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Merci mais cela ne change rien du tout.

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Un passage de ceci :
    https://www.rondebruin.nl/win/s9/win006.htm
    mérite ton attention

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Find renvoie un Range localisant la position de la cellule contenant la valeur cherchée
    si la valeur n'existe pas, alors ton résultat est un objet Nothing

    on utilise toujours une variable Range quand on fait un Find
    ensuite on teste si le Range n'est pas Nothing
    S'il n'est pas nothing, là on va récupérer sa propriété .Column

    Mais on ne doit jamais directement utiliser la propriété d'un Range basé sur un Find, sans tester s'il y a bien eu un résultat trouvé

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    A tester :
    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 BEV(m As Byte)
     
        Dim Cel As Range
        Dim i As Integer, j As Integer
        Dim d As Date
        Dim c As Integer, a As Integer
     
        d = DateSerial(Year(Date), m, 1)
     
        MsgBox d
     
        Set Cel = Sheets("Présence").Rows(18).Find(d, , xlFormulas, xlWhole)
     
        If Not Cel Is Nothing Then c = Cel.Column
     
        MsgBox c
     
    End Sub

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    Find renvoie un Range localisant la position de la cellule contenant la valeur cherchée
    si la valeur n'existe pas, alors ton résultat est un objet Nothing

    on utilise toujours une variable Range quand on fait un Find
    ensuite on teste si le Range n'est pas Nothing
    S'il n'est pas nothing, là on va récupérer sa propriété .Column

    Mais on ne doit jamais directement utiliser la propriété d'un Range basé sur un Find, sans tester s'il y a bien eu un résultat trouvé

    Merci c'est vrai que habituellement je fait ce test. Mais là je sais que la valeur que je cherche existe et il ne la trouve pas.

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    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
    Sub BEV(m As Byte)
     
    Dim i As Integer, j As Integer
    Dim d As Date
    Dim c As Integer, a As Integer
    Dim Rng As Range
     
    '    d = "01/" & m & "/" & Year(Date)
        d = DateSerial(Year(Date), m, 1)
     
        MsgBox d
     
        Set Rng = Sheets("Présence").Rows(18).Find(d, LookAt:=xlWhole)
     
        If Not Rng Is Nothing Then
            c = Rng.Column
            MsgBox c
        Else
            MsgBox "Nothing"
        End If
     
     
    End Sub
    Mon problème c'est que je ne trouve pas la cellule alors que je sais quelle existe (CO18).

    dans ma cellule j'ai la formule: =DATE(Synthèse!$C$3;CO19;1) qui vaut 01/04/2017

    la valeur dans ma macro de m=4 et le message donné par la msgbox est bien 01/04/2017.

    Du coup je ne comprend pas pourquoi je ne trouve pas ma cellule

  9. #9
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Mais là je sais que la valeur que je cherche existe et il ne la trouve pas.
    Questions :
    1) as-tu lu ce que je t'ai invité plus haut à lire ?
    2) quel est le format de cette cellule ?
    3) lorsque tu es sur celle cellule : qu'affichent : a) la cellule elle-même et b) la barre de formules (qu'il y ait ou non une formule) qui est la véritable zone de saisie (la cellule n'étant qu'une espèce de "miroir")
    3) la valeur qu'elle contient est-elle une constante ou est-elle le résultat d'une formule ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Citation Envoyé par unparia Voir le message
    Questions :
    1) as-tu lu ce que je t'ai invité plus haut à lire ?
    2) quel est le format de cette cellule ?
    3) lorsque tu es sur celle cellule : qu'affichent : a) la cellule elle-même et b) la barre de formules
    3) la valeur qu'elle contient est-elle une constante ou est-elle le résultat d'une formule ?
    1) oui je l'ai lu
    2) format date
    3) c'est a) 01/04/2017 b) =DATE(Synthèse!$C$3;CO19;1)
    4)le résultat d'une formule

  11. #11
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour,

    A tester :
    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 BEV(m As Byte)
     
        Dim Cel As Range
        Dim i As Integer, j As Integer
        Dim d As Date
        Dim c As Integer, a As Integer
     
        d = DateSerial(Year(Date), m, 1)
     
        MsgBox d
     
        Set Cel = Sheets("Présence").Rows(18).Find(d, , xlFormulas, xlWhole)
     
        If Not Cel Is Nothing Then c = Cel.Column
     
        MsgBox c
     
    End Sub
    Merci mais je ne trouve toujours pas ma cellule

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    s'agissant du résultat d'une formule qu'on cherche, et non le contenu d'une formule, il faut utiliser le paramètre xlValues en lieu et place de xlFormulas

  13. #13
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    J'ai essayé cela ne fonctionne pas.

    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
    Sub BEV(m As Byte)
     
    Dim i As Integer, j As Integer
    Dim d As Date
    Dim c As Integer, a As Integer
    Dim Rng As Range
     
        d = DateSerial(Year(Date), m, 1)
     
        MsgBox d
     
        Set Rng = Sheets("Présence").Rows(18).Find(d, , xlValues, LookAt:=xlWhole)
     
        If Not Rng Is Nothing Then
            c = Rng.Column
            MsgBox c
        Else
            MsgBox "Nothing"
        End If
     
     
    End Sub

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je n'ai aucun souci dans la configuration que tu as expliqué

    Nom : dvp_97.png
Affichages : 184
Taille : 20,2 Ko


    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
    Sub BEV(m As Byte)
    Dim i As Integer, j As Integer
    Dim d As Date
    Dim c As Integer, a As Integer
    Dim Rng As Range
     
        d = DateSerial(Year(Date), m, 1)
        MsgBox d
        Set Rng = Rows(18).Find(d, , xlValues, LookAt:=xlWhole)
     
        If Not Rng Is Nothing Then
            c = Rng.Column
            MsgBox "La Valeur cherchée est en colonne " & c
        Else
            MsgBox "Nothing"
        End If
    End Sub
     
    Sub ioio()
    BEV (4)
    End Sub

  15. #15
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    je corrige ce que j'ai écrit plus haut l valeur afficher de la cellule est "avril 2017", si je change le format pour que ça apparaisse 01/04/2017 alors ça fonctionne. Comment faire pour que cela fonctionne sans changer le format?

    merci d'avance

Discussions similaires

  1. [XL-2010] Problème avec la méthode Find
    Par bboy-eazy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/12/2016, 15h42
  2. Problème avec la méthode find
    Par Heuvanek dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 29/06/2015, 09h42
  3. problème avec la méthode find et find next
    Par Sylvie66 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2015, 17h33
  4. Problème avec ma méthode Find
    Par cdurep dans le forum Excel
    Réponses: 2
    Dernier message: 04/03/2014, 10h30
  5. [XL-2010] Problème avec la méthode find d'un objet Range dans une zone filtrée
    Par stargates01 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/02/2014, 23h27

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