Changer la couleur de fond de labels groupés

Bonsoir,

J’ai un formulaire avec plusieurs labels (plus de 10). Je veux tous les attribuer une même couleur. Tout ce passe bien lorsque je code chacune à …Initialize()

With UserForm1
.Label24.BackColor = RGB(0, 255, 255)
.Label2.BackColor = RGB(0, 255, 255)
End With

Étant donné que j’en ai plusieurs, existe-t-il une approche globale? J’ai trouvé et testé le code ci-après : > UserForm1.Controls(« Label »).BackColor = RGB(0, 255, 255)

Vba Excel me renvoie le message suivant :

img

Merci d’avance pour l’aide,

Bonjour,

Si tous les Labels n’ont pas été renommé (Name pas le Caption)

Private Sub Userform_Initialize()
    Call ColorLBL
End Sub

Private Sub ColorLBL()
    Dim Ctrl As Object
    For Each Ctrl In Me.Controls 'Boucle sur tout les contrôles de l'userform
        If TypeOf Ctrl Is MSForms.Label Then 'Si le control est un label
            If InStr(1, Ctrl.Name, "Label") > 0 Then 'Si le name de ce label contient "Label" alors
                Ctrl.BackColor = RGB(0, 255, 255) 'On colorie le texte du label en bleu
            End If
        End If
    Next Ctrl
End Sub

Bonjour Mimimathy,

Merci pour ta réponse.
Mais, il semble que je ne sais pas où mettre exactement ton code. C’est pourquoi il ne fonctionne pas. Peux-tu me le placer au bon endroit?
Merci d’avance,

Ci-joint mon fichierProjetRod v.5.xlsm (42,9 Ko)

[quote=« Mimimathy, post:2, topic:6737 »]

Re
A tester
Mais si c’était pour les mettre tous à la même couleur, je ne vois pas trop l’interêt
ProjetRod v.5.xlsm (43,5 Ko)

Bonjour
Ton fichier avec la proposition de Mimimathy mise en place dans le Userform1_initialise
Je pense que cela devrait le faire
Dis moi

ProjetRod v.5.xlsm (41,3 Ko)

Désolé je crois que j’ai fais doublon
Mille excuses !!!

Super :ok_hand: Mimimathy!
Oui, tu as raison. En fait, l’intérêt est de donner un peu de vie à mon userform. Aussi, ce cas concret de userform, me pousse à apprendre le VBA / Excel avec ton aide.

Pas bien grave FFO,
Pour moi, les petites différences de ton style de programmation avec celui de Mimimathy sont enrichissantes et les bienvenues :clap:. J’évolue tout doucement.

Merci
Mais il n est pour moi pas de très bon ton de venir interférer à un échange établit juste à la limite apporter une petite contribution
Sans réponse j ai cru bien faire de venir parfaire la proposition de Mimimathy en te permettant de la rendre opérationnelle
Nous avons posté nos derniers messages en même temps mais la sienne était plus légitime
Je suis désolé je voulais bien faire
Je rajoute que je partage son avis
Pourquoi alourdir une procédure d initialisation utilisée à chaque ouverture du formulaire et d un certain nombre de ses traitements par une procédure qui vise à mettre en place sa présentation à réaliser une seule fois celle ci une fois faite n a plus de raison d être renouvelée car définitive
Je pense que ce traitement pouvait être réalisé manuellement une seule fois ou de manière automatique avec ce code non pas dans l initialisation du formulaire pour ne pas l encombrer mais dans une macro ordinaire
Je l ai d ailleurs essayé avec succès
Donc à mon sens il serait mieux d alléger le formulaire de ce code inutile à son fonctionnement simplement nécessaire à sa confection

Un avis qui ne tient qu à moi

Aaah, tu as été plus clair. En fait, je n’avais pas bien compris la préoccupation sur l’initialisation (trop technique pour moi). Alors ma question est : as-tu pris cela en compte dans ton dernier fichier envoyé ? Si non, dans l’attente.

Actuellement, je suis justement en train de travailler sur l’optimisation de ce formulaire. Merci de veiller à mes éventuelles fautes de débutant.

…j’aimerai aussi avoir un peu de contrôle de saisie au niveau du userform. Je propose que l’utilisateur écrive à :

  • Date et Date de naissance : 15/10/2020 ou 3/4/2020 ;
  • Durée de séjour : que le chiffre saisi soit centré dans le textbox…

Tu peux aussi me proposer d’autres types de contrôle que les miens. L’idée est que le contenu de l’onglet DONNEES soit directement exploitable (sans autres formes de traitements) en terme de statistiques avec des TCD et des Graphiques.

Merci d’avance,

Non ma dernière proposition c’est borné à faire fonctionner dans la sub d’initialisation la proposition de Mimimathy
Mais puisque tu me le demandes je supprimerai toutes les lignes qui concerne la mise en place de la présentation car une fois en place elle ne bouge plus donc elles deviennent inutiles
Si la présentation du userforme te conviens supprimes donc ces lignes de la Sub Userform_Initialize() qui l’encombrent puis rajoutes les en l’état dans la macro pour ouvrir le formulaire « Thisworkbook » elles sufisent à ce niveau amplement :

With UserForm1
.BackColor = RGB(210, 62, 170) 'Couleur pr?cedente du formulaire = 174, 240, 194)
.Height = 530 'Hauteur pr?c?dente = 531
.Width = 1025 'Largeur avant = 1025,25)
.Zoom = 110 'Grossissement pr?c?dent = 100
'UserForm1.Label24.BackColor = RGB(0, 255, 255) = Color un label
End With
For Each Ctrl In UserForm1.Controls 'Boucle sur tout les contr?les de l’userform
If TypeOf Ctrl Is MSForms.Label Then 'Si le control est un label
If InStr(1, Ctrl.Name, « Label ») > 0 Then 'Si le name de ce label contient « Label » alors
Ctrl.BackColor = RGB(0, 255, 255) 'On colorie le texte du label en bleu
End If
End If
Next Ctrl

Ci-joint ta dernière version adaptée ainsi
ProjetRod v.5.xlsm (42,0 Ko)

Merci pour cette optimisation…

Les contrôles sont directement liées au contexte d exploitation à ses exigences en terme de données et de format
Très difficile pour moi ne le connaissant pas de te proposer telle ou telle modification ou exigences à respecter
Tu es mieux placer que moi pour les établir
A toi de nous dire les adaptions à mettre en place pour obtenir un résultat adapté aux nécessités du résultat
Déjà ces 2 demandes :

Date et Date de naissance : 15/10/2020 ou 3/4/2020 ;
Est ce un format obligatoire à respecter?
Si oui un message d alerte pour son non respect peut être mis en place le tout est de savoir à quel niveau

Durée de séjour : que le chiffre saisi soit centré dans le textbox…
Paramétrage du texbox à modifier

Donnes nous donc des précisions sur les évolutions à effectuer

Re,

Une petite réduction de l’initialize avec la définition des noms,
ainsi que pour le changement du ComboBox 1
ProjetRod v.5.xlsm (42,4 Ko)

Ok.

L’idée est de faciliter l’utilisateur l’écriture des Dates et Date de naissance pour que je n’ai pas à les reformater dans DONNEES pour uniformiser les statistiques et surtout ne pas les fausser.

Le format obligatoire à respecter : jj-mmm-aa (personnalisé dans Excel)…
Ne pas hésiter en cas de questions

Au sujet de initialize… j’ai constaté qu’à la réinitialisation du formulaire, les couleurs changent (redeviennent basiques). Une question pour mieux comprendre : est-ce (normal) en accord avec la nécessité d’allègement discuté? Si non, merci de mettre à jour.

Effectivement à la reinitialisation il faut derrière le bouton rajouter ces mêmes lignes de mise en forme
Pour le format des dates je rajoute les instructions à cette fin derrière le bouton « ENREGISTRER » ainsi quelque soit le format saisi il sera mis au format souhaité dans l onglet « DONNEES »

Des demain je te transmet ces adaptations

Ok. Merci. Une autre idée pratique pour les meilleures conditions d’utilisation. j’aimerai que tu rajoutes ce qui suit :

  • A l’ouverture de l’USF --> un Mot de Passe (toto) est demandé à l’utilisateur
  • Depuis l’USF, clic sur le bouton QUITTER --> enregistre et ferme le classeur (tout Excel). Je me retrouve à la case départ.
  • L’accès aux onglets DONNEES, STATS et LISTE soit protégé par Mot de Passe (dupont)

Sachant que je reste ouvert aux propositions, à demain et merci pour tout.

Bonjour
Ci-joint ton fichier avec les évolutions suivantes :
Mis en place de 2 onglets supplémentaires
Onglet « CONNEXION » qui est le seul onglet visible à l’ouverture du classeur tous les autres sont cachés
Onglet « MOT DE PASSE » dans lequel en A2 figure le mot de passe pour afficher le formulaire en B2 pour afficher le formulaire et tous les onglets
Agir à ce niveau pour les modifier

A l’ouverture du classeur seul l’onglet « CONNEXION » est affiché et une boîte de dialogue demande la saisie d’un mot de passe
Celui-ci est celui de l’affichage du formulaire uniquement il s’affiche en plein écran pour permettre la saisie
On doit le quitter par un bouton « QUITTER » qui le ferme et affiche la boîte de dialogue du mot de passe
Il est possible de fermer le formulaire par sa croix en haut à droite mais cette action remet uniquement l’utilisateur sur l’onglet « CONNECTION » le seul accessible
Un bouton « Connexion » dans cet onglet permet le réenclenchement de la procédure initiale

Si le mot de passe saisie est celui du classeur tous les onglets de celui-ci sont rendus accessibles et le formulaire s’affiche plein écran
Pour revenir aux onglets du classeur il faut cliquer sur la croix du formulaire en haut à droite et non pas sur le bouton « QUITTER » qui remettrait le classeur dans son état initial (seul l’onglet « CONNEXION » accessible) avec boîte de dialogue du mot de passe

Si le mot de passe est erroné un message d’alerte est donné avec information de la fermeture du classeur
Après validation de ce message fermeture sans enregistrement du classeur

J’ai rajouté le contrôle du format des dates saisies qui doit être sous la forme « jj/mm/aaaa »
Si celui-ci n’est pas respecté message invitant à cette saisie derrière le bouton « ENREGISTRER » avec arrêt de son traitement
L’enregistrement de ces données est réalisé sous le format attendu 'jj-mmm-aa dans l’onglet « DONNEES »
J’ai centré la saisie de la Durée de séjour
J’ai rajouté le traitement concernant le format du formulaire derrière le bouton « REINITIALISER »

Dernières précisions
Ce traitement de sécurité pour verrouiller le fonctionnement n’est qu’une protection d’utilisation qui n’est pas à l’épreuve des balles loin de là
Donc une action mal intentionnée sans être un expert de la programmation peut en venir facilement à bout
A ce titre si le mot de passe est oublié malencontreusement à l’invite de sa saisie une action simultanée sur les touches ctrl+alt+pause permet d’arrêter la procédure d’identification
Reste à rendre accessible l’onglet des mots de passe en exécutant dans une macro la ligne :

Sheets(« MOT DE PASSE »).Visible = -1

Je pense avoir fais le tour

A ta dispo pour précision ou amélioration

les mots de passe mis en place :
Formulaire = « Toto »
Classeur = « dupont »

Le classeur avec toutes ces évolution à tester :

ProjetRod v.5.xlsm (62,1 Ko)

Bonjour,
Merci. Je teste.