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 :

[VBA_E] problème avec la propriété SelectedItem


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut [VBA_E] problème avec la propriété SelectedItem
    Bonjour,
    je dispose d'une userform sur laquelle ul y a un objet multipage dans lequel il y a un autre objet multipage. jusque la j'espère que je suis claire.les données que je rentre dans ma userform sont renvoyées dans une feuille excel nommée bdd1. ces données sont chargée dans ma userform quand on l'ouvre. le problème c'est que ma userform ne charge que les données du premier onglet et du premier sous onglet des multipages.
    Je mets un bout de code pour que ce soit un peu plus clair

    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
    Private Sub base_change()
    If Controle_Donnees(CurrentPanelNo) = False Then Exit Sub
    If Not (PremiereOuverture) Then Sauvegarde (CurrentPanelNo) Else PremiereOuverture = False
    CurrentPanelNo = base.SelectedItem.Index ' le problème est ici
    With BDD1
    CurrentPanelNo = base.SelectedItem.Index
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    j = v
    If CurrentPanelNo = 0 Then
        If v = 0 Then
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
            Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, 10 + j)
    ...
    Comment faire en sorte que tous les onglets soient selectionnées et pas seulement le premier.
    Si vous avez des questions y a pas de problème.
    Merci beaucoup
    Amélie


    Petite précision : dans ma userform il y a 3 onglets. chaque onglet a lui même 3 onglets et dans chacun d'entre eux il y a environ 30 textBox à renseigner

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    bonjour amélie
    ton probleme est la ou tu dis, mais juste parce que tu l'as mis là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Controle_Donnees(CurrentPanelNo) = False Then Exit Sub
    If Not (PremiereOuverture) Then Sauvegarde (CurrentPanelNo) Else PremiereOuverture = False
    CurrentPanelNo = base.SelectedItem.Index ' le problème est ici
    tu le teste avant de le définir
    essaye plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CurrentPanelNo = base.SelectedItem.Index
    If Controle_Donnees(CurrentPanelNo) = False Then Exit Sub
    If Not (PremiereOuverture) Then Sauvegarde (CurrentPanelNo) Else PremiereOuverture = False

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    j'ai fait ce que tu m'as dit. pour ce qui est d'envoyer les données dans ma feuille tout va bien. mais, il y a toujours un mais ca devient enervant, quand je relance ma userform les données du premier onglet apparaissent mais pas ceux du 2ème.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    oui, mais là, je commence a avoir du mal a te suivre.
    les données du premier onglet apparaissent mais pas ceux du 2ème
    je ne vois pas de quelle données tu parles. j'ai bien ton fichier, mais a aucun moment tu n'envoie de données vers la userform. ou alors joint la derniere mouture de ton fichier

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut [VBA_E] dernière version du fichier
    Voici la dernière version du fichier.
    Pièce jointe 11963
    Ce que je voulais dire c'est que s'il y a des données préalablement enregistrées dans la feuille excel quand je lance la userform les données du premier onglet apparaissent et quand je clique sur le deuxième onglet il n'y en a aucune.
    Merci de ton aide.
    Amélie

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut Re
    Re-bonjour

    J'ai essayé avec les select case comme tu me l'avais montré Alsimbad mais le problème est toujours le même. J'ai testé mon code pas à pas avec F8 et en fait il passe sur toutes les lignes de case "X" et ensuite ca va directement à End Select sans passer par les autres lignes:

    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
     
    Private Sub base_change()
    If Controle_Donnees(CurrentPanelNo) = False Then Exit Sub
    If Not (PremiereOuverture) Then Sauvegarde (CurrentPanelNo) Else PremiereOuverture = False
    CurrentPanelNo = base.SelectedItem.Index
    With BDD1
    Select Case base.SelectedItem.Index
        Case 0
        Select Case moiA.SelectedItem.Name
            Case "X":
            j = 0
            v = 0
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
            .....
     
            Case "Y":
            j = 1
            v = 1
           Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
            .....
       End Select
    ....
    J'arrive pas à trouver d'ou ca peut bloquer. Si quelqu'un y voit plus clair que moi n'hésitez pas.

    Amélie

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    ben c'est a dire ....
    primo, laisse moi le temps d'y voir clair
    secundo quand tu dis
    comme tu me l'avais montré Alsimbad
    tu a apliqué la moitié de ce que je t'ai dis, donc effectivement, il t a encore du travail
    tercio. essaie de mieux comprendre ce que tu veux obtenir et comment l'obtenir pour essayer de faire un travail plus global
    un exemple: quand tu écris
    With BDD1
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    j = v
    If CurrentPanelNo = 0 Then
    If v = 0 Then
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
    Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, 10 + j)
    ' etc etc
    If v = 1 Then
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
    Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, 10 + j)
    'etc etc
    If v = 2 Then
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, 7 + j)
    Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, 10 + j)
    ' etc etc
    end if
    end if
    end if
    essayons d'y voir clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    j = v
    réponse :si V = J autant utiliser v

    et quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If v = 0 Then
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
     If v = 1 Then
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    tu aurais pu écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    pour le cas ou v = 0 tu aurais obtenu pour un currentpanelno de 1
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, 4 + j)
    soit : controls(PR100) = cells date1row,4)
    et pour le cas ou v = 1 tu aurais bien obtenu
    controls(PR110) = cells date1row,4)
    donc tes trois boucles ne servent a rien
    mais en plus en mettant les end if a la fin, tu n'a pas fais trois boucle mais une seule
    si ...... alors
    ___si .......alors
    ______si .......alors
    ______fin si
    ___fin si
    fin si
    ce qui est diferrend de
    si ...... alors
    fin si
    si .......alors
    fin si
    si .......alors
    fin si
    Bon travaille déja avec ça, je jette un oeil cet aprem, mais ça devrais déja résoudre une partie de ton probleme
    petit rajout
    passe sur toutes les lignes de case "X" et ensuite ca va directement à End Select sans passer par les autres lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    selon le cas de X
    case X = ceci
    case X = cela
    fin selon
    si X est égal a ceci le programme n'a aucune raison de passer par cela

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    c'est bon, j'ai réussi en faisant ca:
    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
     
    Private Sub base_change()
    If Controle_Donnees(CurrentPanelNo) = False Then Exit Sub
    If Not (PremiereOuverture) Then Sauvegarde (CurrentPanelNo) Else PremiereOuverture = False
    CurrentPanelNo = base.SelectedItem.Index
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    j = v
    With BDD1
    For v = 0 To 2
        If CurrentPanelNo = 0 Then
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, (4 + v))
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, (7 + v))
            Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, (10 + v))
            .......
        End If
    Next
    End With
    End Sub
    Il me reste plus qu'à adapter ca à tous mes onglets ce qui va être plus simple maintenant que ca fonctionne pour un.
    Merci de l'aide apportée.
    Amélie

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    mort de rire, tu es tétue, je vais t'expliquer. je parie que tu es bélier, du genre qui fonce tête baissée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For v = 0 To 2
        If CurrentPanelNo = 0 Then
            Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, (4 + v))
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, (7 + v))
            Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, (10 + v))
            .......
        End If
    Next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pour v = 0 a 2
     si v = 0 alors
        msgbox "v = 0"
      end if
    next v
    c'est la boucle que tu as écris. en français tu vois bien que pour v = 1 et pour v = 2, il n'y a aucune raison que le message apparraisse. tandis que si tu écris, sans faire de boucle ni de condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    v = CurrentPanelNo
    msgbox v
    quelquesoit la valeur de v, tu aura un message qui te dira combien vaut v
    dans ton code, cela n'a aucun sens
    CurrentPanelNo est le n° de feuille de ta mutltipage de base
    et v est le n° de feuille de la multipage qui est sur cette feuille
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    donc tu n'as pas besoin de boucle, le programme sait quelles sont les feuilles selectionnées
    tu n'as qu'a lui indiquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurrentPanelNo = base.selecteditem.index
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    Controls("PR" & CurrentPanelNo & v & "0") = .Cells(Date1Row, (4 + v))
            Controls("PR" & CurrentPanelNo & v & "1") = .Cells(Date1Row, (7 + v))
            Controls("PR" & CurrentPanelNo & v & "2") = .Cells(Date1Row, (10 + v))

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    Bon, je te joins ton fichier que j'ai modifié. je t'ai annoté toutes les erreurs que tu a commises, pourquoi et comment. j'ai fais la macro d'initialisation et avec les explications, tu devrais arriver a faire le reste.
    renvoie moi le résultat, je te dirais
    n'hésite pas si tu as besoin d'aide
    Alain

  11. #11
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Pièce jointe 12082
    C'est bon grâce à ce que tu m'as dit tout à l'air de fonctionner. J'ai appliqué le code à toutes mes userform. J'ai retiré la fonction control des données, c'est vrai qu'en fait elle ne sert pas à grand chose.
    Les userforms se chargent plus vite ce qui est tres agréable.
    Merci beaucoup de m'avoir aidé.
    Amélie


    Au fait, je suis pas bélier, je suis balance.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    bon, c'est pas mal là. juste une chose. je ne sais pas comment tu fabrique ton bouton. tu as vu les miens sur le fichier que je t'ai renvoyé, si tu clique droit, tu as une action, les tiens, je ne peux ni les selectionner, ni les modifier, ni voir quelle macro leur est affecté. par quel manip tu les fais?

  13. #13
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    je crée mes bouton à partir du mode création dans excel. J'ai fait affichage/barre d'outils/boite à outil controles et j'ai mis un bouton comme sur les userforms. Par contre j'ai un souci avec la sauvegarde parce que j'y avais pas pensé mais le troisième onglet de "relation assurés" n'a pas de sous onglets donc quand j'ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index
    eh bien ca bloque parce que l'onglet fait partie de base et non de "moi"&base d'ou le problème.
    est ce que je devrais mettre un if pour le cas precis du troisième onglet ou est ce qu'il y a quelque chose de plus simple à faire?
    Merci encore

  14. #14
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Re
    En fait pour résoudre le problème (enfin je l'ai plutot contourné), j'ai crée une autre multipage dans mon troisième ongletdonc plus de message d'erreur ca charge et ca enregistre tres bien.
    Bye

  15. #15
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    non, je vois pas de raison que ça bloque
    quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v = Controls("moi" & base.SelectedItem.Name).SelectedItem.Index,
    tu donne juste une valeur a v (ici ce sera 2) et tu le fais en disant
    a to de gérer les limites de tes boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For v = 0 To 2
        j = v
            If CurrentPanelNo = 1 Then j = v + 106
    autre chose quand je t'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If CurrentPanelNo = 2 Then
        Controls("PR" & CurrentPanelNo & "0") = .Cells(Date1Row, 192)
        Controls("PR" & CurrentPanelNo & "1") = .Cells(Date1Row, 193)
        Controls("PR" & CurrentPanelNo & "2") = .Cells(Date1Row, 194)
        Controls("PR" & CurrentPanelNo & "3") = .Cells(Date1Row, 195)
    End If
    c'est une condition, je serais curieux de savoir pourquoi tu traduis dans la deuxieme procedure par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For CurrentPanelNo = 2 To 2
        .Cells(Date1Row, 192) = Controls("PR" & CurrentPanelNo & "0")
        .Cells(Date1Row, 193) = Controls("PR" & CurrentPanelNo & "1")
        .Cells(Date1Row, 194) = Controls("PR" & CurrentPanelNo & "2")
        .Cells(Date1Row, 195) = Controls("PR" & CurrentPanelNo & "3")
    Next CurrentPanelNo
    la ce n'et plus une condition, c'est une boucle. bien sur dans cette procedure, elle fonctionne, mais si tu ne comprend pas la diference, tu ne vas pas arriver a faire un deuxieme code sans aide

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 22/10/2007, 15h47
  2. Problème avec la propriété filter
    Par Morgoth818 dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2007, 21h20
  3. Problème avec la propriété "Filter" de mes DBLookupComboBox
    Par CleeM dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/06/2007, 13h53
  4. problème avec la propriété rendered
    Par gaet_045 dans le forum JSF
    Réponses: 9
    Dernier message: 06/06/2007, 09h28
  5. [Delphi 6] Problème avec la propriété Text d'un composant
    Par bionoir dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/12/2005, 11h23

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