[Excel] transformer une fonction en sa valeur

Résolu
kbastien Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

3 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. kbastien Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   4
       
      merci beaucoup, ça fonctionne à merveille
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    2. kbastien Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   4
       
      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