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 :

Remplacer les noms et les sources des contrôles d'un userform [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Remplacer les noms et les sources des contrôles d'un userform
    Bonjour,

    Dans un même classeur, j'ai dupliqué un userform POPO vers TATA
    Pour tous les contrôles de TATA qui ont pour une partie de leur nom POPO, je souhaite
    - remplacer la partie du nom POPO par TATA
    - remplacer la source qui a comme référence une cellule qui a pour nom POPO par une autre cellule qui a pour partie de son nom TATA (j'utilise des noms de cellule pour controlsource)

    Dans un module particulier, j'ai testé ma procédure en 2 fois correspondant aux 2 actions

    Pour le nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Renomme()
    Dim ctrl As Control
    For Each ctrl In TATA.Controls
            If InStr(ctrl.Name, "POPO") <> 0 Then
                        ctrl.Name = Replace(ctrl.Name, "POPO", "TATA")
                        'If TypeName(ctrl) = "TextBox" Then ctrl.ControlSource = Replace(ctrl.ControlSource, "POPO", "TATA")
            End If
    Next ctrl
    End Sub
    Un mesage d'erreur 382 apparaît "Impossible de définir la propriété Name.Impossible de définir la propriété à l'exécution."

    Pour la source :

    Le même code en déplaçant l'indicateur de commentaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'ctrl.Name = Replace(ctrl.Name, "POPO", "TATA")
     If TypeName(ctrl) = "TextBox" Then ctrl.ControlSource = Replace(ctrl.ControlSource, "POPO", "TATA")
    Ici pas de message d'erreur. Mais le code reste sans effet.

    J'ai consulté le tuto de Silkyroad et l'aide en ligne (F1) mais je n'ai pas trouvé d'explication(s).

    Merci pour votre aide

    Marcel.

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

    Un exemple perso pour mettre à jour le controltyptext ( à adapter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' Mise à jour des ControlTiptext
     
    i = 0
    For Each Ctrl In ThisWorkbook.VBProject.VBComponents("Uexp").Designer.Controls
       'NoDeBug Debug.Print Ctrl.Name
       i = i + 1
       Ctrl.ControlTipText = Cells(i, 2)
    Next Ctrl

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut remplacer le nom et la source d'un userform
    Merci aalex,

    Mais je voudrais remplacer le nom d'un contrôle par un autre, et sa source par une autre, et je ne vois pas comment adapter ton code.

    Je pense qu'il faut bien utiliser l'instruction "Replace".
    Les causes d'échec seraient, selon moi, soit la mauvaise utilisation des chaînes de caractères, soit une propriété non ou mal utilisée.

    J'ai cherché.. sans succès.

    Merci.

    Marcel.

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Re,

    Alors puisqu'il faut tout faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub remplace_nom_control()
    For Each ctrl In ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls
    '    MsgBox ctrl.Name
       ctrl.Name = Replace(ctrl.Name, "TATA", "TOTO", 1, -1, vbTextCompare)
    Next ctrl
     
    End Sub
    Nb: A adapter mais moins

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut Syntaxe pour remplacer nom et source de contrôles d'un usf
    Bonjour Aalex, et bonjour le forum

    En fait, je n'avais pas observé la 1ère ligne de ta boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ctrl In ThisWorkbook.VBProject.VBComponents("Userform1").Designer.Controls


    Ta syntaxe fonctionne bien.

    Pour aller plus loin, pourrais-tu me dire pourquoi le balayage des contrôles par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ctrl As Control
    For Each ctrl In Userform1.controls
    fait-il "planter" la procédure.

    1 autre remarque, (si utile)

    Si un message d'erreur survient quant à la fiabilité du programme, alors

    Options\Macro\Sécurité\Editeurs approuvés
    Cocher : "Faire confiance au projet Visual Basic.

    Merci Aalex

    Cordialement.

    Marcel

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Re,

    Il me semble que quand tu boucles sur les controles, VBA charge automatiquement l'USF, tu ne peux donc plus modifier les noms car l'userform est en mémoire.
    Voila pour ce que j'en ai compris, d'autres on peut être une explication plus claire

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/03/2010, 15h51
  2. Réponses: 13
    Dernier message: 22/04/2009, 16h43
  3. Créer une table dont les noms de colonnes sont des paramètres
    Par Mythrandil dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/09/2007, 15h08
  4. Réponses: 1
    Dernier message: 14/06/2007, 21h37

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