VBA multipage et formulaire

52rp-mx2021.xlsm (110.54 Ko)

Bonjour à tous,

Je viens vers vous car je n’arrive pas à trouver de solution concernant un formulaire de modification de saisie.

Dans mon fichier ci-joint vous trouverez 2 formulaires :

• 1 pour la saisie des nouveaux dossiers.

• 1 pour la modification et l’ajout de données des dossiers déjà saisie

Le premier problème concerne le formulaire de SAISIE : je ne trouve pas de solution pour le format monétaire. "# ##0.00 €" ou "Currency" ne fonctionne pas. (Le format de la colonne du tableau et en monétaire).

Le deuxième problème concerne le formulaire de MODIFICATION : les données contenues dans les combobox et textbox du multipage (Pôle, Service Date Item et Motif) ne peuvent être modifiées ou complétées.

Il en est de même pour les textbox du multipage "Précisions", "Avancement" et "Suites".

Je peux modifier toutes les autres données sauf celles des 2 multipages.

Cela fait 1 mois que je suis dessus et je n’y arrive pas.

Jusqu’à présent, mes formulaires ne contenaient pas de Multipage, mais pour celui-ci, je n’ai pas trouvé d’autres solution car il y a beaucoup de données. Pour info, ce tableau doit uniquement servir à alimenter des TCD et GCD, les colonnes A à EH seront masqué par la suite…

Merci pour votre aide.

Bonjour,

Pour le problème du format monétaire > dans la colonne "CR" > fais "F2" et "Enter" sur chacune des cellules du tableau > les caractères vont se transformer en chiffre et s'aligner à droite ...

Une fois cela fait > CCur(Me.txtCout) > va suffire pour que les nouvelles données soient inscrites correctement dans le tableau ...

Pour le 2e problème > je n'ai pas de solution > je redoute que les combobox n'acceptent pas de données saisies manuellement ...

Tu observeras le même phénomène avec les autres combobox "Modalité de transmission" > "Type de dossiers" et autres ...

ric

Bonsoir ric

Le problème "monétaire" et maintenant réglé, merci pour ton aide.

pour le deuxième problème, il doit bien y avoir une solution mais je cherche encore....

Cordialement

Bonjour,

Trouvé ...

Change la propriété MatchRequired des ComboBox à False ...

C'est toujours simple quand on le sait ...

ric

Bonsoir ric,

J’ai essayé ta solution mais les combobox ne fonctionnent pas: toujours pas de menu déroulant pour modifier le site, le service, l’Item et le motif dans le multipage.

Je pense que le problème est que les combobox sont dépendantes: la liste des services dépend du choix fait pour le pôle et la liste des motifs dépend du choix dans la liste de l’Item.

Quand je suis sur le formulaire pour modifier, il faudrait que toutes les données saisies avant s’affichent dans le formulaire de modification afin de pouvoir modifier ou compléter celles qui n’ont pas été saisie.

Je bloque sur ce problème depuis 1 mois.

Merci pour ton aide

Bonjour,

MatchRequired à False permet de saisir des données sans qu'elles soient nécessairement dans la liste ...

Les combobox ne sont pas correctement alimentés > c'est pour cela qu'ils sont vides ...

Le fichier exemple n'a pas de suffisamment de données pour tester adéquatement > plusieurs colonnes sont vides ...

Je vais voir ce que je peux faire avec si peu de données ...

ric

Bonjour,

Les fichiers exemples ne sont pas très souvent bien représentatifs du fichier de travail > j'espère que tu pourras adapter ...

Tu utilises des tonnes de tableaux structurés > je manque trop d'expertise pour émettre un avis sur ce point ...

Les combobox > tu listes les entêtes au lieu de lister leur contenu ...

J'ai renommé certains entêtes de tableaux structurés avec les noms de ces mêmes tableaux ...
Exemple : le tableau "TPoles" > son entête "Poles" ...

Voir colonnes 113 à 129 et colonnes 131-137 (à titre d'exemples)

Étant donné qu'il y a du très gros boulot pour compléter > je n'ai fait que quelques lignes pour démontrer comment je procèderais ...

Voir : "Sub UserForm_Initialize()" > Sub cboPole1_Change() > et "Sub cboItem1_Change()" ...

Je te laisse avancer dans l'écriture de tout cela > sauvegarde souvent ...

De temps à autre > fait des copies de sécurité ...

Je reste disponible ...

ric

Bonjour ric.

Merci encore pour ton aide, j’apprécie vraiment.

J’ai terminé l’écriture en suivant ton exemple mais je ne suis pas arrivé à interpréter ces lignes :

"LTab = Me.cboPole1.List(Me.cboPole1.ListIndex)

NomLTab = "T" & LTab & "[" & LTab & "]"

Me.cboService1.List = Range(NomLTab).Columns.Value"

Peux-tu m’expliquer stp ?

J’ai retiré "CCur(Me.txtCout)" qui posait problème lorsque la textbox était vide au moment de valider, cette donnée n’est pas systématiquement renseignée quand on utilise le formulaire de modification et clôturer le dossier mais peut parfois ne rien contenir.

Au début, je comptais utiliser 1 seul formulaire pour saisir modifier ou compléter les données et je suis parti sur autre chose….

Donc, pour le formulaire de Saisie, fonctionne et je t’en remercie encore.

Par contre, pour le formulaire de Modification, le problème reste inchangé:

Je peux intervenir sur les données autour du multipage mais rien modifier ou saisir dans le multipage1.

  1. Impossible de modifier les combobox Pôles, Services, Items et Motifs.
  2. Impossible de saisir la date de réponse des Services.
  3. Dans le tableau de bord, les délais de réponse des services (colonne R, AE, AR, BE, BR, CE) sont calculés même s’il n’y a pas de service sélectionné (colonne P, AC, AP, BC, BP, CC).

Merci encore pour ton aide.

Bonjour,

Cas exemple : colonne "Di" = tableau "TPoles" (nom qui était présent dans ton fichier) ...

"LTab = Me.cboPole1.List(Me.cboPole1.ListIndex)
Quand l'on sélectionne un item dans un combobox et que l'on veut extraire le mot sélectionné et non le numéro de la ligne ...
LTab = L'item de la liste (quel numéro de la list ? c'est ListIndex) ...
Ainsi > LTab contiendra le mot sélectionné ...
Pour les explications > j'ai choisi Combobox "Pôles" et tableau "Pharmacie" ...

NomLTab = "T" & LTab & "[" & LTab & "]"
Tu utilises des tableaux séparés pour chacune des catégories ...
Exemple : combobox alimenté par le tableau "TPoles" ( colonne Di ) ...
Si je sélectionne "Pharmacie" dans le combobox > le tableau s'y rapportant se nomme "TPharmacie" (nom qui était présent dans ton fichier) ...
Pour concaténer le nom du tableau et le nom de la colonne du tableau ...
Si le nom avait été fixe > ce serait > NomLTab = "TPharmacie[Pharmacie]"
NomLTab = "T" & LTab & "[" & LTab & "]" et NomLTab = "TPharmacie[Pharmacie]" > sont équivalent ...

Me.cboService1.List = Range(NomLTab).Columns.Value
Si je n'avais pas été obligé de concaténer l'information pour dynamiser le code > la ligne aurait été ...
Me.cboService1.List = Range("TPharmacie[Pharmacie]").Columns.Value

Pour le reste > je regarde bientôt ...

ric

Bonjour,

J’ai retiré "CCur(Me.txtCout)" qui posait problème lorsque la textbox était vide au moment de valider,

Dans ce cas > il faut écrire ...

If Me.txtCout.value > 0 then ActiveCell.Offset(0, 94).Value = CCur(Me.txtCout)

Remarque que je n'ai pas validé tout ton code > tâche trop lourde pour le faire d'un coup ...

ric

Bonjour,

Questions importantes à ce stade ...

1- Au moment d'ajouter ou de modifier les données à l'aide des formulaires > c'est bien dans les 99 premières colonnes de la feuille "Tableau de bord" que les données seront ajoutées ou modifiées ?
___ Est-ce que l'on parle bien du tableau "TDonnées" ?

2- Afin d'alléger la chose > que penses-tu de l'idée de revenir à un seul formulaire pour Ajoute et Modifier ?
___ Sinon l'on double une tonne de codes ...

3- "FrmSaisie" > quels sont les champs obligatoires pour l'ajout de données ?
___ pour l'instant > la vérification ne se fait que sur le "Nom" ...

ric

Bonjour,

Comme tu vois > je travaille fort pour toi ...

Ce n'est qu'une demi-vérité > je travaille fort pour mon apprentissage itou ...

Je trouvais que le code du formulaire de saisie avait besoin d'un bon coup de balai ...

6 ComboPole > 6 ComboService > 18 ComboItem et 18 ComboMotif > bien du code qu'il fallait réduire de façon significative ...

Je me suis exercé sur les "modules de classe" > lesquels servent à réduire le code des choses répétitives ...

J'ai ajouter l'insertion d'une ligne de A à K afin de faire descendre les 2 gros boutons au fur et à mesure des nouvelles lignes de données ...

J'ai corrigé le formulaire de modification > il devrait être passablement opérationnel ...

Je te laisse regarder ...

ric

Bonjour,

Macro "Private Sub btnAjouter_Click()" > après la copie des formats et formules > j'ai oublié d'ajouter ...

Application.CutCopyMode = False > ou > .Range("A" & LLig + 2).Select > pour désactiver la sélection de la ligne ...

ric

Bonjour ric,

Bravo pour ce formidable travail et merci pour tes explications. Je suis novice en VBA (depuis l’été dernier) et je manque encore de connaissance dans cette matière. J’avais 2 formations prévues l’année dernière mais elles ont été annulée avec le confinement. Peut-être cette année….

  1. Il s’agit bien des 99 colonnes du tableau "TDonnées". Ce tableau doit uniquement servir à alimenter des TCD et GCD et les colonnes A à EH seront masqués.
  2. L’idée de revenir à un seul formulaire me plait bien, c’était d’ailleurs mon premier projet. Pour te permettre de visualiser mon premier projet, j’ai rajouter les boutons "Rechercher" et "Modifier" dans le formulaire de saisie ainsi qu’une texte box pour la recherche par N° de dossier et un combobox pour une recherche par noms et prénoms, afin de laisser le choix de la recherche à l’utilisateur.
  3. Concernant les champs obligatoires, je me suis arrêté au "Nom" mais, effectivement, il serait judicieux de rajouter le "prénom" et la "Date d’arrivée du courrier" qui permettront dans un premier temps de créer le dossier. Les autres données pourront être rajoutées par la suite avec le bouton Modifier.

J’ai fait quelques essais de modification sur les dossiers enregistrés et le formulaire de modification semble bien fonctionner.

Reste encore se problème avec le "délais de réponse des services" (colonne R, AE, AR, BE, BR, CE) qui se calcul automatiquement quand on valide la modification, même s’il n’y a pas de date de réponse saisie. Vois-tu quelque chose à changer dans cette formule ? Exemple pour la ligne 2 "=SI(ESTVIDE(AP2);"";SI(ESTVIDE($M2);"";SI(ESTVIDE(AQ2);AUJOURDHUI()-$M2;AQ2-M2))) "

Elle fonctionne très bien dans d’autres tableaux mais pas dans celui-ci….

Merci encore pour ton aide.

Bonjour,

Les formules ne sont pas mon fort ...

Si R9 = 7 selon ton besoin > essai :  =SI(ESTVIDE(P9);"";SI(OU(ESTVIDE($M9);ESTVIDE(Q9));"";AUJOURDHUI()-$M9))  ...

Sinon > donne-moi les résultats attendus dans ces différentes cellules de la ligne 9 ...

ric

Bonjour ric,

Dans l’exemple de la ligne 9 le courrier a été envoyé au service le 10 janvier 2021 (colonne M).

Celui-ci a répondu le 11 janvier 2021 (colonne Q), ce qui donne donc 1 jour de délai de réponse (colonne R).

Les autres colonnes "délais de réponse des services" (colonne AE, AR, BE, BR, CE) continuent de conter les jours alors qu’elles devraient être vide puisque les colonnes "Service concerné" (colonne AC, AP, BC, BP, CC) et " Date de réponse des services" (colonne AD, AQ, BD, BQ, CD) sont vides.

Aujourd’hui, Les colonnes "délais de réponse des services" (colonne AE, AR, BE, BR, CE) affiche 7. Les colonnes "Service concerné" (colonne AC, AP, BC, BP, CC) sont vide mais si j’efface leur contenu « vide », le conteur des colonnes "délais de réponse des services" (colonne AE, AR, BE, BR, CE) s’efface.

Je ne sais pas si j’ai été très clair dans mes explications.

Merci pour ton aide

Bonsoir ric,

Je viens de d’avoir un petit bug dans le formulaire de saisie : quand je choisi un Pôle, la boite de dialogue du formulaire de modification s’affiche et me demande le N° de dossier à modifier….

Merci pour ton aide.

Bonsoir ric,

Un autre petit bug mais cette fois dans le formulaire de modification: quand je saisie "Chiffrage en cours" dans le formulaire de saisie, je ne retrouve pas cette information dans le formulaire de modification alors qu'elle apparait bien dans le tableau en colonne CR.

Merci pour ton aide.

Bonjour,

Je regarde cela demain matin heure de Montréal ...

ric

Bonjour,

J'ai cherché longtemps le "Chiffrage en cours" > je suis un peu fatigué ...

Le numéro de colonne de "Coût du sinistre" est 96 ...

Dans le formulaire saisi > l'écriture se fait bien en 96 ...

Mais dans le formulaire modification > la lecture se fait en 96 > mais l'écriture se fait en 95 ...

Un autre point à revalider > les lectures et écritures selon les colonnes ...

quand je choisi un Pôle, la boite de dialogue du formulaire de modification s’affiche et me demande le N° de dossier à modifier….

En utilisant le même formulaire pour saisie et modification > ce phénomène ne se produira plus ...

Je n'avais pas suffisamment testé mes changements > désolé ...

Donc demain un seul formulaire ...

Cette formule =SI(ESTVIDE(P9);"";SI(OU(ESTVIDE($M9);ESTVIDE(Q9));"";AUJOURDHUI()-$M9)) > ne convient pas pour les colonnes R, AE, AR, BE, BR, CE ?? > ce n'est pas le bon résultat ?

ric

Rechercher des sujets similaires à "vba multipage formulaire"