Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 numérotation CheckBox

nano33320

XLDnaute Junior
Bonjour à toutes et tous

Le sujet qui me perturbe aujourd'hui est un soucis de numérotation de CheckBox dans un UserForm.
J'utilise 3 UserForm quasi identique dans un outil de gestion des membres d'une asso.
"Nouvel Adhérent" / "Mise à Jour Adhérent" / "Information Adhérent"
Leurs CheckBox sont numérotés de 1 à 14 (activités).
Sauf que pour l'UserForm ci-dessous 8 CheckBox sur les 14 ont leur numéro qui a été changé dans Excel (ceux marqués), pour quelle raison ? Excel a ses raisons...???
Quand je veux réattribuer les numéros conformes au programme, j'ai un refus de VBA... ???


Pour les 2 autres UserForm identiques à la finalité et couleur près R.A.S. tout est Ok.
Dans le même UserForm le même problème se produit aussi pour le TextBox13 que j'ai dû renommer TextBox013

J'ai déjà rencontré ce problème une fois avec ce même UserForm,
je l'avais résolu en supprimant l'UserForm et en le recréant (j'avais conservé le code) mais c'est plutôt lourd...
Problème déjà rencontré 2 fois, pourquoi pas 3 ???

Les macros fonctionnent, puis je constate un dysfonctionnement à l'affichage => n° changé... Pas Cool...

Si vous avez une idée de l'origine de ce problème, et m'aider à le corriger
vous m'enlèveriez une belle épine du pied...

Merci de votre aide
Nano
 

Dranreb

XLDnaute Barbatruc
Ben oui, l'UserForm défini et un exemplaire affiché sont deux choses différentes. Un module UserForm n'est rien d'autre qu'un module de classe avec interface à MSForms et bénéficiant d'une déclaration implicite Public UserForm1 As New UserForm1 à supposer que son nom de type est UserForm1.
Pour assurer des traitements spécifiques, je prévoirais une variable Private Mode et ferais des Select Case Mode avec tous les cas de traitements nécessaires.
Info: Mon objet ControlsAssociés, et plus précisément sa méthode Add, supporte les CheckBox correspondant chacune à une colonne de la base à mettre à jour.
 
Dernière édition:

nano33320

XLDnaute Junior
Qu'est-ce qu'un multipage de UserForm ?
Le même UserForm, effectivement je pense pouvoir l'adapter à l'initialisation en Nom et couleur de fond...
Situer sur un serveur cloud, l'outil à vocation à être utilisé par plusieurs personnes qui ne connaissent strictement rien en Excel ou autre progiciel.
J'ai prévu d'afficher une page (toujours la même verrouillée) avec des UserForm en fonction des besoins le même UserForm (x3) prend des couleurs différentes pour fixer l'étape.
Le choix d'avoir 14 CheckBox est pour visualisation graphique immédiate des activités de la personne.

Je suis preneur de toutes les simplifications possibles, mais je pense à l'exploitation qui va en être faite en fonction du profil des dites personnes...
 

nano33320

XLDnaute Junior

Module de classe... je n'ai pas encore eu le temps de regarder ce que c'est (j'ai découvert ça dans notre échange).
Select case mode ??? Même recherche que pour module de classe

Il va falloir que je creuse, super, je reviens à l'école
 

Dranreb

XLDnaute Barbatruc
Un MultiPage est un cadre à plusieurs onglets. Il serait adapté à la mise à jour de différents groupes de colonnes par des personnes différentes si la base comportait vraiment un grand nombre de colonnes.
Sinon ils apporte en général une complication inutile et peu ergonomiqiue à mon avis.
Un module de classe est un module dont toutes les variables globales sont adressées par rapport à l'adresse d'une structure de donnée qu'on appelle un exemplaire (instance en anglais). C'est le concept même de la notion d'objet VBA. Un objet peut avoir des propriétés, des méthodes et des évènements.
 
Dernière édition:

jcf6464

XLDnaute Impliqué
RE Nano, Danreb et le forum

il peut faire avec le classeur suivant de (Danreb) tout dépend du nombre de colonnes,

bonne continuation jcf
 

Pièces jointes

  • CLsCAsVanin.xlsm
    210.7 KB · Affichages: 4

nano33320

XLDnaute Junior
Bonjour Danreb et jcf6464

J'ai dû mettre le "dossier" en "veilleuse" quelques jours.
Me voilà de retour, profil bas à l'écoute de vos propositions.
Comme suggéré, j'ai créé un dossier anonymisé pour essayer d'avancer et que vous puissiez concrètement voir l'étendu du problème.
Cahin-caha le fichier tournait à peu près jusqu'à ce que je veuille mettre un peu plus d'ergonomie sur la saisie de l'orthographe des noms.
Cette approche fonctionne (ce n'est pas moi qui l'ai développée, pas assez compétent pour çà, je l'ai trouvé sur internet).
Ce qui a tout planté c'est le souhait de présenter le choix de la validation de l'orthographe...
La version anonyme a plus de bug que l'original...
Mais quelle est la taille max d'un fichier que l'on peut joindre ?
à 1MO (fortement allégé) ça coince.

Merci
Nano
 

nano33320

XLDnaute Junior
Bonjour Patrick
Enfin mon fichier tourne (reste 1 ou 2 petit truc à corriger).
MAIS il "pèse" plus de 6 MO... pas cool

Surtout qu'il tourne à partir d'un cloud, et les quelques personnes qui vont l'utiliser n'ont pas des PC foudroyant...
Mes compétences en programmation sont très limités.
Mon fichier a 27 feuilles dont 14 TCD pour les listes de participants à chaque activité (nécessité d'impression pour les animateurs).
Je suis ouvert à toutes les options pour l'alléger (faut-il que je comprenne car s'est moi qui vais assurer la maintenance/évolutions nécessaires)...
La gestion d'event, je ne sais pas ce que c'est ou des Modules de Classe j'ai une vague idée mais je n'ai pas eu le temps de creuser...
J'utilise une macro pour "nettoyer" les feuilles en général et les TCD en particulier :
VB:
Sub Alléger_EPTs()
    Application.ScreenUpdating = False      '----> Figer l'écran
    Sheets("Menu").Select
    Rows("38:38").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("X:X").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Sheets("Liste de Noms").Select
    Rows("301:301").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("AF:AF").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Sheets("Stat_Asso").Select
    Rows("375:375").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
    Columns("AD:AD").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Sheets("Support-Macros").Select
    Rows("33:33").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("S:S").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Sheets("Menu").Select
    Range("A1").Select
' -- TCD ----
    For i = 4 To 21
    Sheets(i).Select
    Range("B1").Select
    Selection.End(xlDown).Select
    R = ActiveCell.Row + 1
    Cells(R, R).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("N:N").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Next i
    Sheets(27).Select
    R = InstanceRL + 1
    Cells(R, R).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("W:W").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    For i = 1 To f
    Sheets(i).Select
    Range("A1").Select
    Next i
    Sheets("Menu").Select
    Range("A1").Select
End Sub
ça a fonctionné au début du développement mais c'est nettement insuffisant.
Merci pour les conseils...
Nano
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir
que dire ?
moi si je n'ai pas de fichier je fait rien
ensuite
au regard du post 22 je me rends compte que tu utilise l'enregistreur de macro
alors c'est bien mais il faut apprendre ce que les lignes crées veulent dire afin de réduire le code à l'essentiel
si en effet tout ton fichier est construit comme ça ça m’étonne pas qu'il fasse 6 MO

je n'ai rien contre les autodidactes j'en suis un moi même
mais avant de se lancer dans la construction d'un applicatif avec excel
on apprends les bases
 
Réactions: cp4

nano33320

XLDnaute Junior
Bonsoir Patrick
Merci de ce retour de très bon conseil.
Tu as raison, je me définirai comme une "imposteur" de VBA.

Je développe quelques outils en fonctions de besoins liés à mes activités/loisirs (je suis en grande vacances).
N'ayant aucune base, j'utilise l'enregistreur de macro...
Macros que j'agrémente de solutions glanées sur le net. Solutions que je customise dans la mesure où je les comprend. Ce n'est pas très esthétique pour le rendu de programmation, mais globalement ça fonctionne.
C'est le premier "gros" (pour moi) outil que je développe.

Je veux bien "nettoyer" le fichier pour l'anonymiser et l'alléger au maximum pour le mettre à disposition mais quelle est la taille maxi sur le site ? à 1 MO c'est trop gros.

Au plaisir de continuer l'échange
Nano
 

patricktoulon

XLDnaute Barbatruc
re
non il n'y a pas d'imposteur ici
seulement des personnes qui ont tendance à sauter des étapes
  1. anonymise ton fichier(eventuels nom prénom ou adresses ,tel etc....
  2. post ton fichier sur cjoint.com par exemple
  3. et met le lien ici
on pourra peut être être plusieurs à nettoyer tout ça

je te donne un exemple
ton post 22 je vois ça
VB:
Sub Alléger_EPTs()
    Application.ScreenUpdating = False      '----> Figer l'écran
    Sheets("Menu").Select
    Rows("38:38").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("X:X").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
    Range("A1").Select
    Sheets("Liste de Noms").Select
    Rows("301:301").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlUp
    Columns("AF:AF").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Delete Shift:=xlToLeft
d'ailleurs on vois bien que même si on garde ce genre de code tu n'a même pas pris la peine de netoyer les lignes en double

par contre moi je ferais ceci
des blocs with intelligibles

VB:
Sub Alléger_EPTs_V2()
    With Sheets("Menu")
        .Rows("38:38").Resize(.UsedRange.Rows.Count).Delete Shift:=xlUp:
        .Columns("X:X").Resize(, .UsedRange.Columns.Count).Selection.Delete Shift:=xlToLeft
    End With

    With Sheets("Liste de Noms")
        .Rows("301:301").Resize(.UsedRange.Rows.Count).Delete Shift:=xlUp
        .Columns("AF:AF").Resize(, .UsedRange.Columns.Count).Delete Shift:=xlToLeft
    End With
pas de select donc on accélère la chose
 

nano33320

XLDnaute Junior
Merci de vos propositions
le fichier est téléchargeable à cette adresse :
---> {je découvre ce site}
Il est possible que quelques macros aient souffert de l’anonymisation... celles que j'ai lancées ont l'air de fonctionner.
Vous y reconnaîtrez peut-être quelques contributions que l'un ou l'autre d'entre vous a fourni à la communauté.
Grand merci à eux.

J'ai eu une surprise :
Le fichier une fois anonymisé pesait environ 1 MO.
J'ai introduit une image pour remplacer celle du club => poids supérieur à 2 MO.
J'ai testé : mettre enlever remettre l'image => le poids du fichier n'a quasiment pas bougé...

Je soupçonne Excel de "stoker" des infos de manière inutile, mais où...???

Merci par avance de vos contributions et des progrès que j'espère réaliser grace à nos échanges...
Cdlt
Nano
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…