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 :

Comprendre la fonction " for each c in controls"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut Comprendre la fonction " for each c in controls"
    rebonjour

    ça fait un bail que je cherche à comprendre ce petit code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim c as controls
    for each c in controls
    pour l'étaler à mes activités.
    j'ecris souvent plus de code et je voudrais maintenant passer à une autre étape de la progession celle de regrouper plusieurs controls dans un seul code. par exemple mettre tous les textbox en majuscules; desactiver et activer plusieurs boutons dans un frame etc...
    ma préoccupation est la suivante: quelqu'un pourrait m'expliquer terre à terre comment procéder avec cette fonction car j'ai écris plusieurs mais au lancement, débogage.

    je voudrais en théorie une petite démarche ou un canevas de comment "débuter" , comment "énoncer" et comment "terminer". j'ai lu plusieurs rubriques pdf, faq, tutos mais je n'arrive toujours pas.
    merci pour votre compréhension

    mieux vaut apprendre à pêcher au près de lui que de demander du poisson à chaque fois car son absence te portera préjudice

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    D'une manière générale, la boucle For Each permet de boucler sur tous les éléments d'une collection.

    Donc, grâce à la tolérance de VBA tu a une collection de contrôles appelée C


    et un contrôle du nom de c qui désigne le contrôle courant dans tous les contrôles de la collection

    Ce qui est juste extrêmement dangereux.

    et heureusement que tu n'as pas


  3. #3
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    je comprends maintenant. il me reste un dernier. meme si la question est un peu idiote j'aimerais connaitre le développement car l'intoduction et la conclusion je les maitrise

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    sans le s non ?
    controls est la collection, dans Dim tu veux le type d'objet.
    eric

  5. #5
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Bonjour,

    sans le s non ?
    controls est la collection, dans Dim tu veux le type d'objet.
    eric
    oui c'est vrai j'ai omis le "s".
    j'ai remarqué que chacun pouvait donner un nom dans la fonction. souvent d'autres mettent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each c in parents.controls
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for each c in userform.controls
    .
    pourquoi est-ce ainsi?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Optionel A:="C", B:= "B",C:= "A"
    Optionel C:="A", B:="B", A:="C"


    C'est la même chose

    A:= c'est le paramètre de la fonction et "A" la valeur


    Optionel C:="La variabe C ", B:="La variable B, ", A:="La variabe A, "

  7. #7
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    mémorisé. merci

    je vais essyer maintenant d'étudier la fonction" for each as controls" en profondeur car ça me rend malade lorsque je dois écrire procédure par procédure pour plusieurs controls

  8. #8
    Invité
    Invité(e)
    Par défaut
    non paramètres facultatif.

    on a A qui par défaut vaut 1, B qui par défaut vaut 2, et c dont on passe "TOTO" en paramètre Optionel C:="TOTO".

    Sub Optionel(Optional A As String = "1", Optional B As String = "2", Optional C As String = "3")
    MsgBox A & B & C
    End Sub

  9. #9
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    non paramètres facultatif.
    c:="A"
    veut dire que A prend la valeur de C . donc si C="B" alors "A"="B". c'est comme ça je vois le truc
    (je voudrais établir une liaison mathématques pour mieux cerner ça)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Si la boucle ce trouve dans un module standard on dira UserForm1 par exemple.

    Si la boucle est dans un UserForm on dira Me.

    Si la boucle est dans une userform mais concerne les contrôles d'une Fram on dira me.fram.controls.

    Parent remonte d'un cran dans la hiérarchie de collection.

    Classeur =sheets(1).parent.name.

  11. #11
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,

    Si la boucle ce trouve dans un module standard on dira UserForm1 par exemple.

    Si la boucle est dans un UserForm on dira Me.

    Si la boucle est dans une userform mais concerne les contrôles d'une Fram on dira me.fram.controls.

    Parent remonte d'un cran dans la hiérarchie de collection.

    Classeur =sheets(1).parent.name.
    super. j'ai enfin compris en plus de cela je ne comprenais pas pourquoi on utilisait le "me.controls" dans les procédures. c'est piger.
    un grand merci à vous et à tous ceux qui m'ont guidés sur la voie.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Code userForm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Cs() As New TheControl
    Private Sub UserForm_Initialize()
    For i = 0 To Me.Controls.Count - 1
    ReDim Preserve Cs(i)
      Cs(i).Objet = Controls(i)
    Next
    For i = 0 To UBound(Cs)
        Debug.Print i, Cs(i).Objet.Name
    Next
    End Sub
    Code module de classe (TheControl) : 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
     
    Private WithEvents Lb As MSForms.Label
    Private WithEvents Tb As MSForms.TextBox
    Private WithEvents Cb As MSForms.ComboBox
    Private WithEvents Ls As MSForms.ListBox
    Private WithEvents Chb As MSForms.CheckBox
    Private WithEvents Gb As MSForms.ToggleButton
    Private WithEvents Fm As MSForms.Frame
    Private WithEvents Cm As MSForms.CommandButton
    Private WithEvents Mp As MSForms.MultiPage
    Private WithEvents Sc As MSForms.ScrollBar
    Private WithEvents Im As MSForms.Image
    Private ctrName As String
    Public Property Let Objet(value As Object)
    ctrName = TypeName(value)
    Select Case ctrName
        Case "Label": Set Lb = value
        Case "TextBox": Set Tb = value
        Case "ComboBox": Set Cb = value
        Case "ListBox": Set Ls = value
        Case "CheckBox": Set Chb = value
        Case "ToggleButton": Set Gb = value
        Case "Frame": Set Fm = value
        Case "CommandButton": Set Cm = value
        Case "MultiPage": Set Mp = value
        Case "ScrollBar": Set Sc = value
        Case "Image": Set Im = value
     End Select
    End Property
    Public Property Get Objet() As Object
    Select Case ctrName
        Case "Label": Set Objet = Lb
        Case "TextBox": Set Objet = Tb
        Case "ComboBox": Set Objet = Cb
        Case "ListBox": Set Objet = Ls
        Case "CheckBox": Set Objet = Chb
        Case "ToggleButton": Set Objet = Gb
        Case "Frame": Set Objet = Fm
        Case "CommandButton": Set Objet = Cm
        Case "MultiPage": Set Objet = Mp
        Case "ScrollBar": Set Objet = Sc
        Case "Image": Set Objet = Im
     End Select
    End Property

  13. #13
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut

    suis soulagé. c'est ce que je cherchais comme demo et comme canevas de code.

  14. #14
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    salut dysorthographie
    j'ai essayé d'ecrire ce petit code dans userform_initialize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Dim txt As TextBox, cmd As CommandButton
     
      For Each txt In page3.Controls
      For Each cmd In Frame3.Controls
      Select Case TypeName(txt)
      Case txt
      If txt.Value <> "" Then
      cmd.Enabled = False
      Else
      cmd.Enabled = True
      End If
      End Select
      Next
      Next
    mais le message affiche :objet requis
    quel est le probleme?

  15. #15
    Invité
    Invité(e)
    Par défaut
    je suis un formulaire! moi.Controls (Me).

    je suis un module de classe Me.
    userform1 est une instance de la classe userform.

    me représente une classe vue de l'intérieur de la classe!

    Code édition d'un UserForm dans notpad : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ERSION 5.00Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} UserForm1 
       Caption         =   "UserForm1"
       ClientHeight    =   5025
       ClientLeft      =   120
       ClientTop       =   465
       ClientWidth     =   5130
       OleObjectBlob   =   "UserForm1.frx":0000
       StartUpPosition =   1  'CenterOwner
    End
    Attribute VB_Name = "UserForm1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Code module de classe : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    VERSION 1.0 CLASSBEGIN
      MultiUse = -1  'True
    END
    Attribute VB_Name = "ADODBRD"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = False
    Attribute VB_Exposed = False
    Dernière modification par Invité ; 06/09/2018 à 09h05.

  16. #16
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    je comprends maintenant.
    une derniere question. que signifie le " := " devant les propriétés

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Code UserForm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Cs() As New TheControl
    Private Sub UserForm_Initialize()
    For i = 0 To Me.Controls.Count - 1
    ReDim Preserve Cs(i)
      Cs(i).Objet = Controls(i)
      If TypeName(Cs(i).Objet) = "CommandButton" Then Cs(i).Objet.Enabled = False
      Next
    End Sub
    Code Module de classe TheControl : 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
     Private WithEvents Lb As MSForms.Label
    Private WithEvents Tb As MSForms.TextBox
    Private WithEvents Cb As MSForms.ComboBox
    Private WithEvents Ls As MSForms.ListBox
    Private WithEvents Chb As MSForms.CheckBox
    Private WithEvents Gb As MSForms.ToggleButton
    Private WithEvents Fm As MSForms.Frame
    Private WithEvents Cm As MSForms.CommandButton
    Private WithEvents Mp As MSForms.MultiPage
    Private WithEvents Sc As MSForms.ScrollBar
    Private WithEvents Im As MSForms.Image
    Private ctrName As String
    Public Property Let Objet(value As Object)
    ctrName = TypeName(value)
    Select Case ctrName
        Case "Label": Set Lb = value
        Case "TextBox": Set Tb = value
        Case "ComboBox": Set Cb = value
        Case "ListBox": Set Ls = value
        Case "CheckBox": Set Chb = value
        Case "ToggleButton": Set Gb = value
        Case "Frame": Set Fm = value
        Case "CommandButton": Set Cm = value
        Case "MultiPage": Set Mp = value
        Case "ScrollBar": Set Sc = value
        Case "Image": Set Im = value
     End Select
    End Property
     
    Public Property Get Objet() As Object
    Select Case ctrName
        Case "Label": Set Objet = Lb
        Case "TextBox": Set Objet = Tb
        Case "ComboBox": Set Objet = Cb
        Case "ListBox": Set Objet = Ls
        Case "CheckBox": Set Objet = Chb
        Case "ToggleButton": Set Objet = Gb
        Case "Frame": Set Objet = Fm
        Case "CommandButton": Set Objet = Cm
        Case "MultiPage": Set Objet = Mp
        Case "ScrollBar": Set Objet = Sc
        Case "Image": Set Objet = Im
     End Select
    End Property
     
    Private Sub Tb_Change()
    Dim Changer As Boolean
    If Trim(Tb.Parent.Name) = "Frame3" Then
        If Trim(Tb.Parent.Parent.Name) = "Page3" Then
     
            For Each txt In Tb.Parent.Controls
            Debug.Print TypeName(txt)
                If TypeName(txt) = "TextBox" Then
                    If txt <> "" Then Changer = True: Exit For
                End If
            Next
            For Each cmd In Tb.Parent.Controls
                If TypeName(cmd) = "CommandButton" Then cmd.Enabled = Changer
            Next
        End If
    End If
    End Sub
    Dernière modification par Invité ; 07/09/2018 à 21h45.

  18. #18
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 617
    Par défaut
    ok.merci. javais relu ton ancien poste mais il manquait le dernier que vous avez ajouté maintenant. je bosse dessus maintenant.

  19. #19
    Invité
    Invité(e)
    Par défaut
    explication par l'absurde!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Optionel
    Optionel "A", "B", "C"
    Optionel C:="A", B:="B", A:="C"
    Optionel C:="TOTO"
    End Sub
     
     
    Sub Optionel(Optional A As String = "1", Optional B As String = "2", Optional C As String = "3")
    MsgBox A & B & C
    End Sub

  20. #20
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Re,

    que signifie le " := " devant les propriétés
    Dit autrement :
    Quand tu passes des paramètres, soit tu les passes tous dans l'ordre jusqu'au dernier qui t'intéresse, soit tu les désignes nommément en passant la valeur avec :=
    eric

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Fonction for each & activecell
    Par jbonneval dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/08/2015, 17h09
  2. [XSLT 1.0] XSLT: utilisation de la fonction position() dans <for-each> imbriqués
    Par bernidupont dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2011, 21h33
  3. Probleme boucle For Each controls
    Par Tusbar dans le forum Windows Forms
    Réponses: 21
    Dernier message: 13/09/2007, 23h56
  4. for-each et traitement alternatif en fonction de la position
    Par Bernard Grosdoy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/09/2005, 17h12
  5. fonction for each key .......
    Par trialrofr dans le forum ASP
    Réponses: 13
    Dernier message: 10/01/2005, 14h29

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