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 d'initialisation de userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Problème d'initialisation de userform
    Bonjour à tous et meilleurs vœux

    J'ai un petit soucis.... Je suis débutant et je demande de l'aide....

    J'ai un userform avec ce code pour l'initialiser mais il me mets un message d'erreur comme quoi l'indice ne fait pas parti de la sélection....

    Merci à tous pour vos réponses.

    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
     
    st_nom_vpc.ColumnCount = 4
    lst_nom_vpc.ColumnWidths = "0;50;80;50"
    Dim d As Object, a, Tbl, i%, n%, cd As Boolean
    Set d = CreateObject("Scripting.Dictionary")
    With Worksheets("Données")
    a = .Range("A2:Y" & .[D65000].End(xlUp).Row).Value
    End With
    For i = LBound(a) To UBound(a)
    For n = 1 To 16
    If a(i, n) = "" Then
    cd = True: Exit For
    End If
    Next n
    If a(i, 15) = "" Or a(i, 15) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
    cd = False
    Next i
    n = d.Count
    If n > 1 Then
    Tbl = WorksheetFunction.Transpose(d.items)
    Me.lst_nom_vpc.List = WorksheetFunction.Transpose(Tbl)
    ElseIf n = 1 Then
    Tbl = d.items
    With Me.lst_nom_vpc
    .AddItem Tbl(0)(0)
    For i = 1 To 16
    .List(0, i) = Tbl(0)(i)
    Next i
    End With
    End If
    End Sub

  2. #2
    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
    Je te suggère de bien vouloir modifier on titre (qui ne résume pas la difficulté) et d'indenter ton code. Je le regarderai alors.
    EDIT : tu crois que la modification que tu as faite du titre résume maintenant la difficulté rencontrée ?
    Et tu crois avoir indenté ton code ?

  3. #3
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Titre modifié... par contre je ne maîtrise pas l'indentation du code car cela me mets pleins de message d'erreur à chaque fois que j'essaie....

  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
    Le revoilà, ton code, indenté :
    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
      st_nom_vpc.ColumnCount = 4
      lst_nom_vpc.ColumnWidths = "0;50;80;50"
      Dim d As Object, a, Tbl, i%, n%, cd As Boolean
      Set d = CreateObject("Scripting.Dictionary")
      With Worksheets("Données")
         a = .Range("A2:Y" & .[D65000].End(xlUp).Row).Value
      End With
      For i = LBound(a) To UBound(a)
         For n = 1 To 16
            If a(i, n) = "" Then
                cd = True: Exit For
            End If
         Next n
         If a(i, 15) = "" Or a(i, 15) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
         cd = False
      Next i
      n = d.Count
      If n > 1 Then
         Tbl = WorksheetFunction.Transpose(d.items)
         Me.lst_nom_vpc.List = WorksheetFunction.Transpose(Tbl)
      ElseIf n = 1 Then
         Tbl = d.items
         With Me.lst_nom_vpc
           .AddItem Tbl(0)(0)
           For i = 1 To 16
             .List(0, i) = Tbl(0)(i)
           Next i
        End With
      End If
    End Sub
    Il est maintenant lisible
    on aurait bien aimé pouvoir voir à quel Sub correspond ce End Sub

  5. #5
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Merci pour l'indentation. Effectivement cela fonctionne je viens de le tester dans mon code....

    Ce end sub appartient à la commande : Private sub Userform_Initialize()

  6. #6
    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
    Déjà et pour commencer : à quel moment (quelle ligne de ton code) penses-tu, déjà, avoir abondé ton dictionnaire d ?

  7. #7
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    J'ai pas tout compris, mais je vais essayer de répondre...

    Lorsque je lance l'exécution de mon USERFORM pour vérifier que tout fonctionne, j'ai de suite un msg d'erreur qui m'indique que l'indice ne fais pas parti de la sélection et ne me surligne aucune ligne en particulier.

    Par contre je n'ai pas compris ton histoire de dictionnaire. Si c'est une moquerie, elle doit être trop élevée pour mon niveau intellectuel....

  8. #8
    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
    Par contre je n'ai pas compris ton histoire de dictionnaire. Si c'est une moquerie, elle doit être trop élevée pour mon niveau intellectuel....
    ce n'est pas du tout une moquerie (hélas, dirais-je maintenant) !
    qu'est selon toi ton objet d ?
    Moi, je te laisse maintenant là (pas le courage ni maintenant la volonté de continuer dans de telles "conditions").

  9. #9
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    OK. Merci tout de même pour ton "aide".

    D pour moi correspond à un tableau.

    Je cherche mon erreur mais je ne la trouve pas.....

  10. #10
    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
    D pour moi correspond à un tableau.
    Ah ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set d = CreateObject("Scripting.Dictionary")
    Tu comprendras maintenant (peut-être) pourquoi je te laisse là...

  11. #11
    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,

    un tableau vba issu d'une plage excel est TOUJOURS à 2 dimensions

    voilà pour te donner la première piste

    EDIT : allez, je suis sympa. Intéresse toi à ta ligne 8
    fait un mode pas à pas, et tu verras que c'est cette ligne qui part en erreur

  12. #12
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Je comprends le principe de l'erreur mais je n'arrive pas à la résoudre... surtout que cela fonctionne dans un autre USERFORM pour d'autres données.....

    Voici le code qui fonctionne dans un autre userform
    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
     
    Private Sub UserForm_Initialize()
    lst_nom_vpc.ColumnCount = 4
    lst_nom_vpc.ColumnWidths = "0;50;80;50"
    Dim d As Object, a, Tbl, i%, n%, cd As Boolean
    Set d = CreateObject("Scripting.Dictionary")
    With Worksheets("Données")
       a = .Range("A2:Y" & .[D65000].End(xlUp).Row).Value
    End With
    For i = LBound(a) To UBound(a)
       For n = 17 To 25
         If a(i, n) = "" Then
           cd = True: Exit For
         End If
       Next n
       If a(i, 16) = "" Or (a(i, 16) <> "Manque ancienneté" And cd) Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
         cd = False
    Next i
    n = d.Count
    If n > 1 Then
       Tbl = WorksheetFunction.Transpose(d.items)
       Me.lst_nom_vpc.List = WorksheetFunction.Transpose(Tbl)
    ElseIf n = 1 Then
       Tbl = d.items
       With Me.lst_nom_vpc
         .AddItem Tbl(0)(0)
         For i = 1 To 3
           .List(0, i) = Tbl(0)(i)
         Next i
       End With
    End If
    End Sub

  13. #13
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    Une erreur 9 peut être tout et n'importe quoi.

    il faut que tu fasses le mode pas à pas pour connaitre la ligne exacte provoquant l'erreur

  14. #14
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Bonjour,

    joe.levrai m'indique que c'est la ligne 8 qui pose problème, hors j'ai beau chercher je ne trouve pas....

  15. #15
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    et pour comprendre le pourquoi, il faut que tu fasses le mode pas à pas
    comprends tu le code que tu as posté?

    maintenant fait une sub test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub test
    userform1.show 'userform1 ou celui qui provoque l'erreur
    end sub
    lance ta sub en mode pas à pas via la touche F8
    et dis nous ensuite quand est ce que ca "bug" avec les variables retournées

  16. #16
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Alors j'ai exécuté un sub test

    résultat :

    cela sélectionne la ligne
    - Donnees_pers_manquante.show

    et j'ai une fenêtre qui s'ouvre " l'indice ne fait pas parti de la sélection"
    Erreur d'exécution : '9'

  17. #17
    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,

    il ne faut pas mettre le point d'arrêt sur la ligne qui appelle le Userform
    il faut le mettre sur la première ligne de code de la procédure Initialize du Userform

    car quand un bug survient dans cette procédure évènementielle, le pointeur d'arrêt présentera la ligne d'appel du userform (Userform1.Show) et ne permet pas de savoir où ça a coincé.


    J'ai parlé de la ligne 8 car tu manipules les bornes d'un tableau multidimensionnel, sans préciser la dimension utilisée
    Certes, dans certains cas ça passe (peut-être qu'ici ça passe) .... mais ça peut générer des problématiques ultérieures dans la procédure

    Je n'ai rien testé, j'ai juste lu ta procédure

  18. #18
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    J'ai bien mis le point d'arrêt sur la première ligne....
    Mais il n'y accède pas quand le lance la procédure SUB
    Voici le message :

    Nom : erreur.png
Affichages : 444
Taille : 142,5 Ko

  19. #19
    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
    Après avoir scrupuleusement vérifié que chaque nom d'objet (contrôles, userform etc...) n'ont aucune coquille quand tu les manipules (faute de frappe, changement d'un nom qui n'aurait pas été répercuté dans ton code), afin d'écarter un problème d'appel d'un objet qui n'existe pas (ou plus) ....

    peux-tu copier AU PROPRE ta procédure initialize ?
    car moi je vois pas le "l" du contrôle lst_xxx_xxxx dans les premiers échanges

    et au passage, la procédure complète dans laquelle tu fais un .Show sur le userform

  20. #20
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut
    Pour le "L" J'ai corrigé l'erreur. Il a été effacé lors de l'incrémentation

    Pour l'appel du USERFORM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CommandButton4_Click()
       Donnees_pers_manquante.Show
    End Sub

    Pour l'initialisation du USERFORM
    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
     
    Private Sub UserForm_Initialize()
      lst_nom_vpc.ColumnCount = 4
      lst_nom_vpc.ColumnWidths = "0;50;80;50"
      Dim d As Object, a, Tbl, i%, n%, cd As Boolean
      Set d = CreateObject("Scripting.Dictionary")
      With Worksheets("Données")
         a = .Range("A2:Y" & .[D65000].End(xlUp).Row).Value
      End With
      For i = LBound(a) To UBound(a)
         For n = 1 To 16
            If a(i, n) = "" Then
                cd = True: Exit For
            End If
         Next n
         If a(i, 15) = "" Or a(i, 15) = "" Then d(i) = Array(a(i, 1), a(i, 4), a(i, 5), a(i, 6))
         cd = False
      Next i
      n = d.Count
      If n > 1 Then
         Tbl = WorksheetFunction.Transpose(d.items)
         Me.lst_nom_vpc.List = WorksheetFunction.Transpose(Tbl)
      ElseIf n = 1 Then
         Tbl = d.items
         With Me.lst_nom_vpc
           .AddItem Tbl(0)(0)
           For i = 1 To 16
             .List(0, i) = Tbl(0)(i)
           Next i
        End With
      End If
    End Sub

Discussions similaires

  1. [MySQL] 2 boucles sur une requête, pourquoi ça marche pas?
    Par MisterMacPhisto dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/04/2007, 12h32
  2. Pourquoi ca marche pas :-(
    Par Flushovsky dans le forum Langage
    Réponses: 3
    Dernier message: 20/12/2005, 17h55
  3. Comprends pas pourquoi ca marche pas
    Par cellimo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/11/2005, 22h10
  4. [OLE DB] pourquoi ca marche pas ??
    Par aurel89 dans le forum MFC
    Réponses: 3
    Dernier message: 09/09/2005, 17h23
  5. Accept : pourquoi ça marche pas ?
    Par doudblast dans le forum Linux
    Réponses: 16
    Dernier message: 08/03/2005, 11h48

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