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

Docdav

XLDnaute Junior
pour le cmb c'est logique en effet (enfin c'est logique une fois qu'on me l'explique...j'ai du boulot ).
J'ai corrigé les tag (je m'en serais vite aperçu si il n'y a plus de bug).

en effet à l'ouverture pas besoin d'afficher une fiche, c'est si on veut relire les fiches en cliquant dans le ChoixFiche que ça doit lire. je vais regarder les changements proposés.
entre temps j'ai créé une routine qui rempli automatiquement la date en fonction du numéro de fiche (ex : 16231650 16 est l'année, 231 le jour et 650 la fiche en elle-même). j'y suis presque.

et je pourrais faire l'enregistremebnt en routine ensuite, puis une aide au code postal quand on ne le connait pas (secondaire...)


un grand merci. bonne soirée Modeste, je vous relirais demain, ce soir je suis à la maison donc sans pc et avec ma femme, donc je ne vais pas virtualiser windows non plus...
 

Docdav

XLDnaute Junior
Bonsoir Modeste, je reviens vers vous après quelques jours.
j'ai tout corrigé et ça fonctionne, j'ai réussi à faire une boucle de lecture, d'enregistrement, et même de ré=enregistrement pour corriger une fiche déjà préremplie. tout ce que je voulais.
j'ai réussi à faire une date auto en fonction du dossier (tout seul comme un grand), ainsi que le remplissage de quelques cases (type de structure) en fonction de ce qu'on a rempli.

je bute sur 2 dernières choses :
-les boucles coinçait sur les "frames" avec plus de 2 option button, je n'avais (ni en lecture ni en écriture) pas tous les option button fonctionnels. J'avais (exemple en lecture
Code:
 Case "OPT"
        If F.Cells(ligneEnreg, Col) = ctrl.Caption Then ctrl.Value = True Else ctrl.Value = False
j'ai supprimé ceci
Code:
 Else ctrl.Value = False
: et ça fonctionne. (je crois comprendre le mécanisme).
par contre cela amène un souci : quand on ne rempli rien sur les options button (vvp,iot... )ça ne met pas un zéro, ce que j'aimerais) . il faut ajouter une ligne de test supplémentaire ?

- j'ai ajouté à coté du code postal un bouton (avec un ?), j'aimerais une chose simple et que je sais faire sous excel (un simple rechercheV), mais je bute en vba... quand on clique sur le ?, ouverture d'une combobox où on tape le nom de la ville (idéalement avec utilisation de saisie prédictive), et ça donne le code postal, un clic et il se copie dans la case code postal. ça semble simple, il y a des dizaines d'exemples inversés (on note le code il donne la/les villes), mais je n'arriva pas à en adapter un.

sinon je pense avoir bien simplifier mon code et suis satisfait des fonctions, j'aurais encore l'enregistrement à améliorer, mais c'est pas mal, grâce à vous.
 

Modeste

XLDnaute Barbatruc
Bonjour Docdav ... je commençais à me demander si tu avais sombré corps et biens :)

Tes optionButtons avaient disparu à un moment ... les voilà revenus!? Pour répondre à ta question, tu veux bien repréciser de quelle procédure il s'agit et dans quel module la trouver?

 

Modeste

XLDnaute Barbatruc
Re,

J'ai un peu plus de temps cet après-midi ... j'ai donc trouvé dans un module Validation_boucle, une Sub Validation() ... tu nous diras si c'est la bonne?
Si oui, teste ce qui suit:

  • ajouter, en début de procédure (par exemple avec la déclaration des variables) cette ligne:
    tabloCoches = Array(43, 51, 52, 53, 54, 84) les nombres repris dans ce tableau doivent correspondre aux n° des 6 colonnes correspondant aux OptionButtons (pour le sexe, il me semble que ça fonctionnait en l'état!?)
  • en toute fin de procédure (juste avant le End Sub), ajoute cette petite boucle:
    VB:
    For y = 0 To UBound(tabloCoches)
        If Cells(lignevide, tabloCoches(y)) = "" Then Cells(lignevide, tabloCoches(y)) = 0
    Next y
    Dans la ligne en cours de modification, les 6 cellules sont testées et les vides sont garnies d'un zéro.
Est-ce que cette partie te convient?
 

Docdav

XLDnaute Junior
Bonjour, j'ai bossé, mais pas trop sur Excel, et utilisé la version qui fonctionnait pour rattraper un peu de retard.
Oui, les optionbuttons avaient disparu en attendant de trouver une solution, histoire de pouvoir utiliser le formulaire.

Lors de la relecture d'une fiche déjà saisie (module lecture_codage ) ou lors de l'enregistrement (validation-boucle ou validation-relecture), les options Button n'étaient renseignés que pour certains choix, d'autres cela mettait 0.
Dans la lecture_codage et dans validation_boucle j'ai enlevé le else... et là tous les Opt sont lus ou codent, mais si je ne mets rien j'ai pas de 0 (par défaut donc.).

une ligne à rajouter sans doute, genre si case vide alors =0 en dehors de la boucle, mais pas propre.
 

Docdav

XLDnaute Junior
Bizarre mon message n'était pas parti, je viens de le découvrir grisé...c'était celui où je donnais quelques infos...
Je vais testé cela de suite.

Ca fonctionne pour mettre les 0 quand on ne remplit pas, impeccable. une fonction supplémentaire apprise !

Par contre je m'aperçois que j'ai quelques problèmes de relecture, ça ne remplit pas tout le temps les options (ça remplit sur la 1 ere fiche puis plus rien, il doit y avoir un RAZ à faire ?)
 

Modeste

XLDnaute Barbatruc
Bonsoir,

Pas trop de temps, mais attention à certaines "boulettes"! Par exemple, dans la Sub Lecture, tu as inversé les instructions pour désactiver/activer la gestion des événements!

Dans la même proc, pour le Case "OPT" , il y a toujours le Else ctrl.Value = False à la fin de la ligne

Les 1 et 0 dans la feuille sont des données numériques; la propriété Caption des Controls renvoie du texte. Essaie en écrivant (par exemple) If F.Cells(ligneEnreg, Col) & "" = ctrl.Caption
 

Docdav

XLDnaute Junior
ok j'ai corrigé et tout fonctionne, lecture, enregistrement, ré-enregistremennt.
Maintenant je regarde comment faire la fonction code postal ! on va y arriver !

Et je dois remplacer une fonction qui était dans les cellules, pour calcul automatique (d'où les XXXX lignes, j'avais tiré vers le bas en copie) "=SI(Y60>X60;Y60-X60;Y60+24-X60)", si simple en tableur, ça prends plein de lignes sous Excel, mais ça me fait travailler.

Je dois voir aussi comment copier la mise en forme des cellules lors de la création d'une nouvelle ligne, car lors de l'enregistrement sur une nouvelle, non formatée (comme j'ai fait le ménage), les heures se mettent en "standard", et ça me met 2,3556 (exemple) en relecture.

Mais quelle avancée par rapport au fichier initial...
Merci du temps passé.
 

Modeste

XLDnaute Barbatruc
Bonjour,

Une solution possible à tes deux questions serait de convertir la plage en tableau (les formules, formats, Mises en Forme Conditionnelles et Validations de données sont automatiquement reproduites dans chaque nouvelle ligne).

Pour le code postal, je te suggère d'ouvrir une autre discussion. Un classeur avec tes codes postaux dans une feuille et une autre avec ton tableau à compléter. Ne joins qu'un UserForm simplifié.
Si la demande y est liée, n'avais-tu pas un second fil à propos de la saisie prédictive?

Bonne continuation :)
 

Docdav

XLDnaute Junior
Bonjour,
oui là il va falloir que je bouquine pour comprendre...:)

Je suis en effet encore sur le fil saisie prédictictive, pour l'améliorer.:D
Je vais regarder pour le code postal pour un autre fil, mais j'espère que la police ne rode pas et ne va pas me tomber dessus pour éparpillement sauvage ! :eek:

Merci beaucoup Modeste pour tout ce temps, ces corrections et ces bonnes idées.
Si on pouvait voter je te décernerais une palme sur le forum !

A bientôt sur un autre fil.
 

Docdav

XLDnaute Junior
ah je n,'avais pas pensé à cela, bon , je peux les défusionner si besoin, (en fait je pensais qu'on pouvais commencer le tableau en dessous).
Il faut que je change les formules de lecture et enregistrement pour que ça se fasse dans le tableau au lieu de la feuille ? (changement de nom).

Si je change partout où j'ai écrit F=Sheets("codage") (par exemple) en F=Tableau.Sheets("codage") (enfin si ça s'écrit comme ça...), je n'ai rien d'autre à changer ?

Bon, repas, ensuite petite sieste et je lis sur le sujet.
 

Statistiques des forums

Discussions
312 103
Messages
2 085 317
Membres
102 862
dernier inscrit
Emma35400