[Excel] transformer une fonction en sa valeur

Résolu/Fermé
kbastien Messages postés 64 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 1 avril 2020 - Modifié par kbastien le 29/06/2012 à 07:47
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 30 juin 2012 à 00:59
Bonjour,

Je suis présentement en train de faire un fichier Excel simulant une "Departure List" pour simuler du trafic aérien virtuel. je suis maintenant à l'étape d'assigner aléatoirement un "code transpondeur" (4 chiffre dont chacun varie de 0 à 7; ex:0577) j'ai créer une macro toutes simple qui fait automatiquement cela.

la formule que la macro envois dans la case que je lui assigne est: =ALEA.ENTRE.BORNES(1;7) & ALEA.ENTRE.BORNES(1;7) & ALEA.ENTRE.BORNES(1;7) & ALEA.ENTRE.BORNES(1;7)

Le but de cela est d'assigner un code transpondeur à chaque aéronef, mais celui-ci, une fois assigner, NE DOIT PLUS CHANGER. C'est là le problème, car dès que j'entre une autre donnée dans ma feuille Excel le "code" change.


Je cherche une manière (fonction à intégrer dans ma macro) ou tout simplement une autre macro. Cette macro me permettrais de transformer automatiquement, dès la création de la valeur aléatoire par ma macro, en valeur fixe où l'on pourrais aller dans la barre de formule et voir tout simplement 0577 au lieu de la grande formule.


Je sais que c'est pas tout simple ma question, mais je suis sur qu'il y a de très bonne personnes qui sont plus calé que moi dans Excel et qui pourrons m'aider

S'il y a des parties qui ne sont pas trop claires à vos yeux n'hésitez pas à me poser des question pour éclairer ce sujet.

Merci d'avance à tout commentaire constructif

sous excel 2007
A voir également:

3 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 29/06/2012 à 21:45
Bonjour,

Autre proposition avec une fonction personnalisée.
Tu lui passes en paramètre l'identification de l'appareil.
Un ident retournera toujours le même n° de transpondeur.
Ex :
ACA234 -> 7620
COO994 -> 630
Function transpondeur(ch As String) As Long
    Dim i As Long, graine
    For i = 1 To Len(ch)
            graine = graine * 10 + CLng(Asc(Mid(ch, i, 1)) - 47)
    Next i
    Rnd (-graine)
    For i = 1 To 4
        transpondeur = transpondeur * 10 + Int(Rnd() * 8)
    Next i
End Function

Syntaxe :
=transpondeur(B3)

https://www.cjoint.com/?BFDuTvkC8fk

eric
1
kbastien Messages postés 64 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 1 avril 2020 4
29 juin 2012 à 22:00
merci beaucoup, ça fonctionne à merveille
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 30/06/2012 à 00:59
J'ai fait évoluer un peu le code pour limiter le risque de doublons, prend plutôt celui du post que celui du fichier que je n'ai pas mis à jour.
eric
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juin 2012 à 07:45
Bonjour,

exemple:

Sub test()
  'Bornes 0-7
  'si 1-7: CStr(Int(7 * Rnd)+1)
  y = CStr(Int(7 * Rnd)) & CStr(Int(7 * Rnd)) & CStr(Int(7 * Rnd)) & CStr(Int(7 * Rnd))
  'Mettre format cellule en texte si bornes 0-7
  Worksheets("feuil1").Range("A1") = Format(y, "0000")
End Sub


Bonne suite
0
ccm81 Messages postés 10852 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
29 juin 2012 à 08:20
bonjour

RQ1. le code de f894009 (cordiales salutations à toi) produit une chaine
RQ2. une petite erreur (je crois), int(7*rnd) produit un entier de 0 à 6
donc pour un entier de 0 à 7 c'est int(8*rnd)
RQ3. si tu veux produire un entier
y = 1000*int(8*rnd)+100*int(8*rnd)+10*int(8*rnd)+int(8*rnd)
mettre la cellule recevant l'entier au format personnalisé 0000

bonne journée
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juin 2012 à 09:21
Bonjour ccm81,
En effet, int(7*rnd) produit un entier de 0 à 6, je me fais avoir presque a chaque fois.
Pour le format, la personne adapte en principe en fonction de ce qu'elle fait.

Bonne journee
0
kbastien Messages postés 64 Date d'inscription dimanche 26 décembre 2010 Statut Membre Dernière intervention 1 avril 2020 4
Modifié par kbastien le 29/06/2012 à 18:50
sa fonctionne, presque.

Je m'explique la macro fonctionne parfaitement excepter que je veux pouvoir faire en sorte que ce soit la cellule qui est sélectionner qui affiche le code, car en ce moment ce n'est que la cellule A1 dans ma feuille 1 qui affiche même en sélectionnant d'autre case ou d'autre feuille ça ne change que la valeur en A1

exemple :
A_________B________C_____D___ E_____F_____G______H____________I
DEP_____ACID_____TYPE___FR __ALT__DEST__RWR___CODE _______Callsing

CYYZ___ACA680____B747____I___FL310 CYUL____27___0577______AIR CANADA
CYXU___AFR228____A380____I___FL320 CYUL____27___4531______AIR FRANCE
....


il faut que la macro puisse donner des codes pour chacuns et dans la cellule que je sélectionne en l'occurrence les cellule de la ligne «H»
0