Microsoft 365 VBA Format Texte en N° Tél

Piment

XLDnaute Occasionnel
Bonjour à tous, je suis néophyte en VBA, et je rencontre un problème:
Je saisie des données via un UserForme, et j'ai une Combobox où je rentre un N° de Tél.
Mais lors du transfert dans mon tableau, bien que le Format de la colonne soit en format "Spécial: Téléphone", les données s'obstine à être en format Texte.
Comment convertir à la sortie, ou à l'ouverture de l'UserForm les données formats texte en données Tél:
Merci pour votre Aide.
 

Pièces jointes

  • Essai Contrôle Facturation.xlsm
    39.6 KB · Affichages: 14
Solution
Il y a confusion entre point et virgule décimale.
Remplacer tous vos CDBl par des Val, chez moi ça supprime les erreurs.
VB:
        If TextBox2.Value <> "" Then Range("D" & L).Value = Val(TextBox2.Value)
        If TextBox3.Value <> "" Then Range("E" & L).Value = Val(TextBox3.Value)
        If TextBox4.Value <> "" Then Range("F" & L).Value = Val(TextBox4.Value)
        If TextBox5.Value <> "" Then Range("G" & L).Value = Val(TextBox5.Value)
        If TextBox6.Value <> "" Then Range("H" & L).Value = Val(TextBox6.Value)
        If TextBox7.Value <> "" Then Range("I" & L).Value = Val(TextBox7.Value)
        If TextBox8.Value <> "" Then Range("J" & L).Value = Val(TextBox8.Value)
        If TextBox9.Value <> "" Then Range("K" & L).Value =...

Piment

XLDnaute Occasionnel
Bonjour à tous,
Je reviens vers vous afin de m'aider de nouveau:
J'ai rajouté à mon tableau une ligne Total, et comme vous pouvez le constater, la nouvelle ligne se positionne sur ma ligne total, tout en créant une ligne vide juste au-dessus. De plus ma colonne N° Tél n'affiche plus en format Tél.
Je voudrais également que la ComboBox Recherche affiche deux colonnes: le N° Tél et le Nom
Merci de votre aide.
 

Pièces jointes

  • Essai Contrôle Facturation.xlsm
    40.8 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Piment,
Sans tout analyser à fond, de simples idées :
1- J'ai supprimé les sous totaux colonnes A,B,C qui n'ont aucune signification.
2- En A4 le "numéro" entré est 09 93 758840 donc est reconnu comme une chaine non comme un nombre. Si on rentre 0993758840 alors tout rentre dans l'ordre.
3- Pour le champ Recherche il suffit de faire :
VB:
.AddItem Ws.Range("C" & J) & " - " & Format(Ws.Range("A" & J), "0# ## ## ## ##")
ce qui donne Saint-pierre - 06 93 77 15 44;
4- Le " - " est important car il permet ensuite de récupérer que le N° en faisant :
Code:
Range("A" & L).Value = Split(ComboBox1, " - ")(1)
Voir PJ. Je ne sais pas si tout est clair. :rolleyes:
 

Pièces jointes

  • Essai Contrôle Facturation (1).xlsm
    34.8 KB · Affichages: 3

Piment

XLDnaute Occasionnel
bonjour Sylvanu,
Merci pour ta réactivité, cela me permet d'avancer plus rapidement.
Malheureusement, lorsque je rentre un nouveau Numéro, j'ai une erreur d'exécution (9): l'indice n'appartient pas à la sélection????? Il s'agit du code: Range("A"&L).Value=Split (ComboBox1,""-"")(1)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Comme vous vouliez un format Combobox de type Nom N°, je n'ai pas pensé qu'on pouvait entrer une données d'un autre type.
Dans ce cas il faut faire un test sur la chaine entrée avant de la ranger :
VB:
        If ComboBox1 = "* - *" Then
            Range("A" & L).Value = Split(ComboBox1, " - ")(1)
        Else
            Range("A" & L).Value = ComboBox1
        End If
 

Piment

XLDnaute Occasionnel
Je n'arrive pas à obtenir le résultat voulu.
Lorsque je rentre un nouveau numéro, il m'insère une ligne vide dans le tableau et stocks les données sur la ligne total.
S'il te plait, peux-tu me retourner le fichier corrigé avec tes explication, si ce n'est pas trop abusé de ta gentillesse. Merci beaucoup.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Mes modifs n'ont en rien touché le rangement fait.
Vérifiez. Elles ne touchent que le format de Combobox et l'extraction du N°.

Par contre après analyse :
Cette ligne vous donne la première ligne vide après le tableau et non dans le tableau.
VB:
L = Sheets("Controle").Range("a65536").End(xlUp).Row + 1
car pour XL un tableau structuré est un objet en soi.
Donc il faut passer par :
Code:
L = tbl.ListRows.Count

donc l'erreur ne venait pas de mes modifs.;)
 

Pièces jointes

  • Essai Contrôle Facturation (2).xlsm
    35.6 KB · Affichages: 4

Piment

XLDnaute Occasionnel
J'ai compris.
Je suis vraiment un néophyte en matière de VBA. Je découvre et j'essaye d'apprendre, j'ai donc besoin d'exemples pour essayer de décortiquer et comprendre.
Sans votre aide j'y serais encore.
Merci beaucoup, à bientôt (probablement hélas!)
 

Piment

XLDnaute Occasionnel
Bonjour Sylvanu
Je reviens de nouveau vers toi, un nouveau problème est apparu.
Je n'ai apparemment pas tout compris, en effet, si je rentre un nombre entier (10), tout se passe normalement, mais si je rentre un nombre avec décimal (5.44) il m'indique une erreur au code: Range("D" & L).Value = CDbl(TextBox2.Value), et ne me met plus ma colonne N° Tél en Format tél. Je pense qu'il s'agit d'un problème avec la touche "point" du pavé numérique.
Une fois encore peux-tu m'aider s'il te plaît.
Merci beaucoup
 

Piment

XLDnaute Occasionnel
pardon de na pas avoir clair dans ma demande.
Le nombre décimal n'est pas pour la ComboBox1 N° Tél, mais les Texbox Janvier (D) à Décembre (O), où je rentre les montants des consommations. C'est ici que j'ai apparemment un problème qui impacte la ComboBox1 (N° Tél)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Il y a confusion entre point et virgule décimale.
Remplacer tous vos CDBl par des Val, chez moi ça supprime les erreurs.
VB:
        If TextBox2.Value <> "" Then Range("D" & L).Value = Val(TextBox2.Value)
        If TextBox3.Value <> "" Then Range("E" & L).Value = Val(TextBox3.Value)
        If TextBox4.Value <> "" Then Range("F" & L).Value = Val(TextBox4.Value)
        If TextBox5.Value <> "" Then Range("G" & L).Value = Val(TextBox5.Value)
        If TextBox6.Value <> "" Then Range("H" & L).Value = Val(TextBox6.Value)
        If TextBox7.Value <> "" Then Range("I" & L).Value = Val(TextBox7.Value)
        If TextBox8.Value <> "" Then Range("J" & L).Value = Val(TextBox8.Value)
        If TextBox9.Value <> "" Then Range("K" & L).Value = Val(TextBox9.Value)
        If TextBox10.Value <> "" Then Range("L" & L).Value = Val(TextBox10.Value)
        If TextBox11.Value <> "" Then Range("M" & L).Value = Val(TextBox11.Value)
        If TextBox12.Value <> "" Then Range("N" & L).Value = Val(TextBox12.Value)
        If TextBox13.Value <> "" Then Range("O" & L).Value = Val(TextBox13.Value)
Essayez cette PJ pour voir si ça améliore les choses.
Ce qui m'étonnes c'est que ce problème devait exister depuis le début.
 

Pièces jointes

  • Essai Contrôle Facturation (5).xlsm
    31.6 KB · Affichages: 7

Piment

XLDnaute Occasionnel
Apparemment ça marche.
Effectivement, le problème devait exister depuis le début. Je n'avais pas tester les saisies dans toutes les TextBox, ce qui ne m'a pas permis de détecter cette erreur que j'avais commise.
J'étais concentré sur ma problématique de N° Tél.
Désolé de vous avoir autant sollicité.
Merci encore, et ... certainement à très bientôt.
J'ai décidé de modifier mon UserForm pour ne pas avoir à faire la création et la modification à partir du même UserForm. Ce n'est guère pratique.
Je crains fort d'avoir encore besoin de vos compétences.
Merci de m'avoir fait progresser dans ce domaine.
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 083
Membres
103 458
dernier inscrit
Vulgaris workshop