Anonymiser des N° de téléphone

Tessel75 -  
Raymond PENTIER Messages postés 58989 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Qui serait intéressé à m'aider à écrire un petit code pour convertir des chiffres en lettres? Il s'agit en la circonstance d'anonymiser des N° de téléphone qui n'ont pas nécessité à être conservés en clairs.
L'idée serait d'avoir un processus aléatoire qui convertisse chaque chiffre en une lettre quelconque de sorte qu'il ne soit plus reconnaissable mais néanmoins utilisable pour une exploitation statistique.
Avec mes remerciements pour vos propositions.


11 réponses

Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Bonsoir,

Sur quelle application et quelle version

et dans quoi veux tu crypter tes saisies, texbox, inputbox, une cellule ?

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Tessel75
 
Merci de ta réponse.
La version utilisée sera, au moins pour le moment, E2003, mais ce pourra être du E2010.
Parler de cryptage est un bien grand mot. Il s'agit simplement de convertir un N° comme 0123456789 en ABCDEFGHIJ. La zone de conversion sera une cellule normale avant l'importation du tableau dans une table Access.
Ma demande est la suite de ma question précédente
http://www.commentcamarche.net/forum/affich-31068767-comptage-des-repetitions-dans-un-tableau

Ma 1ère idée est d'avoir un processus itératif sur i = 1, 2, 3 ...etc menant à une formule du genre alpha = Alea(1 à 24) puis une conversion de alpha en une lettre A, B, C ..., et enfin le remplacement du chiffre du N°.

Quand j'aurai un début je ne manquerai pas de l'envoyer.
0
Tessel75
 
Re-Bonjour Mike,
je t'adresse mon travail. Si tu as, ou si quiconque d'autre, quelque chose de meilleur ce sera le bien venu.
Dim ca As Variant
For i = 0 To 9
ca = Application.WorksheetFunction.RandBetween(0, 26)
If ca = 1 Then
ca = "a"
ElseIf ca = 2 Then ca = "b"
ElseIf ca = 3 Then ca = "c"
ElseIf ca = 4 Then ca = "d"
..................................................
ElseIf ca = 24 Then ca = "x"
ElseIf ca = 25 Then ca = "y"
ElseIf ca = 26 Then ca = "z"
End If
Columns("J:J").Select
Selection.Replace What:=i, Replacement:=ca, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next
End Sub
0
JvDo Messages postés 1978 Date d'inscription   Statut Membre Dernière intervention   859
 
Bonsoir,

attention, il faut que la séquence aléatoire soit sans répétition.
sinon tu fausseras les calculs statistiques.

cdlt
0
Tessel75
 
Merci pour l'intérêt à la question posée.
Oui bien sûr, j'y ai pensé. Mais quelle est probabilité pour que la même lettre sorte 2 fois sur 9 tirages d'un choix de 26 possibilités? Et quelle probabilité pour que si la même lettre sort 2 fois elle engendre la même séquence de lettres, ou autrement dit le même mot.
Si la 1ère probabilité n'est pas nulle, la seconde peut être considérée comme négligeable.
0
JvDo Messages postés 1978 Date d'inscription   Statut Membre Dernière intervention   859
 
Bonsoir,

tu peux remplacer ta séquence de "if then elseif ...." par
ca = Chr(Asc("a") + Application.WorksheetFunction.RandBetween(0, 25))


cdlt
0
Tessel75
 
Merci ! C'est exactement le genre d'expression dont j'avais besoin et que je recherchais. Je n'étais pas du tout satisfait de ma boucle "If ... Then ...". Je considère la question comme résolue. Je la laisse ouverte encore un peu, le temps de recevoir les autres réponses possibles.
Merci
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

alors pour crypter les numéros d'une colonne, tu n'as pas besoin d'aucun code.

déjà pour afficher un code postal surtout pour les numéros commençant par 0 comme 0555655566 il faut lui affecter la syntaxe code postal si non le zéro de départ ne sera pas pris en compte.
pour cela surbriller la plage concernée exemple F2:F100, clic droit sur la sélection/Format de cellule/onglet nombre/Spécial/numéro de téléphone

Maintenant pour crypter les numéros surbriller la plage exemple F2:F100, clic droit sur la sélection/Format de cellule/onglet nombre/Personnalisé/dans type saisir ce code pour avoir des étoiles "**********"
pour avoir des dièses "##########"

ou pour avoir que des zéros "0000000000"
ou pour avoir ABCDEFGHIJ saisir ce format "ABCDEFGHIJ"

pour réafficher les numéros surbriller la plage concernée exemple F2:F100, clic droit sur la sélection/Format de cellule/onglet nombre/Spécial/numéro de téléphone

pour éviter qu'un utilisateur découvre comment afficher les numéros, protège la feuille après avoir déverrouillé les cellule que doivent rester accessibles
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Maurice
 
Bonjour
si tes numero de telephone se trouve dans la colonne B

Sub TestTelephone()
Derlig = Range("B" & Rows.Count).End(xlUp).Row
For L = 2 To Derlig
Tel = ""
A = 65
For I = 1 To Len(Range("B" & L).Value)
T = Chr(Mid(Range("B" & L).Value, I, 1) + A)
Tel = Tel & T
Next
Range("C" & L).Value = Tel
Next
End Sub

A+
Maurice
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

utiliser le même code pour toute une liste me parait léger.
Il suffit de connaitre 2-3 N° de personnes pour tous les retrouver à mon avis.

Mike, avec le format personnalisé c'est vrai qu'on voit des **** mais va falloir supprimer la barre de formule et le double-clic ;-)

eric
0
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 135
 
Re,

Pour ne pas afficher les données dans la barre des formules, il suffit de sélectionner la plage, clic droit/Format de cellule/onglet protection et cocher Masquée, ensuite protéger la feuille et même si on autorise l'activation des cellules verrouillées la barre des formules reste blanche

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Tessel75
 
Merci à tous,
Pour aider à vous faire toucher du doigt mon problème je vous remets un extrait du tableau initial. http://cjoint.com/?3Krb0g9Jp4d
Les N° de tel sont sur la colonne J ("CallCLID"). J'y ai masqué les N° à la main avec des correspondances chiffre-lettre sorties de ma tête.

Eric, tu écris : "Il suffit de connaitre 2-3 N° de personnes pour tous les retrouver à mon avis. ". Ta remarque est très forte et bien vue, mais je ne fais pas du cryptage à proprement parlé, plutôt du masquage parce que la lecture directe des N° en clair ne présente aucun intérêt à ce niveau. Il s'agit de personnes qui appellent pour demander un rendez-vous; la compilation que je souhaite avoir est juste limitée à des calculs statistiques, entre autres combien d'appels effectifs avant d'obtenir une réponse, ou combien de personnes différentes ont appelées. La liste des N° n'est pas un trésor de guerre qui est menacé d'une exploitation extérieure parce qu'elle n'est pas destinée à être diffusée.
Mike: le simple changement de format ne suffit pas parce que le tableau est destiné à être chargé sur une table Access pour être recraché ensuite à des fins d'exploitation statistique. Le masquage a donc besoin d'être permanent quitte à ce que les vrais N° soient définitivement perdus. Pour ce pourquoi c'est fait, cela n'a aucune importance.
Maurice: peux-tu expliciter ta ligne :"T = Chr(Mid(Range("B" & L).Value, I, 1) + A) " . J'avoue que j'ai vraiment du mal à la comprendre. Quelle transformation opère-t-elle?
Encore Merci.
0
Raymond PENTIER Messages postés 58989 Date d'inscription   Statut Contributeur Dernière intervention   17 353
 
Oui, Tessel75, je peux effectivement proposer une solution sans macro, avec la formule =SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(A:A;1;"U");2;"D");3;"T"); 4;"Q");5;"C");6;"S");7;"P");8;"H");9;"N");0;"Z") en colonne B ...
Bien entendu, tu mets les lettres que tu veux à la place des miennes !
Attention : ne fonctionne pas avec Excel 2003 ...

Cordialement.

C'est bien, la retraite ! Surtout aux Antilles ... :-)
Raymond (INSA, AFPA, CF/R)
0
Tessel75
 
Merci Raymond. Mais ta solution est un peu lourde; celle de JvDo correspond exactement à ce que je recherchais. J'en ai profité pour en extraire une fonction personnelle que je propose au forum : X = AleaAlpha(z) avec :
Function AleaAlpha(z)
AleaAlpha = Chr(Asc("a") + Application.WorksheetFunction.RandBetween(0, 25))
End Function

Elle extrait une lettre aléatoire sur le même modèle que X=ALEA.ENTRE.BORNES(0;25) pour les nombres
Bonne suite à tous.
Question résolue.
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Tu ne devais pas faire de stat sur combien de personnes différentes ont appelé ?
Là j'ai l'impression qu'un même chiffre sera codé différemment à chaque fois. Un même n° n'aura jamais le même codage non ?
Il te faut créer une table de codage une fois au début et la garder pour traiter toute la liste.

eric

PS: sans oublier de traiter les doublons. Deux chiffres ne doivent pas avoir le même code.

eric
0
Raymond PENTIER Messages postés 58989 Date d'inscription   Statut Contributeur Dernière intervention   17 353
 
Oui, ma solution manque d'élégance ; mais ne manipulant pas VBA, je ne peux proposer de réponses qu'avec des outils classiques et des fonctions basiques.
Je suis quand même content d'avoir réussi à imbriquer convenablement mes SUBSTITUE pour obtenir un résultat répondant exactement à ta demande (contrairement à ta fonction personnelle dont Eric t'a montré les contraintes).
Salut à tous.
0
Tessel75
 
Salut Raymond, je n'avais lu ta réponse quand je rédigeais mon laius. Oui ta réponse répond à la question. Quant à ta manipulation des "outils classiques et des fonctions basiques", je serai également bien satisfait d'en avoir la même habileté et la même sureté. Pour ce qui est du VBA, je n'ai toujours pas compris pourquoi tu ne t'y étais collé. A l'heure du punch, par exemple !?!?!?
Bonne journée.
0
Raymond PENTIER Messages postés 58989 Date d'inscription   Statut Contributeur Dernière intervention   17 353
 
Tu as raison ; je vais finir par m'y mettre : en effet ma petite-fille, lycéenne, a besoin de mes lumières pour ses exercices d'algoritmique, ce qui n'existait pas dans les programmes il y a 60 ans. Et j'ai pu en constater la grande ressemblance avec VBA.
Du coup je serai contraint de plonger dans le grand bain des macros !
Mais cela n'aura aucune incidence sur ma relation privilégiée avec le petit punch des Antilles ...
0
Tessel75
 
Je te remets l'introduction que j'avais écrite pour ma première question sur le même sujet :
http://www.commentcamarche.net/forum/affich-31068767-comptage-des-repetitions-dans-un-tableau :
"Je reviens avec mon problème de standard téléphonique. J'ai un tableau de données représentant les appels téléphoniques adressés à une grande entreprise. Comme les appels n'aboutissent pas toujours dès la première fois, les correspondants appellent plusieurs fois jusqu'à ce qu'ils aboutissent. Je voudrais compter le nombre d'appels chacun a fait avant d'obtenir satisfaction. Le tableau brut me donne la date et l'heure à la seconde de chaque appel, le N°Appelé (il y a plusieurs N° possibles), le N°Appelant. J'ai classé les enregistrements (une ligne) par N°Appelant et par DateHeure. Je voudrais faire mon comptage. "
Comme tu peux voir, c'est exprès que je tiens à ce que la personne qui appelle plusieurs fois soit répertoriée autant de fois qu'elle a fait d'appels. Le même codage sur toute la colonne est même la garantie que lors du tri les mêmes N° seront bien regroupés. La seule chose qui diffèrera sera à l'occasion des différents encodages. J'extraie, ou j'extrayais, mes données toutes les 2 ou 3 semaines, alors le codage sera effectivement différent, mais comme la recherche porte sur le nombre de fois et le temps que met un correspondant pour recevoir une réponse cela ne joue vraiment que pour les appels de la même journée, et ne joue en rien pour 2 séries d'appels passées à distance. Le seul évènement pour lequel il peut arriver une distorsion est le cas où une personne appelle sans succès en fin d'après-midi, appelle à nouveau le lendemain matin, et que ce nouveau jour tombe précisément le jour où il y eu interruption et reprise des relevés pour une nouvelle période. Rapportée à plus d'une centaine de milliers d'appels par année, la distorsion, s'il y a, sera insignifiante.
Bien à toi.
0