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 :

UserForm non reconnu / Initialisation Userform / Combobox [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2020
    Messages : 16
    Par défaut UserForm non reconnu / Initialisation Userform / Combobox
    Bonjour à tous,

    Après une journée à essayer de résoudre ce souci, je finis par venir vous demander de l'aide !

    Un premier userform avec 2 boutons propose :
    - Extension --> renvoie à un code qui fonctionne
    - Nouvelle FS --> renvoie à un autre code qui plante

    Lorsque le bouton Nouvelle FS est sélectionné, un second userform (UF_NOUVELLE_GAMME) s'ouvre et demande des valeurs via des "Zones de Texte". Là, pas de souci cela fonctionne toujours.
    Après avoir rempli ces zones de texte, une troisième userform (UF_NOUVELLE_GAMME_EBAUCHE) est sensée s'ouvrir, contenant des Comboboxs. Dès que le code arrive à la ligne où cette Userform est nommée, une erreur apparaît :
    "Erreur d'exécution '91' : Variable objet ou variable de bloc With non définie"
    La 3ème Userform est pourtant déclarée au début, et une initialisation est réalisée ... Je vous joins mes codes, si vous avez des idées...

    Merci !!

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Sub UF_NOUVELLE_FS_Click()
     
    Dim NOUV_REF As String
    Dim NOUV_DESIGNATION As String
    Dim NOUV_INDICE As String
    Dim NOUV_PROFIL As String
    Dim NOUV_NUANCE As String
    Dim UF_NOUVELLE_GAMME_EBAUCHE As UserForm
     
    'Cacher Userform UF_NOUVELLE_FS
        Me.Hide
     
    ' Vider les cases
        UF_NOUVELLE_GAMME.TB_NOUV_REF = ""
        UF_NOUVELLE_GAMME.TB_NOUV_DESIGN = ""
        UF_NOUVELLE_GAMME.TB_NOUV_INDICE = ""
        UF_NOUVELLE_GAMME.TB_NOUV_PROFIL = ""
        UF_NOUVELLE_GAMME.TB_NOUV_NUANCE = ""
     
        UF_NOUVELLE_GAMME.TB_NOUV_DESIGN.SetFocus
        UF_NOUVELLE_GAMME.TB_NOUV_INDICE.SetFocus
        UF_NOUVELLE_GAMME.TB_NOUV_PROFIL.SetFocus
        UF_NOUVELLE_GAMME.TB_NOUV_NUANCE.SetFocus
        UF_NOUVELLE_GAMME.TB_NOUV_REF.SetFocus
     
    'Faire apparaître l'Userform UF_NOUVELLE_GAMME
        UF_NOUVELLE_GAMME.Show
     
        NOUV_REF = CStr(UF_NOUVELLE_GAMME.TB_NOUV_REF.Value)
        NOUV_DESIGNATION = CStr(UF_NOUVELLE_GAMME.TB_NOUV_DESIGN.Value)
        NOUV_INDICE = CStr(UF_NOUVELLE_GAMME.TB_NOUV_INDICE.Value)
        NOUV_PROFIL = CStr(UF_NOUVELLE_GAMME.TB_NOUV_PROFIL.Value)
        NOUV_NUANCE = CStr(UF_NOUVELLE_GAMME.TB_NOUV_NUANCE.Value)
     
    'Convertir en majuscules les valeurs entrées
        NOUV_REF = UCase(NOUV_REF)
        NOUV_DESIGNATION = UCase(NOUV_DESIGNATION)
        NOUV_INDICE = UCase(NOUV_INDICE)
        NOUV_PROFIL = UCase(NOUV_PROFIL)
        NOUV_NUANCE = UCase(NOUV_NUANCE)
     
    'Ouvrir workbook
        Workbooks.Open "C:\2020_donnees.xls"
        Worksheets("donnees").Activate
     
        Set SelectionCell = Application.InputBox(prompt:="Sélectionner la zone pour insérer la nouvelle gamme", Type:=8)
     
    'Insérer 3 lignes vides en dessous d'une référence
        LIGNE = SelectionCell.Row
        Rows(LIGNE).Offset(Rows(LIGNE).Rows.Count + 1, 0).EntireRow.Insert Shift:=xlDown
        Rows(LIGNE).Offset(Rows(LIGNE).Rows.Count + 1, 0).EntireRow.Insert Shift:=xlDown
        Cells(LIGNE, ("A:A")).Select
        ActiveCell.Offset(2, 0).EntireRow.Select
        Selection.Interior.ColorIndex = 4
        NomGamme = InputBox("Entrer le nom de la gamme")
        Cells(ActiveCell.Row, 1).Select
        ActiveCell.Value = NomGamme
        ActiveCell.HorizontalAlignment = xlLeft
        Cells(ActiveCell.Row, 1).Select
        ActiveCell.Offset(Rows(LIGNE).Rows.Count + 1, 0).EntireRow.Insert Shift:=xlDown
        ActiveCell.Offset(Rows(LIGNE).Rows.Count + 1, 0).EntireRow.Insert Shift:=xlDown
     
    'Remplir la ligne en-dessous
        ActiveCell.Offset(1, 0).Activate
        ActiveCell.Value = NOUV_REF
        ActiveCell.Offset(0, 1).Activate
        ActiveCell.Value = NOUV_DESIGNATION
        ActiveCell.Offset(0, 1).Activate
        ActiveCell.Value = NOUV_INDICE
        ActiveCell.Offset(0, 1).Activate
        ActiveCell.Value = NOUV_PROFIL
        ActiveCell.Offset(0, 1).Activate
        ActiveCell.Value = NOUV_NUANCE
     
     
    'EBAUCHE, cela plante à partir de là
     
    ' Vider les cases
        UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_IND_EB = ""
        UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_DATE_EB = ""
        UF_NOUVELLE_GAMME_EBAUCHE.TB_OP10E = ""
     
        UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_IND_EB.SetFocus
        UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_DATE_EB.SetFocus
        UF_NOUVELLE_GAMME_EBAUCHE.TB_OP10E.SetFocus
     
    'Faire apparaître la fenêtre pour demander les valeurs de lancement d'OF
        UF_NOUVELLE_GAMME_EBAUCHE.Show
     
        NOUV_IND_EB = CStr(UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_IND_EB.Value)
        NOUV_DATE_EB = CDate(UF_NOUVELLE_GAMME_EBAUCHE.TB_NOUV_DATE_EB.Value)
        NOUV_OP10E = CStr(UF_NOUVELLE_GAMME_EBAUCHE.TB_OP10E.Value)
     
    End Sub

    L'initialisation de la Combobox "TB_OP10E" est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
     
    Worksheets("OP_SERVICES").Activate
        For i = 2 To 34
            Me.TB_OP10E.AddItem Cells(i, 1)
        Next i
     
    End Sub
    Merci encore pour votre aide !!

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Bonjour lisa,

    C'est un véritable labyrinthe avec tous tes Active.Cells... Je m'y perds complètement !

    De plus, n'hésite pas à utiliser le bloc With pour une meilleure lisibilité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With UF_NOUVELLE_GAMME
        .TB_...
        .TB_...
    End With

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2020
    Messages : 16
    Par défaut
    Merci pour ta réponse !

    Je ne sais pas comment mieux rédiger qu'avec les ActiveCell.. mais cette partie fonctionne, donc ça m'allait même si ce n'est pas franchement joli

    J'ai modifié avec les With et End With, mais à part alléger l'écriture, ça ne fonctionne pas plus

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    En effet, le With est juste là pour alléger l'écriture et permettre de moins se perdre dans le flux de caractères interminable

    Ton UserForm d'Ebauche est-il créé à la base ? Si c'est le cas, tu n'as pas besoin de le déclarer en tant que UserForm non ?

    Sachant que le second Userform que tu utilises n'est pas déclaré et ne semble pas poser problème.

  5. #5
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2020
    Messages : 16
    Par défaut
    Le Userform UF_NOUVELLE_GAMME_EBAUCHE est à la base, avec les autres. Et j'ai enlevé la déclaration en tant que UserForm, ça ne change rien

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Alors là j'en ai aucune idée... Je dois avouer que pour l'instant je me suis restreint à la manipulation d'un unique Userform. Je n'ai donc jamais eu l'occasion d'être confronté à ce genre de problème.

    Je suis avec attention ce sujet en l'attente, comme toi, d'une solution à ce problème

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour lisaw9682

    Ta façon de nommer les variables et les objets est très désagréable à lire.
    Pour faciliter la lecture et la compréhension par tous, je t'invite à lire ces tutos :
    Convention de codage des variables
    Typographie variables VBA

  8. #8
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonsoir a tous.
    Un remerciement pour ce rappel de Patrice740
    Je vais essayer de m'en inspirer autant que faire ce peut.
    Cordialement

  9. #9
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2020
    Messages : 16
    Par défaut
    Bonjour à tous,

    Le SetFocus fonctionne même si l'UserForm n'est pas montré, et comme je disais à Révèr, j'ai déjà enlevé la déclaration de l'UF mais ça ne fonctionne pas plus.
    Merci Patrice pour tes liens. Concernant mon code, tu n'as pas d'idée pour que cela marche ?

    Merci !

  10. #10
    Membre averti
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2020
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2020
    Messages : 16
    Par défaut
    Bonjour le forum,

    J'ai finalement trouvé d'où venait le problème :

    2 classeurs A et B étaient ouverts.
    Les données que j'allais chercher pour l'Userform se trouvaient dans le classeur A, mais c'était le classeur B qui avait été ouvert en dernier et donc qui était actif. L'Userform n'arrivait donc pas à trouver les worksheets que je demandais.

    J'ai du redéfinir le classeur A comme actif.

    En espérant que cela aide des personnes !
    Bonne journée !

  11. #11
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, ravi de voir que vous avez réussi à trouver par vous même le problème.
    cela ne se produirais pas si vous pensiez à mettre la parentalité des données. exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Range("A1").value = 3  ' signifie la valeur de A1 de la page active = 3
        ' voyons voir avec la parentalité :
    Worksheets("Feuil").Range("A1").value = 3 ' indique à excel la valeur de A1 de la page "Feuil1" = 3
        'Vous pouvez aussi écrire cela différemment sans avoir toujours à réecrire 
    With Worksheets("Feuil")
          .Range("A1").value = 3
          .   .........
          .   .........
    End with
    Cordialement

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

Discussions similaires

  1. variable non reconnue dans Userform
    Par MicheldeLyon dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/04/2019, 18h32
  2. [XL-2003] Petite question sur Userform "combobox"
    Par Maiden002 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/10/2009, 13h11
  3. Problème Userform ComboBox
    Par jalseth dans le forum Général VBA
    Réponses: 1
    Dernier message: 03/07/2008, 15h51
  4. lster userform.combobox avec les infos dans un autre classeur
    Par dkmix dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/10/2007, 22h53
  5. Userform non reconnu
    Par Madona dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/09/2007, 09h41

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