IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Lecture - écriture dans des textbox, question de formats [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Par défaut Lecture - écriture dans des textbox, question de formats
    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.

    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
    É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 !)

    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é :

    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
    Si c'est pas malheureux !

    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 !

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Et si tu remplaçais tes # par des 0 ?

  3. #3
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Par défaut Hello Parmi,
    Déjà essayé ! Marche pas ......

    Les versions suivantes ont été testées :

    "0# ## ## ## ##"
    "0# ## ## ## 00"
    "00 00 00 00 00"
    "## ## ## ## ##"

    De même j'ai testé avec des conditions :
    - If Else End if
    - If ElseIf Else End If
    - Seclect case
    - Type de numéro l'un après l'autre (5, 10 et 14),

    et ça veut pas ! Quoi que je fasse, je n'obtiens pas le bon format... Que la poisse me colle, c'est rien de nouveau, mais là.... j'ai des envies .....
    Ça fait un moment que je me pose la question, si le soucis ne vient pas de la feuille de calcul (format spéciale/téléphone, que j'ai imposé sur lesdites colonnes) ou de la prog que j'ai affecté au UserForm.....

    Ce qui m'énerve le plus, c'est de ne pas être sûr de comprendre ce que j'utilise. Exemple : dans les formats que je déclare "0", implique t-il que j'impose un 0 en début de chaîne ? Où plutôt que je définis qu'il s'agit obligatoirement d'un chiffre ? le "#", remplace-t-il n'importe quel nombre, et que des nombres ? Ou peut-il aussi remplacer une lettre ?
    Dans ma feuille de calcul : la zone téléphone contient : 388010203, mais affiche : 03 88 01 02 03... L'erreur provient-elle de là ?
    Faut-il croire, que puisque le format téléphone (français) et défini dans la feuille de calcul .... le fait de le transposer sur le UserForm/textbox et d'imposer à nouveau le format téléphone via la procédure : textbox_change (), crée cette absurdité ? Si oui, pourquoi 4 zéros ???? En bref, je navigue dans un floue artistique absolument grandiose ! Au stade où je doute de tout !

    Quelle est la bonne méthode ? Effectivement passer des déclaration de variable pour chaque champs (colonne) via Type / end Type ? Puis de contrôler l'affichage des données grâce à des textbox_Change () ? Quand je vois que je perds près de 5 secondes entre la demande et l'affichage des données, ça fait peur !

    Le fait de prendre certains traitements, qui me satellisent quasiment, n'aident pas des masses dans l'affaire ..... Et moi qui m'attendait à voir des éléphants roses, quelle déception !
    Demain, je fume le choux-fleur, peut-être que ça marchera mieux ?!

    Bonne fin de journée


    PS : Mes excuses pour les fautes grandioses que je commets lors de l'écriture.... j'essaierai de corriger, quand je serais en état..... Pour l'heure dodo ...

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Écris 123456789 en A1 et essaie ce code.
    Tu verras de toi-même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("B1") = Format(Range("A1"), "### ### ### ###")
        Range("B2") = Format(Range("A1"), "000 000 000 000")
    Par contre, si tu inscris une lettre à la place d'un des chiffres, ça change tout...

  5. #5
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Par défaut Yiop la jeunesse !
    Hello,

    Solution : Dans la feuille de calcul définir les colonnes contenant des numéros de téléphone en TEXTE. Dans le Userform, créer le lien entre la cellule concerner et la TextBox, puis, via un TextBox_Change () définir le format

    "00 000"
    "00 00 00 00 00"
    "000 000 000 000 00"

    Perso, j'ai implémenté le tout dans une condition IF ElseIF ElseIF End IF, et ça fonctionnne ! Yes ! J'ai eu l'illumination ce matin au réveil.... Comme quoi, hein !!!

    Concerannt ton test, je vais le tenter de suite. Je te remercie pour le temps que tu m'as consacré.

    Encore une bonne journée à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture / écriture dans des fichiers text
    Par nadir CoCo dans le forum C++
    Réponses: 6
    Dernier message: 28/06/2012, 09h10
  2. Réponses: 13
    Dernier message: 29/04/2008, 09h41
  3. Réponses: 47
    Dernier message: 28/01/2007, 19h39
  4. écriture dans un fichier, pb de format
    Par jejerome dans le forum C++
    Réponses: 2
    Dernier message: 17/05/2006, 17h41
  5. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo