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

Excel Discussion :

Erreur de compilation : variable non définie sur un textbox


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Erreur de compilation : variable non définie sur un textbox
    Bonjour à tous,

    Ça fait plusieurs jours que je me casse la tête sur un programme en vba (parce que je suis nouveau...) et après avoir réussi à surmonter de nombreuses épreuves, je reste tout de même coincé sur celle-ci...

    Description de mon classeur :
    il y a 5 colonnes (de A à E) qui partent de la ligne 100 (les précédentes sont figées dans un volet...). J'ai 5 champs de texte permettant de cacher les lignes qui ne contiennent pas le critère de recherche. La recherche se fait par cellule : le champs A cherche le critère dans toutes les cellules de la colonne A et si ne le trouve pas cache la ligne entière.

    Mon problème est le suivant :
    le premier sub (test()) devait permettre de faire des recherches simultanées sur plusieurs colonnes (laisser uniquement les lignes contenant x dans la colonne A et y dans la colonne B par exemple.) Mais je reçois une erreur "424 : Object required". J'ai donc créé un autre sub de test et j'ai mis l'option explicit, mais cela m'indique que TXT_NO_DE_REF.Value est une variable non définie... J'ai bien sûr essayé avec TXT_NO_DE_REF et TXT_NO_DE_REF.Text (c. f. le premier sub) mais rien n'y fait, ce textBox est inatteignable !

    Merci à celui qui m'a lu, bravo à celui qui essaie de m'aider et respect à celui qui trouve la solution...


    Bricomachin


    Mon code :
    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
    'mon problème se situe entre ces deux sub...
    Sub test()
    Dim ligne1 As Long
    ligne1 = 100
    If Not LCase(Range("A" & ligne1).Value) Like "*" & LCase(TXT_NO_DE_REF) & "*" And Not LCase(Range("B" & ligne1).Value) Like "*" & LCase(TXT_DENOM) & "*" And Not LCase(Range("C" & ligne1).Value) Like "*" & LCase(TXT_CARAC) & "*" And Not LCase(Range("D" & ligne1).Value) Like "*" & LCase(TXT_NOM) & "*" And Not LCase(Range("E" & ligne1).Value) Like "*" & LCase(TXT_DATE) & "*" Then
        MsgBox "Ça marche !"
    Else
        MsgBox "Ça marche pas !"
        MsgBox LCase(Range("A" & ligne1).Value) & "   :   " & LCase(TXT_NO_DE_REF.Value) & Chr(13) & LCase(Range("B" & ligne1).Value) & "   :   " & LCase(TXT_DENOM) & Chr(13) & LCase(Range("C" & ligne1).Value) & "   :   " & LCase(TXT_CARAC) & Chr(13) & LCase(Range("D" & ligne1).Value) & "   :   " & LCase(TXT_NOM) & Chr(13) & LCase(Range("E" & ligne1).Value) & "   :   " & LCase(TXT_DATE)
     
    End If
    End Sub
     
    Sub test2()
    If IsNull(TXT_NO_DE_REF.Value) Then
        MsgBox "null"
    ElseIf TXT_NO_DE_REF.Value = "" Then
        MsgBox "vide"
    Else
        MsgBox TXT_NO_DE_REF.Value
    End If
    End Sub
    Mon fichier excel 2010 :
    http://www.mediafire.com/view/?tum066r4zek026c


    .

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,
    Vous écrivez
    J'ai donc créé un autre sub de test et j'ai mis l'option explicit
    ,
    Or dans votre code je ne vois aucune déclaration de variable. Je crois qu'un
    Dim TXT_NO_DE_REF as String
    ferait peut être avancé l'affaire et de même pour toutes les variables utilisées dans le code, elles doivent être déclarées.
    A lire peut être

    http://silkyroad.developpez.com/VBA/LesVariables/

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de votre réponse si rapide...

    J'ai modifié le code comme suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test2()
    Dim TXT_NO_DE_REF As String
    If IsNull(TXT_NO_DE_REF.Value) Then
        MsgBox "null"
    ElseIf TXT_NO_DE_REF.Value = "" Then
        MsgBox "vide"
    Else
        MsgBox TXT_NO_DE_REF.Value
    End If
    End Sub
    (En ajoutant la ligne Dim TXT_NO_DE_REF As String)
    Mais il me lève un exception "Qualificateur incorrect" à la ligne de la déclaration du Sub et me surligne le TXT_NO_DE_REF...

    Le TXT_NO_DE_REF en question est un champ de texte ActiveX que j'ai ajouté à l'aide de l'onglet développeur d'Excel, alors n'est-il pas déja "déclaré" ?

    Je suis vraiment novice dans le domaine, mais je connais le VB.NET alors j'ai réussi à coder mes macros jusque ici. Là où ça coince c'est avec les champs de texte (différence entre .Value et .Text ?, etc...).

    Merci de m'aider,


    Bricomachin

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2009
    Messages
    1 794
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 794
    Points : 3 094
    Points
    3 094
    Par défaut
    Bonjour,
    Voyez avec le lien suivant. Je n'ai pas le temps de voir plus loin pour le moment, car c'est difficile de comprendre ce que vous voulez faire.

    http://cjoint.com/?0DikjLc9sjM

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci de votre réponse.
    En regardant ce que vous aviez modifié je me suis aperçu que vous aviez déclaré les TextBox en temps que string. Malheureusement, cela ne change rien, car je ne peux toujours pas avoir accès à toutes les TextBox.

    Je me demande si ce n'est pas une histoire de focus, car lorsque je teste les ligne au changement de la TextBox avec la première fonction cela marche et cela teste bien le contenu de la TextBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TXT_NO_DE_REF_Change()
        Rechercher "A", TXT_NO_DE_REF.Text
    End Sub
    Mais lorsque je teste ma fonction test(), je ne peux pas avoir accès aux TextBox... Alors je me demande si lorsque j'appuie sur le bouton qui lance test() je perd le focus sur la TextBox et donc je ne peux plus tester son contenu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim ligne1 As Long
    Dim TXT_NO_DE_REF As TextBox, TXT_DENOM As String, TXT_CARAC As String, TXT_NOM As String
    Dim TXT_DATE As String
    ligne1 = 100
    If Not LCase(Range("A" & ligne1).Value) Like "*" & LCase(TXT_NO_DE_REF) & "*" And Not LCase(Range("B" & ligne1).Value) Like "*" & LCase(TXT_DENOM) & "*" And Not LCase(Range("C" & ligne1).Value) Like "*" & LCase(TXT_CARAC) & "*" And Not LCase(Range("D" & ligne1).Value) Like "*" & LCase(TXT_NOM) & "*" And Not LCase(Range("E" & ligne1).Value) Like "*" & LCase(TXT_DATE) & "*" Then
        MsgBox "Ça marche !"
    Else
        MsgBox "Ça marche pas !"
        MsgBox LCase(Range("A" & ligne1).Value) & "   :   " & LCase(TXT_NO_DE_REF.Value) & Chr(13) & LCase(Range("B" & ligne1).Value) & "   :   " & LCase(TXT_DENOM) & Chr(13) & LCase(Range("C" & ligne1).Value) & "   :   " & LCase(TXT_CARAC) & Chr(13) & LCase(Range("D" & ligne1).Value) & "   :   " & LCase(TXT_NOM) & Chr(13) & LCase(Range("E" & ligne1).Value) & "   :   " & LCase(TXT_DATE)
     
    End If
    End Sub
    Donc je pense qu'il faut que je me penche sur cette histoire de focus, mais je n'y connait rien. En fait il me faudrait une propriété (type .Text ou .Value) qui me permette de tester la valeur de la TextBox même sans le focus...

    De plus j'ai remarqué que l'on peut déclarer une variable en temps que TextBox, cela pourrait-il m'aider ? Je ne trouve pas grand chose sur le sujet...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim maVariable as TextBox
    Merci de m'avoir lu,


    Bricomachin

Discussions similaires

  1. [AC-2007] Erreur de compilation: Variable non définie
    Par m1koo dans le forum VBA Access
    Réponses: 7
    Dernier message: 11/01/2014, 18h21
  2. [MySQL] Erreur sur variable non défini - défini
    Par BXDSPORT dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/07/2011, 15h38
  3. Erreur de compilation : Variable non définie
    Par Smallstone dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 12/07/2011, 08h32
  4. erreur compilation: variable non défini
    Par ngouagme dans le forum Langage
    Réponses: 8
    Dernier message: 07/07/2010, 15h38
  5. erreur de compilation variable non defini
    Par nabelou1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/01/2009, 16h43

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