IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Générer un nombre aléatoire entre 1 et 9999 [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut Générer un nombre aléatoire entre 1 et 9999
    Bonjour le Forum,
    Je cherche à générer un nombre aléatoire entre 1 et 9999
    dans une colonne A2 --> jusqu’à la dernière ligne remplie
    Sachant qu'il ya toujours une valeur dans la colonne B:B

    J'ai trouvé ce code sur Excelabo mais je ne sais pas trop comment l'adapter......

    QQn aurait une idée?

    bonne journée

    Seb




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Comment remplir une colonne avec 200 nombres qui ne se répètent jamais ?
    Sans macro : en A1 =ALEA() 
    en B1=RANG(A1;A:A) recopier vers le bas x fois selon l'étendue souhaitée 
    en colonne B on obtient x nombres sans jamais 2 fois le même! 
    Faire F9 pour une nouvelle génération avec VBA : Garanti sans doublon et sans boucle :
    sub tirage()
     leMax = InputBox("Valeur max", "Valeurs de 1 à valeur max")
     Application.ScreenUpdating = False
     [A1] = 1
     [A1].DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=leMax
     Range("B1:B" & leMax).Formula = "=RAND()"
     [A:B].Sort Key1:=Range("B1"), Order1:=xlAscending
     [B:B].Delete
     [A1].Select
     end sub
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub Tirage()
    Dim LeMax As Integer
     
    Application.ScreenUpdating = False
    LeMax = InputBox("Valeur max", "Valeurs de 1 à valeur max")
    With Worksheets("Feuil1")
        With .Range("A1")
            .Value = 1
            .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=LeMax
        End With
        .Columns(2).Insert
        .Range("B1:B" & LeMax).Formula = "=RAND()"
        .Range("A1:B" & LeMax).Sort Key1:=.Range("B1"), Order1:=xlAscending
        .Columns(2).Delete
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Excellent code !

    si on pouvait faire une petite adaptation

    Lemax = la valeur max du code et non pas jusqu'a quelle ligne remplir

    Je souhaite remplir la colonne A, avec le code aléatoire, jusqu'a la derniére ligne remplie dans la colonne B.

    Merci
    Seb
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ligne 1 celle des titres, sinon, il faudra adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub Tirage()
    Dim LeMax As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")
        LeMax = .Cells(.Rows.Count, "B").End(xlUp).Row
        With .Range("A2")
            .Value = 1
            .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=LeMax - 1
        End With
        .Columns(2).Insert
        .Range("B2:B" & LeMax).Formula = "=RAND()"
        .Range("A2:B" & LeMax).Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlNo
        .Columns(2).Delete
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    au poil !!!

    un grand merci à toi !


    Bonne journée

    Seb

    hello !
    je reviens vers toi

    Le code marche nikel

    par contre cela me pose un probléme pour le code suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ANNONCE_Click()
        Dim C As Range
        On Error Resume Next
        With Sheets("BASE EMPLOI")
            Set C = .Cells(Application.Match(CODEBASE, .[A2:A], 0), "AN")
        End With
        C.Hyperlinks(1).Follow True
        Application.Goto Range(C.Hyperlinks(1).SubAddress)
    End Sub
    ton code étant adapter à mes onglets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub CODEBASE()
    Dim LeMax As Long
     
    Application.ScreenUpdating = False
    With Worksheets("BASE EMPLOI")
        LeMax = .Cells(.Rows.Count, "B").End(xlUp).Row
        With .Range("A2")
            .Value = 1
            .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=LeMax - 1
        End With
        .Columns(2).Insert
        .Range("B2:B" & LeMax).Formula = "=RAND()"
        .Range("A2:B" & LeMax).Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlNo
        .Columns(2).Delete
    End With
    CODEBASE étant l'endroit ou est renvoyé le nombre aléatoire


    Est-ce que le fait de mettre une valeur numérique peut perturber le premier code ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Je n'en sais rien

    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  7. #7
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    J'ai essayé mais cela ne marche pas .... sniff

    avant le code aléatoire été un code alphanumérique peut etre qu'en changeant le code aléatoire en code alpha numérique....
    tu aurais un code pour ca ?
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Déjà corrige .[A2:A] en .[A2:Axx]
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ANNONCE_Click()
        Dim C As Range
        On Error Resume Next
        With Sheets("BASE EMPLOI")
            Set C = .Cells(Application.Match(CODEBASE, .[A2:A2500], 0), "AN")
        End With
        C.Hyperlinks(1).Follow True
        Application.Goto Range(C.Hyperlinks(1).SubAddress)
    End Sub
    marche pas ... Snifff
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Avec Find
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c As Range
     
    With Sheets("BASE EMPLOI")
        Set c = .Range("AN:AN").Find(CODEBASE, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            c.Hyperlinks(1).Follow True
            Application.Goto Range(c.Hyperlinks(1).SubAddress)
            Set c = Nothing
        End If
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    pas mieux ......
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    pas mieux ......
    Tant pis, c'est justement la réponse à une telle phrase

    Sinon,
    Quelles sont tes données de la colonne AN et qu'est ce que tu as dans la variable CODEBASE
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    CODEBASE est un textbox
    avec le code aléatoire que l'on a écrit

    en AN
    Il ya la mot ANNONCE et un lien hypertexte vers un fichier pdf stocké sur mon disque
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  14. #14
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Mais tu cherches le contenu de ta TextBox (CODEBASE) dans la colonne AN, tu as vu la logique?

    Explique toi bien

    Peut être tu cherche dans A pour aller dans AN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim c As Range
     
    With Sheets("BASE EMPLOI")
        Set c = .Range("A:A").Find(CODEBASE, LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            c.Offset(, 39).Hyperlinks(1).Follow True
            Application.Goto .Range(c.Offset(, 39).Hyperlinks(1).SubAddress)
            Set c = Nothing
        End If
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  15. #15
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, juste à titre documentaire il y a ceci et cela

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si j'ai bien compris la question mais pour générer des nombres entiers, il y a une formule native qui existe transposable bien entendu en VBA
    Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ALEA.ENTRE.BORNES(1;999)
    En VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Range("A2:A20").Formula = "=RANDBETWEEN(1,999)"
     Range("A2:A20").Value = Range("A2:A20").Value ' Si on souhaite garder le résultat
    Cette fonction offre bien d'autres avantages que vous pouvez découvrir dans cette contribution ALEA.ENTRE.BORNES - Générer des noms, prénoms et dates aléatoires
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  17. #17
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    @ mercatog
    J'ai une erreur

    Nom : Capture.PNG
Affichages : 1390
Taille : 15,6 Ko


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.Offset(, 39).Hyperlinks(1).Follow True
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  18. #18
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    @Philippe
    Il veut avoir une liste aléatoire entre 1 et n sans doublons

    @GADENSEB
    Retrousse les manches au lieu de nous copier une image. On est là pour t'aider et pas à te donner une solution fonctionnelle à 100% sur un fichier qu'on devine vu les explications données.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  19. #19
    Membre actif Avatar de GADENSEB
    Homme Profil pro
    Responsable Administratif et Financier
    Inscrit en
    Mars 2014
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Administratif et Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 569
    Points : 285
    Points
    285
    Par défaut
    @ Mercatog :
    Yes j'ai pas mis mon fichier par feignentise cette fois lol

    Purée je rame sur ce coup là :
    - avec c.Offset(, 39) on décale le résultat de la recheche en colonne A en colonne AN ,ça j'ai pigé
    - J'ai changé .Range("A2:A2500") mais ce que je me dis c'est le probléme viens peut être que les données du classement des données en colonne A
    sous excel j'ai des soucis avec rechercheV si les données ne sont pas classées A->Z
    mais cela marche avec sommeprod
    Du coup, le problème est peut être là ....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ANNONCE_Click()
    Dim c As Range
     
    With Sheets("BASE EMPLOI")
        Set c = .Range("A2:A2500").Find(CODEBASE, LookIn:=xlValues, lookat:=xlWhole)
       If Not c Is Nothing Then
            c.Offset(, 39).Hyperlinks(1).Follow True
            Application.Goto .Range(c.Offset(, 39).Hyperlinks(1).SubAddress)
         Set c = Nothing
       End If
    End With
    End Sub
    Bonne journée
    Seb



    ###############################
    C'est Totomatique, On va tout Totomate-isé ;-)
    ###############################

  20. #20
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    - J'ai changé .Range("A2:A2500") mais ce que je me dis c'est le probléme viens peut être que les données du classement des données en colonne A
    sous excel j'ai des soucis avec rechercheV si les données ne sont pas classées A->Z
    Si tu recherches une valeur exacte, le quatrième argument de la formule RECHERCHEV doit avoir FAUX comme valeur et cela fonctionne que la liste soit triée ou pas.
    A lire Fonctions Excel à la loupe : N°1 - RECHERCHEV()
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Générer des nombres aléatoires entre 2 bornes
    Par Isabella83 dans le forum C
    Réponses: 6
    Dernier message: 18/04/2015, 11h14
  2. Générer un nombre aléatoire comprise entre x et y
    Par KamBMN dans le forum LabVIEW
    Réponses: 1
    Dernier message: 11/01/2013, 08h16
  3. Réponses: 4
    Dernier message: 28/04/2010, 14h13
  4. Réponses: 16
    Dernier message: 08/03/2006, 11h18
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo