Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Macro VBA Excel (Doublon,SansAccents,Maj,Min,Nompropre,Espaces superflus)

laurent950

XLDnaute Barbatruc
L'exemple discuté était 1673227883 : "1" + 9 chiffres, donc non valide
Donc si c'est non valide c'est un numéro a ne pas prendre en compte car c'est potentiellement un numéro faux à 100% (La longueur en France c'est uniquement une chaîne de 9 Nombres) est point.

C'est difficilement gérable c'est numéros de téléphone Eric !
 
Dernière édition:

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour à tous


moi aussi je ne vois qu'une table de correspondance
que l'on pourrait mettre dans une gallery cachée ou simplement une feuille mais pour le xlam je sais pas si une feuille est exploitable il me semble que oui je ne m'en souviens plus

Oui on peut, dans la version XLAM Setup, je mémorisais définitivement les derniers Setups une fois pour toute. Attention par contre car il faut jouer avec les Propriétés de "ThisWorkBook" IsAddin True ou False, et après on ne peut plus sauver la XLAM, il faut s'y prendre dans le bon ordre.

Je vois que ça avance, sur GitHub il y a les liste des DialingCode WorldWide maintenue à jour par Google https://github.com/google/libphonenumber ( s'orienter vers JavaScript library for parsing, formatting)

Bon courage
@=Thierry
 

eriiic

XLDnaute Barbatruc
Donc si c'est non valide c'est un numéro a ne pas prendre en compte
pour l'instant, si ce n'est pas reconnu je laisse inchangé (on pourrait prévoir un paramètre optionnel pour les mettre à vide, la même fonction pourra faire office de validation selon le choix).
Comme les reconnus vont avoir un affichage spécifique ils se distingueront des autres
 

eriiic

XLDnaute Barbatruc
J'ai donc mis sous forme de fonction pour plus de souplesse à l'utilisation.
J'ai ajouté le traitement des n° internationaux, même sans le 00 ou +
Mais il ne faut pas rêver, le 262298710 ne peut pas être à la fois un n° national valide et un n° de Mayotte Je privilégie les n° nationaux.

Pour ceux qui voudraient ajouter des pays j'ai trouvé une page pour connaitre la numérotation des pays : https://fr.wikipedia.org/wiki/Numéro_de_téléphone

Il ne me reste 5 écarts par rapport au 'Resultat Escompté'. Ecarts justifiés que j'explique.

VB:
Function numTel(ByVal num As String, Optional valide As Boolean = False) As String
    ' valide = False : n° non reconnu inchangé
    ' valide = True : n° non reconnu mis à ""
    '
    ' Plans de num pays    Mayotte,Andorre,Monaco
    Const codeInt As String = "262,376,377"
    Const lNumInt As String = "6,6,8" ' nombre de chiffres plan de num du pays
    '
    Dim datas, lig As Long, b_fr As Boolean, b_int As Boolean
    Dim ci, planNum, i As Long
  
    num = Replace(Replace(Replace(Replace(num, " ", ""), ".", ""), "-", ""), ",", "")
    If Left(num, 1) = "+" Then num = "00" & Mid(num, 2)
    If Left(num, 4) = "0033" Then
        num = Right(num, 9): b_fr = True
    ElseIf Left(num, 2) = "00" Then
        num = Mid(num, 3): b_int = True
    End If
  
    i = 1
    Do While Mid(num, i, 1) = "0": i = i + 1: Loop ' compter zéros du début
    ' normaliser n° national
    If Not b_int Then If Len(num) - i + 1 = 9 Or (Len(num) = 11 And Left(num, 2) = "33") Then num = Right(num, 9): b_fr = True
    If b_fr Then ' national
        Select Case Left(num, 1)
            Case "6", "7" ' mobiles
                num = "0033-" & num
            Case Else ' régionaux
                num = Format(Val(num), """0033-""#-########")
        End Select
    Else
        ' n° international reconnu ?
        ci = Split(codeInt, ",")
        planNum = Split(lNumInt, ",")
        For i = 0 To UBound(ci) ' recherche code pays
            If Left(num, Len(ci(i))) = ci(i) Then
                If Len(num) = Len(ci(i)) + Val(planNum(i)) Then
                    num = "00" & ci(i) & "-" & Mid(num, Len(ci(i)) + 1)
                    Exit For
                ElseIf valide Then
                    num = vbNullString: Exit For
                End If
            End If
        Next i
        If i > UBound(ci) And valide Then num = vbNullString
    End If
    numTel = num
End Function


Pour ma part, il ne faut pas mettre la cellule à Vide, mais effectivement pourquoi pas informé des erreurs et proposer de la corriger
Par défaut la fonction ne met pas à vide et laisse le n° tel que.
Par contre elle peut avoir 2 rôles.
- juste formater les n° valides au format désiré.
- ou bien un rôle de contrôle en mettant le paramètre optionnel à True
Les n° non valides sont vidés. C'est à toi de faire une 2nde passe si tu désires alerter dessus (mettre sa cellule en rouge par exemple) quand la fonction te retourne "".
 

Pièces jointes

  • XLD_Phone_Number_Format.xlsm
    36.2 KB · Affichages: 6

_Thierry

XLDnaute Barbatruc
Repose en paix
On s'est croisé @eriiiic

J'ai mis la main à la patte vu qu'on a du pain sur la planche ...
Voici une version "justaposée" sur celle de ton Post #421 de la Page 22

J'y ai intégré une Lib récupéré du GitHub (json file)

On avance ...
@+Thierry
 

Pièces jointes

  • XLD_Phone_Number_Format_v03.xlsm
    36.6 KB · Affichages: 6

eriiic

XLDnaute Barbatruc
Voui, ça avance ;-)
Je pense que c'est complet pour l'usage de Virginie. A voir sur un test plus large pour les cas particuliers qui ne manqueront pas de surgir
Par contre j'ai cru comprendre que le but final était d'intégrer ça dans un xlam et je ne suis pas sûr qu'on puisse accéder à ses feuilles.
C'est pour ça que j'ai mis les paramètres pays sous forme de chaine (et limité aux seuls listés du coup)

J'y ai intégré une Lib récupéré du GitHub (json file)
Heuuu, quoi ça ? Où ça ?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Eric, j'ai synchronisé avec ta function

Oui on peut avoir une feuille dans une xlam, j'ai répondu ceci à Patrick il y a queqlues posts (Attention aux manips par contre)

Bon avec ta version, on a encore des tout petits "hics" qui sont gérés dans la parties "Eric-Thierry'

Je pense que le rapport en Colonne C de la Source approrte aussi quelque chose...

Bien à toi
@+Thierry

PS pour :
J'y ai intégré une Lib récupéré du GitHub (json file)
Heuuu, quoi ça ? Où ça ?
J'avais aussi mis le lien, en JavaScript si on est membre de GitHub, on peut même lire le JAR en tant réel pour fabriquer des APP Google, mais là j'ai juste "pompé" la lib, pour la mettre dans Excel, elle est plus rationnelle que tes "drapeaux"
 

Pièces jointes

  • XLD_Phone_Number_Format_v04.xlsm
    39.9 KB · Affichages: 7
Dernière édition:

Virginie17d

XLDnaute Occasionnel

Messieurs,

Je viens de tester le dernier fichier avec la patte de tous et la version ERIC-THIERRY est celle qui semble répondre le mieux
Par contre j'ai ajouté des valeurs réélles et le traitement s'arrête en ligne 50, juste au cas ou cela à été oublié.
Je vois que j'ai activé des machines de guerre avec mes histoires, beau travail d'équipe bien que j'ai peur de ne pas vous arreter en si bon chemin
Vous êtes géniaux !!!
 

Virginie17d

XLDnaute Occasionnel
Je fou la merde au cas ou j'ai encore un peu le droit.
Je viens de tomber sur un fichier client ou j'ai la valeur
+31 (0) 6X XXX XX XX

Toutes les cas de figures ne sais pas traités
j'avais pas envisager d'avoir le 0 entre (), mais ok je sorssssssssssss a la fois je crois que c la 1ère fois qu'on me l'a fait
@_Thierry , ne te fache pas j'ai reçu le fichier à l'instant, non je t'assure, je mens pas et oui la vaisselle est déjà faite
 

patricktoulon

XLDnaute Barbatruc
Le "Benchmark" à l'heure actuelle !

Regarde la pièce jointe 1066040

Qui fera mieux ! LoL

@+Thierry
46?? je ne vois pas quel code tu a pus essayer je n'en ai pas fait
le seule truc que j'ai fait et c'est une esquisse c'est pour le français et 3 formats différents en ce qui concerne les tel comme je l'ai dit c'est pas ma charge et vous m'avez perdu depuis plusieurs pages déjà car je connais déjà la destination
ce sera un sujet sans fin

Thierry pas mal le JS
MAIS adapté en vb ca va faire une sacre usine a gaz ce truc
je pense que c'est un projet a part qu'il faudrait ouvrir

virginie
ajoute un replace parenthèses gauche et droite
perso j'ai déjà vu aussi [+3] et tant d'autres encore
ça n'aura pas une fin heureuse
et quand il y aura x mille lignes ben un beau whitescreen vous tendra les bras
bon comme j'ai rien faire j'observe
la seule chose qui sera efficace c'est une table de format et je dit bien de format
et encore il faudra la mettre a jour a chaque nouveau format non connu
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Hi Patrick,

Pour 46 c'est ton code Post #377 et sûrement que je sais que c'était qu'une approche FR simple et efficace si on n’avait pas affaire avec une certaine Vivi... Mon "Benchmark à la noix" c'est juste pour exciter les contributeurs LoL

Pour JS oui adapté en Vb je ne vois pas trop comment chopper les MetaData on line...

Pour ta remarque à propos d'une fin heureuse pour Virginie, oui ca sent le gaz de plus en plus... et en plus du gaz bourré à la corona ! (Dans les deux sens du terme, quoique du gaz ivre à la bière, c'est qu'on est tombé dans la citerne de fermentation dans la brasserie !)

Hi Virginie,
Je ne me fâche jamais moi, comme j'ai dit, ça me fait rigoler...
Dis-moi tes clients ils n'envoient pas leur coordonnés sur "Papier Libre" quand même je suppose qu'ils doivent passer par un portail web de votre entreprise, je pense que c'est par là que tu dois attaquer le "Web-Master" pour qu’il ne laisse pas un champ "Free Text" pour renseigner les Tels... Parce que là c'est définitivement sans fin à l'infini... En plus il y a tous pleins d'Open Source pour intégrer ce genre de Téléphone TextBox Structurée, même avec des petits drapeaux par pays et tout et tout...

Car là tu demandes à Excel de "réparer" les "co....ries" de l'outil de récupération des données client qui s'inscrivent... Si c'est parce que vous avez différents logiciels sources (Amadeus, Sabre & co...), c'est Idem il faut une standardisation ISO en amont, pas quand ça arrive dans Excel...

Mais bon c'était un bon challenge

@+Thierry
 

Virginie17d

XLDnaute Occasionnel

Si Malheureusement, c'est un doc Excel vierge qu'il remplisse, mais honnetement je pense que vous avez soulever la majorité des cas (99%), on s'en fou si le reste est faux, je serais l'intégré et ils corrigerons à la 1ère connexion sur la plateforme. (Les clients c'est comme les enfants ils sont parfois épuisant)
Je n'intègre pas ces données dans Amadeus, mais dans des SBTs (Self Booking Tools) et ensuite c'est l'outil de réservation en ligne qui contient un custom mapping afin de synchronisés les données dans Amadeus.

Afin que je vous laisse finir de travailler(vous amusez), peut on envisager d'adapter la version "Eric-Thierry" dans mes Macros ? et comment afin d'utiliser le Ruban (Selection,Colonne,Multi-Colonne) si nous sommes obligés de supprimer cette option et que j'ai juste l'option colonne ca me conviens parfaitement
 

Discussions similaires

Réponses
1
Affichages
432
Réponses
5
Affichages
272
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…