Anonymiser des N° de téléphone

[Fermé]
Signaler
-
Messages postés
54877
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
-
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

Messages postés
17601
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
4 785
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.
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.
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
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
847
Bonsoir,

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

cdlt
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.
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
847
Bonsoir,

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


cdlt
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
Messages postés
17601
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
4 785
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
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
Messages postés
24201
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
22 octobre 2021
6 937
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
Messages postés
17601
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 octobre 2021
4 785
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.
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.
Messages postés
54877
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
16 775
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)
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.
Messages postés
24201
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
22 octobre 2021
6 937
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
Messages postés
54877
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
16 775
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.
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.
Messages postés
54877
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 octobre 2021
16 775
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 ...
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.