Bonjour, boujour,
La santé étant à nouveau à mes côtés, je tente une question concernant ... les formats....
Pour le boulot, j'ai été amené à créer un tableau pour gérer ma clientèle. A ma disposition : Word - Excel - Powerpoint - Acrobat reader et si je suis sage, une sucette !
Je dois en être à la quatrième, voir cinquième version du projet et ça commence enfin à avoir de la gueule. Situation :
Excel 2010 :
Création d'un tableau (186 colonnes - env. 400 lignes/clients). Des couleurs sont appliqués, via des mises en formes conditionnelles, suivant la situation du client. Les formats de chaque colonnes sont définis et fonctionnelles. Afin de permettre une relecture/contrôle des actions/corrections des données directement sur la feuille de Calcul, tant que l'application n'est pas finalisé. Taille du fichier : 3Mo
Problématique :
Mon travail nécessite, 90 % du temps, à reprendre des informations du tableau ci-dessus, pour faire des courriers, des stats etc. via Word 2010. Au vu de la masse de données, ayant d'autres chats à fouetter que de chercher/fouiller des dossiers papiers, j'ai décidé de créer des Userforms (5 au total) pour agrémenter mon boulot et automatiser le maximum de fonction (chiante !). Via des courriers types, des tableaux préformatés, je procède à des publipostages... Et ça fonctionne relativement bien.
Seul subsiste des problèmes de formats des données.
Le plus gros de ces soucis était les dates. Qui sur le tableau Excel était en format : Date court (dd/MM/YYYY).... Sur le UserForm : Date court et après le publipostage .... en date US sur Word (MM/dd/YYYY) ! Le comble étant que l'action de lire les données Feuille de calcul/ Userform transformait mes dates en format Texte.... MAIS, ce problème, bien que récurent, n'était pas permanent ! Y a des moments, ça fonctionnait parfaitement et tout un coup .... Bug !
Des manipulations, des modifications, des jetés de PC ont eu raisons de ma patience. Résultat j'ai refait proprement mon tableau Excel, contrôlé et vérifié chaque format, de chaque colonne, pour tomber sur le même problème. A force de recherche, de tests, etc. Je pense avoir résolu ce problème.
Mes UserForms chargent les données pour les afficher dans des label (titre de mes colonnes) et des TextBox (Les données propres à chaques client). Exception fait des formats, ça tourne très bien et l'affichage est fluide et très correctes.
Comme je n'arrivais pas à verrouiller ce problème de date, j'ai décidé d'opter sur la déclaration d'une variable pour chaque type de colonne :
Dans un module :
Type Données
Date de naissance as Date ....
186 Déclarations (prévoyant pour les évolutions du programme)
End Type
De l'autre côté, sur le UserForm, j'ai créé pour chaque Textbox qui affichait des nombres un process TextBox_Change(), dans lequel je fixe le format date.
Étonnamment, alors que j'étais persuadé qu'il me faudrait trouver une action identique pour que ces données soient réinjectées dans la feuilles de calcul dans le format Date, ça semble fonctionner. Mes dates sont en format Date Courte sur la feuille de calcul, s'affichent en date courte sur le formulaire. Quand je ferme le formulaire, les dates restent au format Date Courte sans problème apparent ... (pourvu que ça dure !)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub TextBox5_Change() 'format dd/mm/yyyy Dim Valeur As Byte TextBox5.MaxLength = 10 'nb caracteres maxi dans textbox Valeur = Len(TextBox5) If Valeur = 2 Or Valeur = 5 Then TextBox5 = TextBox5 & "/" End Sub
Mon tableau contenant également d'autres données numérique, j'ai pris l'initiative de paramétrer les champs "codes", "INSEE", "monétaire", etc. de la même façon. Et ça fonctionne ! (Y a des jours, où tout me réussi .... L'effet Barbara Schnould sans doute !! )
Seul reste à présent les numéros de téléphone .... Et là, ça pêche grave ! J'ai trois types de numéro de téléphone :
- Les numéros de postes internes : 5 caractères, que je souhaiterais sous format d'affichage : "## ###" Ex : 85 165
- Les numéros français : 10 caractères, que je souhaiterais sous format d'affichage : "## ## ## ## ##" Ex : 03 56 01 02 03
- Les numéros internationales : 12 / 14 caractères (?!), que je souhaiterais sous format d'affichage : "### #### ### ### ##" Ex : 049 751 156 253 02
Les deux derniers doivent obligatoirement avoir un zéro en première position.... Or, si je mets "0# ## ## ## ##", pour le format français, mon UserForm affiche : "0 000 038 80 10 20 3", côté étranger il me rajoute 2 zéros en début de ligne ?! Malgré de multiplies testes, tentatives, j'en suis arrivé au stade de paramétrer la feuille de calcul au fomat NOMBRE "388010203", pour que le UserForm affiche : "3 88 01 02 03".... Avec un conditionnement .... j'ai honte .... d'une qualité :
Si c'est pas malheureux !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Private Sub TextBox41_Change() If Len(TextBox41.Value) = 5 Then TextBox41.Text = Format(TextBox41.Value, "## ###") End If If Len(TextBox41.Value) = 9 Then TextBox41.Text = Format(TextBox41.Value, "## ## ## ## ##") End If If Len(TextBox41.Value) >= 12 Then TextBox41.Text = Format(TextBox41.Value, "### ### ### ### ##") End If End Sub
Pour ce que je déduis de ma situation présente, il semble que Excel lise les données de la feuille de calcul tels du Texte.... Qu'il transpose sur le UserForm.... Puis, lorsque je quitte, il prend ces textes et les réenregistrent sur la feuille de calcul .... Comment est-il possible qu'il ne tienne pas compte des formats ?!?!?
Donc, si une bonne âme voulait bien m'expliquer en terme simple (pour le commun des mortels), comme ça fonctionne, ça m'aiderait un peu.....
Merci d'avance
Quant à ceux qui estiment que ce n'est pas possible ..... Pas possible, pas français !![]()
Partager