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

Virginie17d

XLDnaute Occasionnel
1588208871672.png
 

Pièces jointes

  • MACROS VBA PERSONNEL.xlsm
    60.1 KB · Affichages: 264

eriiic

XLDnaute Barbatruc
bonsoir eriiiic
relis le code
les numeros sont nettoyés avant test right 9 :rolleyes:
Relis plus attentivement ce que j'ai écrit au lieu de rouler des yeux ;)
Et relis-toi...
x = Right(x, 9) ' tu prends les 9 derniers
If Left(x, 2) = "33" Then x = Mid(x, 3) ' là rien ne te choque ? 7 chiffres en france c'était bien avant l'an 2000, du temps où il fallait faire le 16 :)
eric
 

Virginie17d

XLDnaute Occasionnel
Par contre, je dois l'adapter, pour lancer la requete sur l'ensemble de la colonne et ignoré les cellules vides et ne pas les considérés comme une erreur.

Je suis désolée mais je vais devoir vous abandonner pour ce soir, je ne sais pas si c'est le Kiné mais je suis HS. A moins que ce soit vous qui me fassiez tourné la tête :D :D :D :D :D

JE vous souhaites en douce et belle nuit.

Encore milles mercis pour votre aide
 

Virginie17d

XLDnaute Occasionnel
Si Virginie est d'accord alors, "la cliente est Reine" moi je n'utiliserai pas ce travail pour moi, c'est juste pour me remettre un peu dans le monde VBA, je suis trop niveau boulot dans TSQL et le C/al et maintenant le AL... Ca me distrait ;)

@+Thierry
Bonjour Messieurs,

Je suis désolée de l'abandon d'hier mais j'étais sur les rotules., je suis pas contre un GET, par contre là j'ai besoin d'aide, car je ne sais pas comment faire.
Déjà que la dernière version de Thierry je n'arrive pas à le remplacer dans le module existant, car tu as la valeur en colonne A et le résultat en B.

Sub test()
x = CStr(cel): x = Replace(Replace(Replace(Replace(Replace(x, " ", ""), ".", ""), "-", ""), ",", ""), "+", "") 'ensemble des formats à remplacer par""

If Len(x) >= 9 Then
x = Right(x, 9) '9 ??? je ne pense pas j ai des numeros internationnaux non reocnnu 212....
If Left(x, 2) = "33" Then x = Mid(x, 3)
cel.Offset(, 1) = x & " bizarre" 'je ne comprends pas, pourquoi il traite le 01.XX.XX et pas le 03.XX.XX
Select Case Left(Val(x), 1)

Case 6, 7: cel.Offset(, 1) = "0033-" & x
Case 1, 2, 3, 4, 5, 8, 9: cel.Offset(, 1) = Format(Val(x), """0033-""@-@@@@@@@") ' j'ai ajouté le 3 et le 9

End Select
End If
Next
End Sub
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

@patrick. Pour être plus précis, teste ta proposition avec le 03.34.74.45.12 par exemple.
Une proposition, tout numéro non reconnu comme national est laissé tel que :
Code:
Sub numTel()
    Dim datas, lig As Long, num As String, i As Long, b_fr As Boolean
    datas = Range("A1:A15").Value2
    For lig = 1 To UBound(datas)
        b_fr = False
        num = Replace(Replace(Replace(Replace(Replace(datas(lig, 1), " ", ""), ".", ""), "-", ""), ",", ""), "+", "")
        If Left(num, 4) = "0033" Then num = Right(num, 9): b_fr = True
        i = 1: Do While Mid(num, i, 1) = "0": i = i + 1: Loop
        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
            Select Case Left(num, 1)
                Case "6", "7"
                    datas(lig, 1) = Format(Val(num), """0033-""#-########")
                Case Else
                    datas(lig, 1) = "0033-" & num
            End Select
        End If
    Next lig
    [B1].Resize(UBound(datas)) = datas
End Sub
eric
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Déjà que la dernière version de Thierry je n'arrive pas à le remplacer dans le module existant, car tu as la valeur en colonne A et le résultat en B.

Bonjour Virginie,
Tu n'as pas bien compris, pour l'instant ce fichier c'est indépendant de ton programme, c'est un POC (Proof Of Concept) il n'est pas intégrable pour l'instant dans ton programme. Son rôle et but c'est de trouver le meilleur alogo pour géréer tous tes cas de figure dans un fichier "SandBox" de test.

Bonne journe
@+Thierry
 

Virginie17d

XLDnaute Occasionnel
Bonjour à tous,

@patrick. Pour être plus précis, teste ta proposition avec le 03.34.74.45.12 par exemple.
Une proposition, tout numéro non reconnu comme national est laissé tel que :
Code:
Sub numTel()
    Dim datas, lig As Long, num As String, i As Long, b_fr As Boolean
    datas = Range("A1:A15").Value2
    For lig = 1 To UBound(datas)
        b_fr = False
        num = Replace(Replace(Replace(Replace(Replace(datas(lig, 1), " ", ""), ".", ""), "-", ""), ",", ""), "+", "")
        If Left(num, 4) = "0033" Then num = Right(num, 9): b_fr = True
        i = 1: Do While Mid(num, i, 1) = "0": i = i + 1: Loop
        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
            Select Case Left(num, 1)
                Case "6", "7"
                    datas(lig, 1) = Format(Val(num), """0033-""#-########")
                Case Else
                    datas(lig, 1) = "0033-" & num
            End Select
        End If
    Next lig
    [B1].Resize(UBound(datas)) = datas
End Sub
eric
Hello,

Si si j'ai bien compris mais je pensais que c'était finis et que now je devais me débrouiller pour imbriqué tout cela.
donc dans cette denière proposition le numéro en 03.XX n'est pas reconnu alors que 03 est une indicatif français et 212 est transformer en numéro en retirant une valeur alors que 212 est l'indicatif du Maroc et donc ne devrais pas être traité ou juste mit en jaune
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Exact Vivi !

Oui il y a du pain sur la planche !!! Ca ne fait pas encore tout !!!
C'est pour ca que j'ai fait le POC, à mon avis il faudrait ouvrir un nouveau fil de discussion....
"Challenge pour formatter les Numéros de Téléphone" en utilisant le POC ...

@+Thierry
 

eriiic

XLDnaute Barbatruc
Ah oui, j'ai juste inversé les 2 formats.

Par contre je ne suis pas d'accord avec ton fichier Thierry :
21234556567​
21234556567​
0033-2-34556567
FAUX​
Ce n° ne correspond pas à un n° français qui doit faire 9 chiffres, ne commençant pas par 0, précédé éventuellement de 0, 33, 0033, etc
Erreur de ta part ou exception justifiée ?

Pour les n° internationaux ils sont impossible à traiter sans une table des codes internationaux. Ils font de 1 à 4 chiffres.
D'où mon choix de laisser inchangé tout ce qui ne correspond pas à un n° reconnu français. On pourrait éventuellement reconnaitre quelques code internationaux les plus utilisés dans ses listes mais tous ça parait inutiles.
eric
 

eriiic

XLDnaute Barbatruc
Re,

j'ai remis les formats mobile/fixe dans le bon ordre et ajouté le traitement des n° internationaux.
Je ne les traite que s'ils commencent par "00"
On ne peut pas se contenter du fait qu'il commence par 377 pour affirmer qu'il s'agit de Monaco.
Il faut qu'en plus le nombre de chiffres après respecte la numérotation du pays, sinon c'est une erreur de saisie à laisser telle que pour moi.
9 chiffres pour Monaco mais il faudrait le connaitre pour chaque code international mis.
Une fois ces longueurs connues on pourra ajouter une table des longueurs pour contrôler et valider.
VB:
Sub Test_Eric()
    Const codeInt As String = "1,32,34,39,44,49,262,352,376,377"
    'Const lNumInt As String = "?,?,?,?,?,?,?,?,9,9"
    Dim datas, lig As Long, num As String, i As Long, b_fr As Boolean, ci
    datas = Range("A1:A50").Value2
    ci = Split(codeInt, ",")
    For lig = 1 To UBound(datas)
        b_fr = False
        num = Replace(Replace(Replace(Replace(Replace(datas(lig, 1), " ", ""), ".", ""), "-", ""), ",", ""), "+", "")
        If Left(num, 4) = "0033" Then num = Right(num, 9): b_fr = True
        i = 1: Do While Mid(num, i, 1) = "0": i = i + 1: Loop ' éliminer zéros du début
        If (Len(num) - i + 1 = 9 Or Len(num) = 11 And Left(num, 2) = "33") And Left(num, 2) <> "00" Then num = Right(num, 9): b_fr = True
        If b_fr Then ' national
            Select Case Left(num, 1)
                Case "6", "7" ' mobiles
                    datas(lig, 1) = "0033-" & num
                Case Else ' régionaux
                    datas(lig, 1) = Format(Val(num), """0033-""#-########")
            End Select
        ElseIf Left(num, 2) = "00" Then ' international
            For i = 0 To UBound(ci)
                If Mid(num, 3, Len(ci(i))) = ci(i) Then
                    datas(lig, 1) = Left(num, Len(ci(i)) + 2) & "-" & Mid(num, Len(ci(i)) + 3)
                    Exit For
                End If
            Next i
        End If
    Next lig
    [B1].Resize(UBound(datas)) = datas
End Sub

Il y a un autre cas où je ne suis pas d'accord avec toi Thierry, c'est :
1673227883​
1673227883​
0033-673227883
FAUX​
1673227883 ne correspond pas à un n° correct, on ne peut pas le valider et remplacer le 1 par 0033
eric
 

Pièces jointes

  • XLD_Phone_Number_Format.xlsm
    34.4 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
Bonjour a tous
purée ça mouline ici
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

quand a moi je me suis plongé dans mon idée de customUI editor
j'ai fait un test et je bloque sur un point en ce qui concerne le ZIP
et je n'arrive pas a gérer l'erreur
a vrai dire je ne sais pas comment non plus , si tant est que cela soit possible (je pense que oui )
mais je vais ouvrir un autre post pour ça
ce qui voudrons bien me filer un coup de main seront les bien venu
je mettrais l'interface (form de construction) après pour le moment c'est un bouton qui crée le zip avec tout dedans sur la base d'un xlsm vierge
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 205
dernier inscrit
zch