XL 2010 For each controls impossible-résolu

Docdav

XLDnaute Junior
Bonjour,
j'ai un formulaire de saisie, avec plusieurs checkbox, nommée Box32,Box33, etc, le nombre étant la colonne dans lequel le résultat va se mettre. Rien de sorcier, une boucle d'écriture.

Mais...certaines checkbox doivent être modifiées en Frame avec 2-3 choix. J'ai la routine pour celles-ci.

Le problème est que la boucle des chekbox est rompue puisque certaines n'existent pas.
Soit faire plusieurs boucles sur les box existantes (pas propre)
Soit faire une boucle qui cherche les chekbox et fais le boulot.

Un exemple de ce que j'ai trouvé et qui ne marche pas : ça doit préremplir toutes les box normalement.

Dim obj As Control
For Each obj In Me.Controls
If TypeOf obj.Object Is msforms.CheckBox Then obj.Object.Value = True
Next obj

Avez-vous une idée.
Je mets mon fichier, pas du tout optimisé (va falloir que je fasse des modules), qui bug si il n'y a pas qq chose en ligne 6.

Il fonctionnait très bien avant de passer à ces choix multiples avec uniquement des box.
J'essaie d'avoir un fichier comptable mac (il faut juste que je déclare les listes dans ce fichier et ça fonctionne)

Merci de votre lecture et de votre aide.
David.
 

Pièces jointes

  • Formulaire-PC-modif.xlsm
    2.3 MB · Affichages: 115

jecherche

XLDnaute Occasionnel
Bonjour,

Ceci fonctionne.
Code:
Dim obj As Control
For Each obj In Me.Controls
If TypeOf obj Is msforms.CheckBox Then obj.Value = True
Next obj

Aussi, dans Vbe, menu Débogage > Compiler VbaProject nous montre quelques erreurs... dont Box06 > le code parle de "Box" & 6 ... ça ne correspond pas.


Jecherche
 

Docdav

XLDnaute Junior
Bonjour je cherche, et merci pour cette correction rapide et efficace.
Dans l'exemple je met True mais en fait c'est pour tout effacer après chaque saisie et validation de fiche, donc ce sera False, mais plus facile de voir si ça marche avec True.

Pour la 2ème remarque, c'était volontaire, je faisais en manuel pour remplir box 6 et box 31.
J'ai renommé mes box pour quelles soient toutes en 2 chiffres donc 06, mais oublié de modifier la formule box 6.
La raison est que cherche à remplir les cellules en fonction des box et inversement, et je voulais extraire le nom (donc boxZZ obligatoire même pour la 6).

Procédure de lecture de fiche déjà préremplie d'après une ligne excel :

Dim ctrl As Control
Dim k As Byte

For Each ctrl In Me.Controls
If TypeOf ctrl Is msforms.CheckBox Then
k = Right(ctrl.Name, 2)
If F.Cells(ligneEnreg, k) = 1 Then
Controls("Box" & k).Value = True
Else: Controls("Box" & k).Value = False
End If
End If
Next ctrl

Et je dois faire l'inverse pour remplir la ligne excel après avoir rempli le formulaire.
 

Modeste

XLDnaute Barbatruc
Bonjour Docdav, jecherche,

Sauf erreur, les contrôles associés à des Frames sont des "OptionButton" et non des "CheckBox"!?
Les mettre tous à True s'avérerait dès lors effectivement difficile (si c'est bien d'eux dont il était question o_O)
 

Docdav

XLDnaute Junior
Bonjour, et merci de vous intéresser à mon cas.
En effet, ce sont des options buttons. J'ai la routine pour les vider, copier leur résultat dans la feuille excel.
En mode "simple" pour l'infant, c'est à dire une à la fois, mais j'envisage de passer à la même méthode "For each".

La boucle des checkbox ne fonctionnait plus car certaines avaient disparues (transformées en frame/optionbutton).
Ce pourquoi je veux une boucle for each, ne pouvant plus utiliser For i= to

Le code du dessus fonctionne pour vider toutes les checkbox, je cherche maintenant à l'adapter pour remplir ma feuille.
 

Modeste

XLDnaute Barbatruc
Re,

S'intéresser à ton cas, on peut le faire sans problème, mais ce serait bien plus confortable si tu précisais à quel endroit de ton code il faut intervenir. Supprimer (ou mettre en commentaire) les parties qui ne sont pas impactées serait un plus également.
Dans la Sub B_validation_Click(), à l'emplacement marqué d'un commentaire '-----boucle CheckBox-----, teste ce qui suit:
VB:
    For Each cbx In Me.Controls
        If Left(cbx.Name, 3) = "Box" Then F.Cells(lignevide, 1 * Right(cbx.Name, 2)) = cbx.Value * -1
    Next
 

Docdav

XLDnaute Junior
Bonjour à tous :)pourquoi avoir ouvert 2 posts???

Bonjour, j'ai tellement de demandes de corrections, il ne faudrait pas un titre mais un générique à la star wars, je pensais que c'était plus simple de traiter une affaire à la fois, et pour moi, et surtout pour ceux qui m'aident.

Re,
S'intéresser à ton cas, on peut le faire sans problème, mais ce serait bien plus confortable si tu précisais à quel endroit de ton code il faut intervenir. Supprimer (ou mettre en commentaire) les parties qui ne sont pas impactées serait un plus également.
Merci, je dois déclarer la variable cbx ? ou il s'agit d'une abréviation officielle ?

Je vais voir comment trouver les numéros de lignes. On peut mettre rapidement une partie en commentaire ? (Plutôt que ligne par ligne ?)

Précision, je suis aujourd'hui à la maison, sur excel mac (2011 car la 2016 ne permet pas de modifier l'userform), j'ai essayé de virtualiser office 2010 mais c'est pas très probant.
Ce qui fait que je ne peux pas tester toutes les modifs que j'aimerais (par exemple j'avais vu un truc sur le zoom du formulaire mais utilisant une api windows...)
Quand je suis au boulot je suis avec office 2010 et c'est surtout pour cette version que c'est destiné, la version mac est un plus pour quelques collègues et moi-même.
La grosse modif vient des combobox qui n'a pas de champs pour déclarer la liste (raw), il faut donc déclarer les listes en début de projet.


MERCI MERCI MERCI
 

Lone-wolf

XLDnaute Barbatruc
Re David,

même si tu as plusieurs demandes, tu dois le faire sur 1 seul post et pas 50, sinon il vas y avoir des dizaines XLDiens qui vont travailler pour le même sujet. Regarde bien, sur 2 posts et même sujet, on est déjà 3 à avoir répondu.
 

Modeste

XLDnaute Barbatruc
Re²,
Salut Lone-wolf,


@Lone-wolf: d'autres ici, soutiennent qu'à chaque question doit correspondre un fil différent (de façon à pouvoir retrouver un sujet sur base du titre de la discussion). Maintenant, j'avoue que j'ai parfois un peu de mal, moi-même, à faire la distinction: ici, le fichier est le même, le "contexte" est lié à l'utilisation d'un UserForm ... mais il ne me semble pas déraisonnable de considérer (comme Docdav l'a fait) que les sujets sont distincts !?
Si les deux questions se "recouvrent" à un moment, c'est que tu avais raison ;)

@Docdav:

  • cbx n'a rien d'une "appellation officielle", tu peux donc le déclarer As Control (il n'y a pas de copyright sur l'appellation ... si tu t'en inquiétais ensuite) :p
  • dans la barre d'outil Édition, il y a une icône qui permet de commenter "un bloc"
  • tu nous diras si le code proposé fonctionne? (ton "MERCI" le laisse penser, mais une confirmation ce n'est pas plus mal!)
 

Docdav

XLDnaute Junior
pas encore testé, merci de vous y intéresser. là je changeais un robinet de chauffage...c'est le bon moment.
et juste avant j'ai fait une modif sur une version mac, mais des fois ça bug, et gèle le mac. (mais je les ai prévenu...)
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Modeste,

À moins de voir à double, il me semble que c'est le même fichier dans les deux posts. Donc il aurait dû exposer clairement sa demande. Un exemple (et surtout pour les enfants, à ne pas reproduire chez vous) .

Post1 : Formulaire X sujet sur ComboBox
Post2 : Formulaire X sujet CommandButton
Post3 : Formulaire X sujet sur Macro Erreur
Post4 : Formulaire X sujet ListBox
Post5 : Formulaire X sujet sur Ajouter ou modifier une macro
Post6 : Formulaire X sujet Peut-on faire ceci ou cela.
Etc.
Etc.
Etc.

Pour le même sujet il y a eu déjà 4 différentes interventions . Tu pense pouvoir t'en sortir Modeste? ;)
 

Modeste

XLDnaute Barbatruc
Tu pense pouvoir t'en sortir Modeste? ;)
Comprends pas: me sortir de quoi? Ce n'est pas moi le demandeur. C'est en définitive Docdav qui doit s'y retrouver!

Tout ce que je dis, c'est que la Charte énonce clairement:
3 – Le titre de la question doit être clair et comporter explicitement le sujet de la demande. Cela sous-entend qu’une nouvelle demande fait l’objet d’un nouveau fil.
On peut avoir des points de vues différents, des lectures et des interprétations différentes, mais on ne va pas en faire un fromage!?

Bonne soirée
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Modeste

ce que je veux dire, trouve-tu normal que toi - M.w. - M. x - M. y et M. z vous travailliez sur le même fichier???

1er POST: Bonjour, dans un combobox, quand on entre du texte, il propose le premier mot de la liste allouée au combobox.

J'aimerais qu'il soit cherché dans tout le mot et non juste au début ?
exemple : j'ai dans la liste Réa-Coma, Réa-ACR non réanimé, Réa-ACR réanimé.

2ème POST: Bonjour,
j'ai un formulaire de saisie, avec plusieurs checkbox, nommée Box32,Box33, etc, le nombre étant la colonne dans lequel le résultat va se mettre. Rien de sorcier, une boucle d'écriture.

Mais...certaines checkbox doivent être modifiées en Frame avec 2-3 choix. J'ai la routine pour celles-ci.

Est-ce c'est si compliquer que ça de le dire sur le même Post? Ceci pour éviter que plusieures personnes se penche dessus? Dailleurs, à plusieures reprises sur le Forum cette remaque à été faite "TU N'AURAIT PAS PU DIRE CELA AVANT?"
 

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T