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 :

assigner une action à plusieurs multipages [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    paysan developpeur debutant mais ... têtu
    Inscrit en
    Février 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : paysan developpeur debutant mais ... têtu

    Informations forums :
    Inscription : Février 2011
    Messages : 84
    Par défaut assigner une action à plusieurs multipages
    Bonjour à toutes et à tous.
    Ces jours ci Joe Levray (gloire à lui !) m'a bcp aidé sur une boucle for each immbriquée.
    Aujourd'hui je remonte d'un cran et je seche aussi lamentablement
    Sur un usf il y a (entre autres) 3 multipages de 3 pages chacun avec un nombre variable de textboxes dans chaque pages.
    Je desire sur un evenement(click) associer une action à ces 3 multipages.
    J'ai essayé bcp de combinaisons mais peine perdue
    La compilation ne trouve rien à redire mais à l'execution ce n'est plus la meme chanson !
    Qqun pourrait-il m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub affich_page()
     
    Dim mpp As MSForms.Pages
    dim mp as MSForms.Pages
     
     
    'With usf4
    For Each mp In .Controls (? je n'ai trouvé rien de mieux, j'ai essayé . multipage(s) c'est pas reconnu)
     MsgBox mp.Name (c'est un essai pour tester)
       'ici j'aimerai mettre mp.value = 0 apres un if
     Next mp
     End With
    end sub
    Il ya une erreur ligne 8 quelque soit la propriete que je mette après le point (controls,multipages,pages).
    J'ai essayé de créer une collection mais même punition.
    Où est ce que je me gourre ?
    Merci déjà ...

  2. #2
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour,

    il y a incohérence entre la déclaration de variable et la boucle

    si tu fais le tour des contrôles du formulaire à l'ai de la variable mp, la déclaration devrait être
    dim mp as control

  3. #3
    Membre confirmé
    Homme Profil pro
    paysan developpeur debutant mais ... têtu
    Inscrit en
    Février 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : paysan developpeur debutant mais ... têtu

    Informations forums :
    Inscription : Février 2011
    Messages : 84
    Par défaut
    Merci Ebrag pour ta velocité
    en fait sur mon code j'avais dimensionné mp comme msforms.multipage.
    J'ai changé et ca marche !!!
    MAIS MAIS j'ai rajouté une ligne pour mettre la valeur de mes multipages à zero
    et maintenant j'ai une erreur 380 " impossible de définir la propriete Value.Valeur de propriete non valide"
    Ca veut dire que c'est pas possible ou alors faut trouver une astuce ?
    En attendant encore merci pour ton aide.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pour boucler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Ctl As Control
    Dim i As Integer
     
    With Me
        For Each Ctl In .Controls
            If TypeOf Ctl Is MultiPage Then
                For i = 0 To Ctl.Pages.Count - 1
                    Debug.Print Ctl.Pages(i).Name
                Next
            End If
        Next Ctl
    End With
    Par contre, lorsque je lis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim mp as MSForms.Pages
    'ici j'aimerai mettre mp.value = 0 apres un if
    ça me fait penser que soit:
    1. tu n'as pas du regarder les propriétés des Pages,
    2. tu veux changer la Value de tes textbox et donc ta déclaration Dim mp n'est pas bonne...


    Si, toutefois (comme je le suppute), tu cherches à "vider" tous les textbox contenus dans les multipages et Uniquement ceux là (si tu en as d'autres dans l'usf que tu ne veux pas toucher) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Ctl As Control
     
    With Me
        For Each Ctl In .Controls
            If TypeOf Ctl Is MSForms.TextBox Then
                If TypeOf Ctl.Parent Is MSForms.Page Then
                    Debug.Print Ctl.Name & " est dans : " & Ctl.Parent.Name
                    'Ctl.Value = ""
                End If
            End If
        Next Ctl
    End With

  5. #5
    Membre confirmé
    Homme Profil pro
    paysan developpeur debutant mais ... têtu
    Inscrit en
    Février 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : paysan developpeur debutant mais ... têtu

    Informations forums :
    Inscription : Février 2011
    Messages : 84
    Par défaut
    merci a toi aussi franck
    je viens de refaire mon code avec le if type of et je peux mettre la value à 0.
    Pour le dimensionnement c'était une erreur de retranscription, j'avais bien mis dim as multipage.
    Alors voici ma question collaterale :
    En faisant le debug pas à pas je me suis apercu que la boucle faisait le tour de tous les controles . Normal avec la dim de mp.
    Ne peut on pas raccourcir et mettre une dim as multipage ?

  6. #6
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Re,

    Ma façon de voir les choses, quand on veut faire simple et pas obligatoirement concis, c'est d'avoir une approche logique différente.

    je renomme chacun des objets selon une convention (MultiPage MultPxxxx, page en Pagexxxx, TextBoxes en TBxxxx etc....)

    en faisant cela, on peut arriver à un code de ce type...
    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
    Private Sub CommandButton1_Click()
    Dim oControlMP As Control
    Dim oControlP As Control
    Dim oControl As Control
    Dim i As Long
     
    For Each oControlMP In Me.Controls
      If VBA.Left(VBA.LCase(oControlMP.Name), 6) = "multip" Then
        For i = 0 To oControlMP.Count - 1
          For Each oControlP In oControlMP(i).Controls
            MsgBox oControlMP.Name & " - page " & i + 1 & " - " & oControlP.Name
          Next
        Next
      End If
    Next
    End Sub
    après, à chacun sa façon de voir les choses

  7. #7
    Membre confirmé
    Homme Profil pro
    paysan developpeur debutant mais ... têtu
    Inscrit en
    Février 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : paysan developpeur debutant mais ... têtu

    Informations forums :
    Inscription : Février 2011
    Messages : 84
    Par défaut Tout est dans la nuance
    effectivement la 1ere ligne me suffit largement !
    La concision n'est pas toujours à rechercher vu le temps que j'y ai déjà passé ce matin.
    L'avantage c'est que j'ai appris kekchoz.

    Encore un grand merci à vous.

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

Discussions similaires

  1. [XL-2007] Répéter une action plusieurs fois
    Par Guiggs dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/07/2013, 18h25
  2. Assigner une action à un bouton aléatoire
    Par alex777771 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 09/02/2012, 16h35
  3. executer une action plusieurs fois
    Par s-ehtp dans le forum Struts 1
    Réponses: 3
    Dernier message: 25/08/2009, 13h42
  4. Assigner une action à un QStandardItem?
    Par maroua_mm dans le forum Qt
    Réponses: 5
    Dernier message: 12/08/2009, 14h03
  5. [VB6] Assigner une action à une région de la Form
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/05/2006, 11h51

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