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 :

Utilisation d'objets d'une UserForm [XL-2000]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Brebiou
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 86
    Par défaut Utilisation d'objets d'une UserForm
    Bonjour a tous,

    Voila, j'ai un petit souci, je m'explique:

    J'ai ce bout de code:

    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
     
    Public Sub NouveauPuissanceActiveOK_Click()
    TABPactive(1) = TBPerAcqG1.Text
    TABPactive(2) = TBLimHG1.Text
    TABPactive(3) = TBLimBG1.Text
    TABPactive(4) = TBGradG1.Text
    TABPactive(5) = TBCoefEchG1.Text
    TABPactive(6) = TBTalG1.Text
    TABPactive(7) = TBCoefFiltG1.Text
    TABPactive(8) = TBNbAcqDefG1.Text
    TABPactive(9) = TBAcqAutoDefG1.Text
    TABPactive(10) = TBPerAcqG2.Text
    TABPactive(11) = TBLimHG2.Text
    TABPactive(12) = TBLimBG2.Text
    TABPactive(13) = TBGradG2.Text
    TABPactive(14) = TBCoefEchG2.Text
    TABPactive(15) = TBTalG2.Text
    TABPactive(16) = TBCoefFiltG2.Text
    TABPactive(17) = TBNbAcqDefG2.Text
    TABPactive(18) = TBAcqAutoDefG2.Text
    TABPactive(19) = TBPerAcqG3.Text
    TABPactive(20) = TBLimHG3.Text
    TABPactive(21) = TBLimBG3.Text
    TABPactive(22) = TBGradG3.Text
    TABPactive(23) = TBCoefEchG3.Text
    TABPactive(24) = TBTalG3.Text
    TABPactive(25) = TBCoefFiltG3.Text
    TABPactive(26) = TBNbAcqDefG3.Text
    TABPactive(27) = TBAcqAutoDefG3.Text
    TABPactive(28) = TBPerAcqG4.Text
    TABPactive(29) = TBLimHG4.Text
    TABPactive(30) = TBLimBG4.Text
    TABPactive(31) = TBGradG4.Text
    TABPactive(32) = TBCoefEchG4.Text
    TABPactive(33) = TBTalG4.Text
    TABPactive(34) = TBCoefFiltG4.Text
    TABPactive(35) = TBNbAcqDefG4.Text
    TABPactive(36) = TBAcqAutoDefG4.Text
    TABPactive(37) = TBPerAcqG5.Text
    TABPactive(38) = TBLimHG5.Text
    TABPactive(39) = TBLimBG5.Text
    TABPactive(40) = TBGradG5.Text
    TABPactive(41) = TBCoefEchG5.Text
    TABPactive(42) = TBTalG5.Text
    TABPactive(43) = TBCoefFiltG5.Text
    TABPactive(44) = TBNbAcqDefG5.Text
    TABPactive(45) = TBAcqAutoDefG5.Text
     
    NouveauPuissanceReactive.Show
    Unload Me
     
     
    End Sub
    Vous remarquerez que j'ai écrit cinq fois la même chose, a un détail près

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TABPactive(1) = TBPerAcqG1.Text
    TABPactive(2) = TBLimHG1.Text
    TABPactive(3) = TBLimBG1.Text
    TABPactive(4) = TBGradG1.Text
    TABPactive(5) = TBCoefEchG1.Text
    TABPactive(6) = TBTalG1.Text
    TABPactive(7) = TBCoefFiltG1.Text
    TABPactive(8) = TBNbAcqDefG1.Text
    TABPactive(9) = TBAcqAutoDefG1.Text
    Le "G1" qui devient "G2" et ainsi de suit jusqu'a "G5".

    J'ai essayé pas mal de concatenation et autre, mais rien n'y fait.

    Donc je m'en remet a vous pour savoir s'il est possible de manipuler le nom d'un objet d'une feuille.

    J'aurais juste voulu faire une boucle en changeant la fin du nom, car ceci n'est que 5% du code hyper repetitif que j'ai récupéré et qu'il me faut clarifier.

    J'espère avoir été limpide

    Merci d'avance.

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    A adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestControl()
    Dim OLe As OLEObject
     
    For Each OLe In ActiveSheet.OLEObjects
    If Mid$(OLe.Name, 1, 7) = "TextBox" Then
     
    MsgBox OLe.Name
    End If
    Next
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Par défaut
    Salut,

    Tu as une valeur tabIndex pour chaque champs, c'est ce qui te permet de savoir quel est l'ordre des objets de ta form.

    D'après ce que j'ai vu tu répète 9 fois chaque champs.

    Donc si tu fais un calcul du style (à adapter)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if objet.tabIndex = 0 then
       i = 1
    else
       i = (objet.tabIndex mod 9)+1 
    end if
    ensuite tu créé le nom de ton champ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomChamp = left(objet,len(objet.name)-1) & i
    Je ne sais pas du tout si celà fonctionne c'est à tester.

    Bon courage!

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par aalex_38 Voir le message
    Bonjour,

    A adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TestControl()
    Dim OLe As OLEObject
     
    For Each OLe In ActiveSheet.OLEObjects
    If Mid$(OLe.Name, 1, 7) = "TextBox" Then
     
    MsgBox OLe.Name
    End If
    Next
    End Sub
    Uniquement pour info,
    Cette forme de code est uniquement valable pour des textBox qui se trouve sur une feuille de calcul..
    Et attention, sur un textBox de feuille il n'y a pas la propriété Tag, il faut donc employer une autre solution.
    et il n'est pas nécessaire de tester le nom de cette façon, ont peu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If TypeOf Obj.Object Is MSForms.TextBox Then
        MsgBox OLe.Name
    end if
    A+

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir, tous,

    A brebiou :

    J'ai pour toi une solution amusante et intéressante, n'utilisant pas la propriété tag ni bouclant sur tes contrôles.

    Peux-tu, simplement et pour lever tout doute, me confirmer que le tableau d'accueil est dimensionné à partir de 1 et non 0 (le mieux est que tu nous montres comment tu le déclares et le dimensionnes. <Le reste suivra vite ... )

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    ton problème semble proche de celui-ci, il s'agit de créer une sorte de moteur d'écriture de code

    http://www.developpez.net/forums/d66...isons-boucles/

    cordialement,

    Didier

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Ormonth

    Pas besoin d'une "sorte de moteur d'écriture de code"
    Que Brebiou veuille bien répondre à la question que j'ai posée (à propos de son tableau d'accueil) et on verra ...

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    mettre en manuel lors du design, dans les propiétés Tag..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TBPerAcqG1.Tag = 1
    TBLimHG1.Tag = 2
    TBLimBG1.Tag = 3
    TBGradG1.Tag = 4
    TBCoefEchG1.Tag = 5
    etc... etc.
    et la macros de transcriptions des données pourrait être ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MemoData()
    Dim Cont As Control
    Dim N As Integer
        For Each Cont In Me.Controls
            If TypeOf Cont Is MSForms.TextBox Then
                N = Cont.Object.Tag
                TABPactive(N) = Cont.Object.Text
            End If
        Next Cont
    End Sub
    Il pourait y avoir des textBox qui ne doivent pas êtres pris en compte, alors les mettre avec Tag, par exemple a 99 et mettre une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If N < 99 then
        TABPactive(N) = Cont.Object.Text
    End If
    L'inverse est également possible pour initialiser les textBox.
    A+

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

Discussions similaires

  1. [Flex3] Utiliser un objet depuis une autre page MXML
    Par cairon59 dans le forum MXML
    Réponses: 4
    Dernier message: 11/08/2010, 16h50
  2. Débutant : utiliser des objets d'une dll perso
    Par julien20vt dans le forum ASP.NET
    Réponses: 9
    Dernier message: 28/04/2010, 11h27
  3. utilisation d'objet dans une class
    Par turican2 dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2009, 15h43
  4. Réponses: 12
    Dernier message: 17/01/2008, 11h46
  5. [delphi 5,6,7] utiliser un objet dans une procédure
    Par wizdom dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2006, 15h38

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