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

VBA---- carré de 10X10

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • 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 !

J

JJ1

Guest
Bonjour à tous,

J'utilise la fonction Dictionary, sous la forme:

Randomize
Set dico = CreateObject("Scripting.dictionary")
While dico.Count < 10
x = Int((70 * Rnd) + 1)
dico(x) = x
Wend
Range("K10").Resize(, 10) = dico.keys

Je voudrais cette fonction mais remplissant un carré de 10X10 sans doublon en ligne et sans doublon en colonne.
Je pourrais faire 10 lignes de cette fonction en changeant le Range (K10, puis K11...) mais ça n'empêcherait pas d'avoir alors des doublons formés en colonnes.

Comment puis-je faire, pour que le code soit rapide aussi (je l'intégrerai en boucle)

Merci
 

Pièces jointes

Re : VBA---- carré de 10X10

Bonjour JJ1,

Je ne suis peut-être pas bien réveillé mais si on remplit un tableau de 100 cellules (carré de 10 x 10) avec des nombres entre 1 et 70 ( Int((70 * Rnd) + 1) ), il me semble bien qu'il y aura des doublons en ligne ou en colonne.
 
Dernière édition:
Re : VBA---- carré de 10X10

Bonjour Mapomme, Bruno,

Oui mal réveillé (mais ça m'arrive le matin..) un bon café serré?

J'aime bien l(option Dictionary qui est très rapide.
Si quelqu'un sait l'adapter au carré?

merci



ps : Bruno j'ai lu la réponse de Gameover. Je sais aller sur le site. Merci
 
Re : VBA---- carré de 10X10

Bonjour JJ1, BrunoM45, jpb388, à tous,

Pour me faire pardonner (j'ai pris un 2eme café)!

NB: la macro autorise plusieurs fois la même valeur dans le carré mais pas dans une même ligne ou même colonne.

VB:
Sub tester()
Dim dicoi As New Scripting.dictionary
Dim dicoj As New Scripting.dictionary
Dim i As Long, j As Long, n As Long, k As Long, carre As Variant
ReDim carre(1 To 10, 1 To 10)

For i = 1 To 10
  For j = 1 To 10
    dicoi.RemoveAll   'colonne
    dicoj.RemoveAll   'ligne
    For k = 1 To j - 1
      dicoi(carre(i, k)) = carre(i, k)
    Next k
    For k = 1 To i - 1
      dicoj(carre(k, j)) = carre(k, j)
    Next k
    Do
      n = Int((70 * Rnd) + 1)
    Loop Until Not (dicoi.Exists(n)) And Not (dicoj.Exists(n))
    carre(i, j) = n
  Next j
Next i
Range("k10").Resize(10, 10) = carre
End Sub
 

Pièces jointes

Dernière édition:
Re : VBA---- carré de 10X10

Re,
Merci mapomme, ton code est rapide (pourquoi les Dim sont As Long et non Integer, pour aller jusqu'à 70?)
Celui de JP aussi mais les nombres vont jusqu'à 100 au lieu de 70.

Merci beaucoup.
Bon samedi.
 
Re : VBA---- carré de 10X10

(re) à tous,

pourquoi les Dim sont As Long et non Integer, pour aller jusqu'à 70?

Parce que j'ai lu qu'à partir de 2007, le type Long était plus performant que le type integer (mais en 2003, ce n'est pas forcément le cas). J'ai donc pris l'habitude de typer en Long (et en plus moins de caractères - y'a pas de p'tites économies 😱)

Une version v2 avec une formule qui indique le nombre de valeurs différentes + une version v3 avec ajout de randomize (avec l'impression qu'on dépasse plus souvent le seuil des 60 valeurs différentes 😕 )
 

Pièces jointes

Dernière édition:
Re : VBA---- carré de 10X10

re
jj1 dit
Je voudrais cette fonction mais remplissant un carré de 10X10 sans doublon en ligne et sans doublon en colonne.

alors je pose la question comment remplir 100 cases en nb entier avec seulement 70 chiffres pour moi c'est obligatoire de passer a 100
pouvez vous éclairer ma lanterne merci d'avance




edit: je viens de comprendre il peut y avoir 2 fois le même chiffre mais pas sur la même ligne et pas sur la même colonne
 
Dernière édition:
Re : VBA---- carré de 10X10

Bonjour jpb388,

J'avais fait le même raisonnement puis je me suis ravisé. Prenons un carré rempli de 100 nombres différents. Considérons une ligne sans la valeur 1 (par ex) et une colonne sans la valeur 1. Si à l'intersection de cette ligne et de cette colonne, on saisit la valeur 1, on se retrouve avec deux fois la valeurs 1 et on a bien que des valeurs différentes pour chaque ligne et chaque colonne du tableau.

Edit : encore en retard moi!
 
Re : VBA---- carré de 10X10

Bonsoir JPB,
merci pour ton code, mais les nombres vont jusqu'à 100 dans le carré.
Sinon le code est parfait au niveau de la vitesse d'exécution.

Bonne soirée et merci beaucoup à vous tous.
 
Re : VBA---- carré de 10X10

Salut à tous

@ mapomme

Mille excuses pour le squat de ton fichier
Mais j'ai besoin de tes formules de contrôle

@ tous
Voici une version qui utilise les 70 nombres
Je ne peux pas garantir que l'on aura a chaque tirage aucun doublon ni en ligne ni en colonne mais je n'ai jamais réussi a en obtenir
 

Pièces jointes

Re : VBA---- carré de 10X10

bonsoir Pierre jean , et bonsoir à tous.
le seul problème avec ce code c'est que je n'y comprends rien (enfin en soit c'est un très petit problème) mais vu que j'essaie d'être un peu moins bête chaque jour( même si pour aujourd'hui c'est fait je vais me coucher), peux tu si tu as quelques secondes à perdre, m'expliquer très brièvement ton code.
merci d'avance
( et même si tu ne me l'explique pas merci de tes nombreuses contributions dont j'ai déjà pu profiter )
bonne soirée à tous
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
  • Question Question
Réponses
3
Affichages
595
N
Réponses
5
Affichages
3 K
Nicocotte125
N
J
Réponses
20
Affichages
2 K
V
  • Question Question
Réponses
3
Affichages
888
R
Réponses
6
Affichages
1 K
rocornet
R
J
Réponses
11
Affichages
1 K
M
Réponses
0
Affichages
2 K
MARGAR
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…