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 :

Remplacer doublons dans une variable tableau [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut Remplacer doublons dans une variable tableau
    Bonjour,

    Je souhaite créer une variable tableau qui contient des nombres aléatoires sans aucun doublons. Le tableau est à une dimension et sa taille est définie par une variable en début de programme.

    Voici le code que j'ai pour générer mon tableau, mais pour le moment les doublons sont permis, je suis débutant et surtout à court d'idées :

    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
    17
    18
    19
    20
    21
    22
    23
    24
     
    Option Base 0
     
    Sub test()
     
        nbEquipInventaire = Worksheets("Parametrage").Range("B5") 'Nombre d'equip par inventaire
        nombreEquip = Range("Listes!A" & Rows.Count).End(xlUp).Row - 1 'Nombre d'equip renseignés
     
        Dim valueEquip() As Variant
        Dim Valeur As Integer
     
        ReDim valueEquip(nbEquipInventaire)
     
        'Initialiser le générateur de nombres aléatoires
        Randomize
     
        For i = 0 To UBound(valueEquip) - 1
     
            aleat = Int(nombreEquip * Rnd) + 1
            valueEquip(i) = aleat
     
        Next i
     
    End Sub
    Merci de votre aide !

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    une démonstration via la fonction de feuille de calculs EQUIV (Match en VBA) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Demo1()
        Dim T, C%, N%, V
            T = [{1,2,3,0,0}]
            C = 3
        For N = 1 To 5
            V = Application.Match(N, T, 0)
            If IsError(V) Then C = C + 1: T(C) = N
        Next
            MsgBox Join(T, ", ")
    End Sub
    ___________________________________________________________________________________________________________

         Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut
    Merci de la réponse rapide, en effet cela fonctionne mais quand j'essaie de l'adapter le tri ne se fait plus.. A quel niveau est mon erreur ?

    Code avec mon adaptation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Dim T, C%, N%, V
            T = valueEquip
            C = 3
        For N = 1 To UBound(valueEquip) - 1
            V = Application.Match(N, T, 0)
            If IsError(V) Then C = C + 1: T(C) = N
        Next
            MsgBox Join(T, ", ")
    Merci !

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    La ligne n°5 dans le code original représentant un tirage aléatoire,
    évidemment un copier/coller tel quel ne peut fonctionner !

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 3
    Par défaut
    Bonjour,

    je reconnais ne pas comprendre complètement le code . En revanche j'ai trouvé une autre solution ailleurs sur internet qui fonctionne bien et que je comprends:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
        Dim valueEquip() As Variant
        Dim Temp As Integer, Existe As Boolean
        Dim I As Integer, J As Integer
     
        nombreEquip = Range("Listes!A" & Rows.Count).End(xlUp).Row - 1
        nbEquipInventaire = Worksheets("Parametrage").Range("B5")
     
        ReDim valueEquip(nbEquipInventaire)
     
        'Initialiser le générateur de nombres aléatoires
        Randomize
     
        For I = 0 To (UBound(valueEquip) - 1)
     
            Existe = True
            While Existe
                Temp = Int(nombreEquip * Rnd) + 1
                For J = 0 To (UBound(valueEquip) - 1)
                    If Temp = valueEquip(J) Then
                        Existe = True
                        Exit For
                    Else
                        Existe = False
                    End If
                Next J
            Wend
            valueEquip(I) = Temp
     
        Next I
     
    MsgBox Join(valueEquip, " , ")
    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression des doublons dans une variable de type tableau
    Par damsmut dans le forum Général VBA
    Réponses: 2
    Dernier message: 23/07/2019, 10h36
  2. Remplacer données dans une variable tableau
    Par polo68 dans le forum VBA Access
    Réponses: 6
    Dernier message: 17/11/2013, 00h38
  3. Comment insérer les valeurs d'une requete dans une variable tableau
    Par uptoditime dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/12/2007, 12h03
  4. recherche dans une variable tableau
    Par le petit nicolas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/05/2007, 12h41
  5. [VBA-E]Recherche dans une variable tableau
    Par illight dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2006, 17h50

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