RESOLU - Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Nouveau problème .... nouvel appel au secours
J'ai cherché sur le net mais pas trouvé de réponses correspondantes à mon souci :

C'est un problème de copies de numéros de téléphone

Je copie en permanence des numéros de téléphones de gens que j'appelle.
(au passage, mes appels ont été préalablement acceptés)

Afin de ne pas les appeler plusieurs fois (ce qui ne serait pas sérieux), je copie leurs numéros dans notre fichier excel.

Ces numéros sont copiés sur sites.

Malheureusement, le copier/coller me donne des numéros avec les variantes suivantes :

06 11 11 11 11 et éventuellement des espaces au bout (il y en a souvent plusieurs jusqu'à ?)
ou
6 11 11 11 11 et éventuellement des espaces au bout (il y en a souvent plusieurs jusqu'à ?)
ou
06-11-11-11-11 et éventuellement des espaces au bout (il y en a souvent plusieurs jusqu'à ?)
ou
06/11/11/11/11 et éventuellement des espaces au bout (il y en a souvent plusieurs jusqu'à ?)
et biens d'autres variantes que j'oublie présentement ....

Quand j'appelle une nouvelle personne, j'ai besoin de faire une recherche pour être certain que je n'ai pas déjà appelé.

Je saisie le n° normalement : 611222333
évidemment, ça ne marche pas.

Mon besoin :

Je souhaite forcer la saisie (donc la validation du copier/coller) à 9 chiffres et qu'excel détecte les espaces (où qu'ils soient) et le 0 en premier ... comme des caractères en trop et refuse tout ce qui n'est pas un chiffre avec un maxi de 9 chiffres acceptés

J'ai essayé avec la validation des données mais ça ne marche pas.

Pourriez-vous m'aider ?

En espérant que mes explications sont compréhensibles (je ne vois pas ce que je pourrais joindre comme fichier mais je suis prêt à en faire un si vous me le demandez)

Avec mes remerciements,
Je vous souhaite un bon WE à toutes et à tous,

Amicalement,
Invariablement Caliméro,
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour à tous

arthour973
En espérant que mes explications sont compréhensibles (je ne vois pas ce que je pourrais joindre comme fichier mais je suis prêt à en faire un si vous me le demandez)
Je le demande ;)
(avec des numéros de teléphone bidons évidemment mais avec les espaces dedans ;))
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour David 84,

Merci pour votre information,

Mais je suis toujours nul en vba et je ne sais pas où je dois mettre votre macro pour la tester.

Code:
Function NombreDansChaine(c As String) As Double
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
If IsNumeric(c) Then NombreDansChaine = c: Exit Function
With oRegExp
  .Global = True
  .Pattern = "[^0-9]"
  If .test(c) Then NombreDansChaine = .Replace(c, "")
End With
End Function

Amicalement,
Calimero,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Re-Bonjour à toutes et à tous,

La fonction de Monsieur BOISGONTIER, répond presque complètement à mon besoin.

Il me manque deux choses :

est-il possible de ? :
supprimer le "0" (premier chiffre cellule G7)
limiter à 9 chiffres
Je joins le classeur (LOL pour Staple1600)

Ce serait super !!!

Amicalement,
Calimero,
 

Pièces jointes

  • Fonction_NumChaine.xls
    42.5 KB · Affichages: 48

ROGER2327

XLDnaute Barbatruc
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour à tous.


(...)
La fonction de Monsieur BOISGONTIER, répond presque complètement à mon besoin.

Il me manque deux choses :

est-il possible de ? :
supprimer le "0" (premier chiffre cellule G7)
limiter à 9 chiffres
(...)
Essayez :​
Code:
Function NumChaine$(chaine$)
Dim i&, temp$, c$
  For i = 1 To Len(chaine)
    c = Mid$(chaine, i, 1)
    If c >= "0" And c <= "9" Then temp = temp & c
  Next i
  NumChaine = Mid$(temp, 1 - (Left$(temp, 1) = "0"), 9)
End Function


Bonne nuit.


ℝOGER2327
#7863


Vendredi 20 Palotin 142 (Saint Ti Belot, séide - fête Suprême Quarte)
20 Floréal An CCXXIII, 8,4311h - sarcloir
2015-W19-6T20:14:05Z
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Re-Bonsoir Roger2327,

Vraiment super votre macro mais il me reste un problème que je n'avais pas prévu. C'est indépendant de votre macro :

En fait, je suis en Tunisie et pour appeler la France, il me faut faire le 33 devant tout numéro.
Pour gagner du temps car je fais beaucoup de numéros chaque jour, j'ai un petite macro qui ajoute 33 automatiquement quand je clique sur une cellule de la même ligne (col J)

Votre macro intervenant avant l'ajout du 33, donc avec un maxi de 9 chiffres ..... ça marche super.

Mais s'il m'arrive, sur une ligne col J après l'ajout du 33, de cliquer par erreur sur la cellule J qui déclenche votre macro, ça me supprime les deux derniers chiffres puisque la cellule contient alors 11 chiffres et non 9.

Test :
n° original : 33682315803 clic 1 = n° obtenu : 336823158 (les deux derniers ont disparu),

J'ai essayé de faire une seconde macro partant de la votre qui supprimerait le 33 à la place du zéro mais je n'y arrive pas
d'autant que je ne sais pas comment la renommer.

Pourriez-vous m'aider encore une fois ?

Je ne sais pas comment vous remercier,
Amicalement,
Calimero,
 

Staple1600

XLDnaute Barbatruc
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour à tous

arthour973
Tout comme david84, je passerai par RegExp
Code:
Function Numero(ByVal txt As String) As String
With CreateObject("VBScript.RegExp")
    .Pattern = "\D+"
    .Global = True
    Numero = .Replace(txt, "")
End With
End Function
Sache qu'on peut utiliser les fonctions VBA personnalisées avec les fonctions natives d'Excel
(comme ci-dessous par exemple)
Code:
=STXT(SI(GAUCHE(NUMERO(G3))="0";STXT(NUMERO(G3);2;9*9);NUMERO(G3));1;9)

Un indice pour la macro de Roger2327
contient alors 11 chiffres et non 9
Ne vois-tu pas ce chiffre dans la dernière ligne de sa macro ?
Donc je laisse déduire ce qu'il faut faire avec 11 ;)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour JM,
Bonjour Roger2327,
Bonjour à toutes et à tous,

Merci pour votre post de ce dimanche matin.
J'étais en train de travailler sur mon classeur quand je l'ai reçu et j'attendais d'avoir avancé pour vous répondre.

Effectivement, votre RegExp marche super et j'ai pu (puisque j'ai deux n° à traiter par ligne), faire deux fonctions avec (ce que je n'ai pas réussi à faire avec la fonction de Roger.

Voici ce que j'ai fait :
Fonctions Numéro
Code:
Function Numero(ByVal txt As String) As String
With CreateObject("VBScript.RegExp")
    .Pattern = "\D+"
    .Global = True
    Numero = .Replace(txt, "")
End With
End Function
Function Numero1(ByVal txt As String) As String
With CreateObject("VBScript.RegExp")
    .Pattern = "\D+"
    .Global = True
    Numero1 = .Replace(txt, "")
End With
End Function

dans le code de ma feuille
Code:
Private Sub Worksheet_Activate()
Call DLrsnr
End Sub
Private Sub Worksheet_SelectionChange(ByVal R As Range)
    If Not Intersect(R, Range("J7:J2000")) Is Nothing Then
    Call AjouteC33
    Call AjouteB33
    Application.EnableEvents = 0: R.Select: Application.EnableEvents = 1 '...revient
    ActiveSheet.Protect Password:="Krameri", DrawingObjects:=True, Contents:=True, Scenarios:=True
    Application.EnableEvents = True
    End If
End Sub

dans un module (Ajoute33
Code:
Sub AjouteC33()
Application.EnableEvents = False
Application.ScreenUpdating = False
ActiveWorkbook.ActiveSheet.Select
ActiveSheet.Unprotect Password:="Krameri"
ActiveCell.Offset(0, -7).Select
Dim Lg%, i%
    Application.ScreenUpdating = False
    Lg = Range("c65536").End(xlUp).Row
        For i = 7 To Lg
            If Left(Cells(i, "c"), 2) <> "33" And Cells(i, "c") <> "" Then
                Cells(i, "c") = "33" & Cells(i, "c")
            End If
        Next i
Selection.Copy
ActiveCell.Offset(0, 4).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
ActiveCell.Offset(0, -4).Select
ActiveCell.FormulaR1C1 = _
        "=MID(IF(LEFT(NUMERO1(RC[4]))=""0"",MID(NUMERO1(RC[4]),2,9*9),NUMERO1(RC[4])),1,11)"
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Sub AjouteB33()
Application.EnableEvents = False
Application.ScreenUpdating = False
ActiveWorkbook.ActiveSheet.Select
ActiveSheet.Unprotect Password:="Krameri"
ActiveCell.Offset(0, -1).Select
Dim Lg%, i%
    Application.ScreenUpdating = False
    Lg = Range("b65536").End(xlUp).Row
        For i = 7 To Lg
            If Left(Cells(i, "b"), 2) <> "33" And Cells(i, "b") <> "" Then
                Cells(i, "b") = "33" & Cells(i, "b")
            End If
        Next i
Selection.Copy
ActiveCell.Offset(0, 6).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
ActiveCell.Offset(0, -6).Select
ActiveCell.FormulaR1C1 = _
        "=MID(IF(LEFT(NUMERO(RC[6]))=""0"",MID(NUMERO(RC[6]),2,9*9),NUMERO(RC[6])),1,11)"
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

ça marche super et je peux cliquer "par erreur" autant de fois que je veux.

Un grand merci à tous pour votre aide si précieuse.

Un bon dimanche pour toutes et tous,
Amicalement,
Calimero,
 

Staple1600

XLDnaute Barbatruc
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Re

arthour973
Pourquoi doubler la fonction NUMERO ?
Tu peux utiliser simplement NUMERO sans devoir en créer une copie, non ?

NB: Pour info, la fonction de david84 qui utilise aussi regexp fonctionnait aussi très bien (et ce depuis hier 15h52) ;)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re : Macro obliger saise nombre de chiffres (sans espace) dans cellule)

Bonjour JM,

"Pourquoi doubler la fonction NUMERO ?
Tu peux utiliser simplement NUMERO sans devoir en créer une copie, non ?"

J'ai fait cela parce que la fonction "Ajoute33" qui se lance (module de la feuille) quand je sélectionne la cellule en col J ajoute un 33 devant à chaque fois.

"NB: Pour info, la fonction de david84 qui utilise aussi regexp fonctionnait aussi très bien (et ce depuis hier 15h52)",

C'est vrai mais quand il me l'a passé, je ne savais même pas comment faire fonctionner la fonction.
Je n'ai compris qu'après quand Robert m'a passé la sienne et je suis parti sur celle de Robert et ensuite sur la votre.

Encore un grand Merci à tous sans oublier David84 :)

Bon dimanche à tous,
Amicalement,
Calimero (Lionel),
 

Discussions similaires

Réponses
12
Affichages
287