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 :

Erreur d'Exécution 91 liée à une variable pointant dans un TS [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut Erreur d'Exécution 91 liée à une variable pointant dans un TS
    Bonjour le forum,

    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
    24
    25
    26
    Private Sub T_Add_CBSite_Change()
        Private Sub T_Add_CBSite_Change()
        Dim LT As Range
     
        Set WbO = WbT.Sheets(2)
        Set t = WbO.ListObjects("t_cc")
     
        If T_Add_CBSite.Value = "BIC" Then
            T_Add_CBP4.Visible = False
            T_Add_LBP4.Visible = False
            Call T_CBBIC_Init
        Else
            T_Add_CBBIC.Clear
            T_Add_LBBIC.Visible = False
            T_Add_CBBIC.Visible = False
            T_Add_CBP4.Visible = True
            T_Add_LBP4.Visible = True
            Call T_CBP4_Init
            Call T_CBP5_Init
        End If
     
        Set LT = t.DataBodyRange.Find(T_Add_CBSite, lookat:=xlWhole)
     
        T_Add_TBCC.Text = t.DataBodyRange(LT.Row, 2)
    End Sub
    End Sub
    Voici le code posant problème, et la ligne sur laquelle l'erreur est signalée est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_Add_TBCC.Text = t.DataBodyRange(LT.Row, 2)
    Et c'est lié à la variable LT. Toute méthode que j'essaie d'y associer ne fonctionne pas et me génère l'erreur qui suit :

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


    Je précise que cette variable est UNIQUE dans l'entièreté de mon module, et qu'elle est créée uniquement dans cette procédure.

    Les variables WbO et t sont définies en tout début de module après l'Option Explicit.

    Objectif de la procédure ?

    La partie de If à End If ne pose aucun problème, je n'ai pas besoin de m'étaler sur ce sujet étant donné qu'il appelle d'autres procédures, cela serait trop long à expliquer.

    T_Add_CBSite : Il s'agit d'une ComboBox dont la valeur sera utilisée comme objet de recherche. La méthode Find va chercher cette valeur dans un tableau structuré de type...
    T_Add_TBCC : Il s'agit d'une TextBox dans lequel s'inscrira le résultat trouvé dans le tableau

    Site Centre de Coût
    Ville 1 Centre de Coût 1
    Ville 2 Centre de Coût 2

    Ce que j'ai souhaité faire à travers la ligne qui comporte l'erreur, c'est d'attribuer à T_Add_TBCC la valeur correspondant au numéro de ligne associé à la variable LT et au numéro de colonne 2.

    J'espère vous avoir exposé le problème de manière compréhensible !

    Bonne journée,

    Révèr

    PS : Comment vous faites pour "surligner" une ligne ? Je trouve cela plus pratique que de mettre les balises de code pour 1 seule ligne, mais je ne sais pas comment on fait.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    LT est le résultat d'un Find, ce n'est donc une cellule (avec une propriété Row) que si Find a trouvé, sinon c'est Nothing.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Bonjour Patrice,

    Le fait est que dans mon tableau j'ai bien le nom de la ville sélectionné, et qu'il correspond lettre pour lettre à la casse près, au contenu dans la ComboBox. Toutes les villes qui sont listées dans la ComboBox sont listées dans le tableau, sans exception.

    Donc je ne comprends pas pourquoi il ne trouverait pas de cellule correspondante.

    En effet, après avoir effectué le Débogage, je constate effectivement que la variable LT est "Nothing"... Ce que je ne comprends pas du tout !

    Pour résumer, LT doit pointer sur la cellule contenant le nom de la ville qui est inscrit dans la ComboBox, et comme dit ci-dessus, elles y sont toutes renseignées.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par révèr Voir le message
    Donc je ne comprends pas pourquoi il ne trouverait pas de cellule correspondante.
    Et moi je ne comprends pas pourquoi tu n'as pas envisagé que cela puisse se produire !
    En d'autre termes quoi tu n'as pas mis un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not LT Is Nothing Then
    '...
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Je ne veux pas que mon LT puisse être Nothing justement. La donnée qui ressort de la table est primordiale dans mon projet.

    Je n'ai pas mis de test, parce que je ne pensais pas que cela se produirait pour une raison simple : J'ai mis écrit exactement les villes de la même manière. La syntaxe est rigoureusement identique, c'est pour ça que je ne comprends pas qu'il ne trouve aucune correspondance....et donc j'en conclue qu'il y a une erreur quelque part dans mon code. Et j'ai beau me triturer les méninges, chercher des réponses sur internet, je ne trouve toujours pas de solutions actuellement.

    Et c'est pour cela que j'ai posté sur le forum, puisque mes recherches "personnelles" n'ont pas abouti à de résultats concluants.

    L'erreur s'exécute sur la dernière ligne, mais la véritable erreur se situe au niveau du "Set LT" et j'aimerai bien comprendre ce que j'ai loupé dans la rédaction de cette ligne de code.

    t.DataBodyRange correspond à toute la plage de données du tableau (hors en-têtes et lignes de résultat), le Find devrait trouver un résultat identique mais ce n'est pas le cas. C'est bien évidemment une erreur de ma part, mais je n'arrive pas à la corriger.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par révèr Voir le message
    Je n'ai pas mis de test, parce que je ne pensais pas que cela se produirait ...
    En programmation, il n'y aucune bonne raison de croire qu'un évènement imprévu ne se produira pas !
    Ce post ne fait que confirmer cette affirmation.

    Ceci dit ta syntaxe omet la propriété, il faudrait écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set LT = t.DataBodyRange.Find(T_Add_CBSite.Value, lookat:=xlWhole)
    Quand Find ne trouve pas, il faut s'assurer que le type de la variable cherchée est le bon.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Points : 518
    Points
    518
    Par défaut
    Je ferai attention les prochaines fois.

    J'avais en effet omis le ".Value" dans le partage du code. J'avais déjà effectué les 2 tests (avec et sans) et cela ne fonctionne pas plus.

    Nouveautés

    J'ai vérifié avec VarType... Pour T_Add_CBSite.Value c'est bien du type String... mais lorsque je le fais sur WbO.Range("A2").Value j'ai "Empty". La Cellule A2 correspond à la ville qui est saisie dans T_Add_CBSite. Pourtant... C'est bien écrit le nom de la ville dans le tableau, mais c'est considéré comme Empty.

    Nouveautés v2

    J'ai simplement remonté le code avant le IF et...et ça fonctionne parfaitement. Je ferai bien attention à faire mes "Set" au tout début des procédures désormais !

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par révèr Voir le message
    J
    Nouveautés
    J'ai vérifié avec VarType... Pour T_Add_CBSite.Value c'est bien du type String... mais lorsque je le fais sur WbO.Range("A2").Value j'ai "Empty". La Cellule A2 correspond à la ville qui est saisie dans T_Add_CBSite. Pourtant... C'est bien écrit le nom de la ville dans le tableau, mais c'est considéré comme Empty.
    Nouveautés v2
    J'ai simplement remonté le code avant le IF et...et ça fonctionne parfaitement. Je ferai bien attention à faire mes "Set" au tout début des procédures désormais !
    C'est donc qu'entre le nouvel emplacement du Set et l'ancien, ton code effectue une modification de T_Add_CBSite.Value, problablement une des prodédures appelée (call) ou sinon, une procédure évènementielle.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

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

Discussions similaires

  1. [XL-2003] Erreur d'exécution 91 pendant une recherche
    Par martinmacfly dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/12/2009, 18h15
  2. message d'erreur avec la declaration d'une variable
    Par safezahra dans le forum VB.NET
    Réponses: 3
    Dernier message: 13/06/2008, 00h48
  3. Erreur fatale en php liée à une fonction
    Par flex@ dans le forum Langage
    Réponses: 3
    Dernier message: 06/03/2008, 15h42
  4. Réponses: 2
    Dernier message: 23/01/2008, 22h10
  5. Réponses: 2
    Dernier message: 17/07/2007, 14h36

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