Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Probleme de doublons.

  • Initiateur de la discussion Initiateur de la discussion Hulk
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Hulk

XLDnaute Barbatruc
Hello tout le monde,

J'ai un souci de doublons avec des chiffres.

Je souhaite éviter que deux ou plus de chiffres se répètent.

J'ai bien essayé des SI ET, mais en vain.

Voyez le fichier joint svp.

Merci infiniment pour votre aide !

Cdt, Hulk.
 

Pièces jointes

Re : Probleme de doublons.

bonjour Hulk,

je te propose ce code :
Code:
Private Sub CommandButton1_Click()
    
    For i = 1 To 200
        For j = 4 To 9
            Num = Int((50 * Rnd) + 1)
            If j <> 4 Then
                While Not Range("D8").Resize(1, j - 4).Find(Num, , xlValues, xlWhole) Is Nothing
                    Num = Int((50 * Rnd) + 1)
                Wend
            End If
            Cells(8, j) = Num
        Next j
    Next i

End Sub


a+
 
Re : Probleme de doublons.

Re,

Merci Mromain, ça a l'air de jouer 😀

Peux-tu juste m'expliquer ce bout de code...
Code:
While Not Range("D8").Resize(1, j - 4).Find(Num, , xlValues, xlWhole) Is Nothing
    Num = Int((50 * Rnd) + 1)
Wend
Merci pour ton aide.

Cdt, Hulk.

EDIT : Me suis aperçu qu'il y a quand même des chiffres qui peuvent se répéter Mromain, je viens de tirer deux fois le 11 !

Me demande s'il ne faut pas passer par une formule qui tue !

A vous relire.
 
Dernière édition:
Re : Probleme de doublons.

Bonjour mromain, Hulk,

Voici une autre façon de faire, en faisant la recherche dans un tableau VBA:

Code:
Private Sub CommandButton1_Click()
  Dim tNum(1 To 1, 1 To 6)
  For i = 1 To 6
    Do
      Num1 = Int((50 * Rnd) + 1)
      On Error Resume Next
      Pos = WorksheetFunction.Match(Num1, tNum, 0)
      If Err.Number > 0 Then
        tNum(1, i) = Num1
        Exit Do
      End If
      On Error GoTo 0
    Loop
  Next i
[D8:I8].Value = tNum
End Sub
 
Re : Probleme de doublons.

Bonjour , pouvez vous m'expliquer ces codes? ou me fournir un tableau excel avec cette formule svp?

j'ai deux tableaux (2 mois différents), avec lesm ises à jour notifiés, j'aimreai ne faire qu'un tableau, en évitant els doublons.

merci d'avance
 
Re : Probleme de doublons.

rebonjour Hulk

Code:
While Not Range("D8").Resize(1, j - 4).Find(Num, , xlValues, xlWhole) Is Nothing
    Num = Int((50 * Rnd) + 1)
Wend

Range("D8").Resize(1, j - 4)
renvoie la représente le zone [D8: Dj-1]

While Not Range("D8").Resize(1, j - 4).Find(Num, , xlValues, xlWhole) Is Nothing,
soit While Not [D8: Dj-1].Find(Num, , xlValues, xlWhole) Is Nothing
veut dire tant que Num est trouvé dans [D8: Dj-1], ...


et je ne vois pas trop comment le problème de doublon peut persister...

petite question supplémentaire, pourquoi mets-tu le For i = 1 To 200 ?


edit: bonjour skoobi, sebzewuf

a+
 
Re : Probleme de doublons.

Bonjour à tous
Une proposition sur un autre principe :
Code:
[COLOR="DarkSlateGray"]Private Sub CommandButton1_Click()
Dim coll As New Collection, num1 As Integer, i As Integer
   Rnd (2327): Randomize
   Do
      num1 = Int((50 * Rnd) + 1)
      On Error Resume Next
      coll.Add Item:=num1, Key:=CStr(num1)
      On Error GoTo 0
   Loop While coll.Count < 6
   For i = 1 To 6
   Range("C8").Offset(0, i).Value = coll(i)
   Next i
End Sub[/COLOR]
ROGER2327
#2036
 
Re : Probleme de doublons.

Re,

Merci à tous, je vais analyser vos solutions... Juste si on pouvait commenter les codes, serait super 🙄

Mromain merci pour tes explication, et j'ai mis For i To 200 pour l'effet roulette 😀
Aussi pour le doublon, je te promets ça me l'a fait plusieurs fois...

Merci encore à vous !

Cdt, Hulk.
 
Re : Probleme de doublons.

Salut,

de façon basique et simplette :
Code:
Private Sub CommandButton1_Click()
  Dim num(6), i As Byte
  Randomize
            [COLOR=Blue]For k = 1 To 2000[/COLOR]
  num(0) = Int((50 * Rnd) + 1)
  Cells(8, 4) = num(0)
            [COLOR=Blue]Next[/COLOR]
  For i = 1 To 5
            [COLOR=Blue]For k = 1 To 2000[/COLOR]
1   num(i) = Int((50 * Rnd) + 1)
    For j = 0 To i - 1
      If num(j) = num(i) Then GoTo 1
    Next
    Cells(8, j + 4) = num(j)
             [COLOR=Blue]Next[/COLOR]
  Next
End Sub
 
Dernière édition:
Re : Probleme de doublons.

Re,
bonsoir Roger 🙂,
13GIBE59,

Re,

Merci à tous, je vais analyser vos solutions... Juste si on pouvait commenter les codes, serait super 🙄

Voici:

Code:
Private Sub CommandButton1_Click()
'tableau à 2 dimensions 1 ligne, 6 colonnes
  Dim tNum(1 To 1, 1 To 6)
'boucle qui génère les 6 chiffres
  For i = 1 To 6
    Do
      Num1 = Int((50 * Rnd) + 1)
    'Là on regarde si le numéro existe dans le tableau à l'aide de "match", l'équivalent
    'EQUIV d'excel. Si la position n'est pas trouvée, cela génère une erreur d'où la gestion
    'd'erreur.
    'LA boucle Do...Loop permet de générer un nouveau chiffre si le chiffre est déjà dans
    'le tableau.
      On Error Resume Next
      Pos = WorksheetFunction.Match(Num1, tNum, 0)
      'si erreur, cela signifie que le nombre n'est pas dans le tableau
      If Err.Number > 0 Then
      'on ajoute dans le tableau
        tNum(1, i) = Num1
      'on sort de la boucle pour passer au chiffre suivant
        Exit Do
      End If
      On Error GoTo 0
    Loop
  Next i
'on "transfert" du tableau vers les cellules.
[D8:I8].Value = tNum
End Sub

Edit: bonsoir Lii 🙂
 
Re : Probleme de doublons.

Suite...
Code commenté.
Code:
[COLOR="DarkSlateGray"]Private Sub CommandButton1_Click()
Dim coll As New Collection, num1 As Integer, i As Integer
   Rnd (2327): Randomize [COLOR="SeaGreen"][B]'Initialisation du générateur pseudo-aléatoire. _
   Voir l'aide de VisualBasic pour plus de précisions.[/B][/COLOR]
   Do
      num1 = Int((50 * Rnd) + 1) [COLOR="SeaGreen"][B]'Tirage d'un nombre entier entre 1 et 50 inclus.[/B][/COLOR]
      On Error Resume Next
      coll.Add Item:=num1, Key:=CStr(num1) [COLOR="SeaGreen"][B]'tentative d'adjonction du nombre _
      tiré à la collection "coll". Si le nombre est déjà dans la collection, _
      une erreur se produit, et l'exécution se poursuit à la ligne suivante. _
      Si le nombre n'est pas encore dans la collection, il y est placé.[/B][/COLOR]
      On Error GoTo 0
   Loop While coll.Count < 6 [COLOR="SeaGreen"][B]'Boucler jusqu'à ce que la collection compte six _
   élèments[/B][/COLOR]
   For i = 1 To 6 [COLOR="SeaGreen"][B]'Récupération et affichage des items de la collection.[/B][/COLOR]
      Range("C8").Offset(0, i).Value = coll(i)
   Next i
End Sub[/COLOR]
ROGER2327
#2039
 
Re : Probleme de doublons.

Re,

avec CountIf (NB.SI d'excel), ça donne:

Code:
Private Sub CommandButton1_Click()
'De la colonne 4 à 9
  For i = 4 To 9
    Do
    'LA boucle Do...Loop permet de générer un nouveau chiffre si le chiffre est déjà dans
    'la plage "D8:I8".
      Num1 = Int((50 * Rnd) + 1)
'Là on utilise "CountIf", le NB.SI d'excel, pour compter le nombre de fois que le chiffre
'se trouve dans la plage. Si 0, et bien on écrit dans la cellule et on sort de la boucle.
      If WorksheetFunction.CountIf([D8:I8], Num1) = 0 Then
        Cells(8, i).Value = Num1
        Exit Do
      End If
    Loop
  Next i
End Sub
Plus compréhensible peut-être.
Hulk, tu auras le choix 😉.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
149
Réponses
5
Affichages
313
Réponses
3
Affichages
889
Réponses
13
Affichages
358
Réponses
2
Affichages
267
Réponses
4
Affichages
345
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…