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)
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...
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.
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?
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.
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.
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 ?)
en fit à la relecture les optionbutton se remplissent quand la valeur dans la feuille est "E", puis ne s'effacent pas et ne changent pas en fonction des nouvelles fiches lues.
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
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é.
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?
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.
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 !
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 !
Re-bonjour Modeste, je viens de regarder vite fit, ça a l'air simple de changer mes plages en tableau, par contre il a falloir que je retouche tout mon code c'est ça ?
Euh ... avec toutes les cellules fusionnées au niveau des titres de colonnes, je ne dirais pas ça
Par contre je ne sais pas pourquoi tu devrais "retoucher tout ton code" ? Tu as repéré quelque chose de particulier (j'avoue ne pas avoir scruté, ni testé)
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.