XL 2019 Changer valeur boucle for par valeur range

Hoareau

XLDnaute Occasionnel
Bonjour

J'ai une boucle for, dans laquelle, je veux changer les valeurs e m et n par les valeurs du ange
Actuellement seulement le couplé 100,200 apparait
dans le range se trouve 100,200,300,400,500,600,700,800,900,1000

100 200 qui en fait est le couplé 1 2

Sub test()
Dim Tab_couple_a_supprimer(1 To 20, 1 To 1)

Set plage = Sheets("feuil2").Range("Y4:Y23")

Tab_couple_a_supprime = plage.Value

For m = 1 To 17
For n = m + 1 To 18

m = Tab_couple_a_supprime(m, 1)
n = Tab_couple_a_supprime(n, 1)

Next n, m

merci
 

Hoareau

XLDnaute Occasionnel
A l'attention de JBarbe

moi, j'en ai 61

les tableaux compliqués deviennent de plus en plus difficiles a lire

c'est pour cela, que j'essaie d'automatiser avec 3 ou quatre variable et voir ce qui me reste comme combinaisons sans entamer trop la r
réussite

Le fichier est enregistré sur feuille2, il y a un bouton
lire ce qu'il y au dessous et cliquer sur le bouton
 

Pièces jointes

  • Teste valeurs tableau Vers 5 (s)(s)(s).xlsm
    71.6 KB · Affichages: 16

JBARBE

XLDnaute Barbatruc
Re,
Je vois dans ton fichier que Job75 ( que je salut ) c'est arraché les cheveux dans un post qui date de 2017 !
Mais je ne vois pas ce que vienne faire les couplés des chevaux dans tout ces chiffres ( ma bête a planté sur une macro du lien ci-dessus )!
J’espère qu'un bénévole pourra t'aider car vu mon grand âge j'ai besoin de repos de temps en temps !
Bonne journée !
 

Hoareau

XLDnaute Occasionnel
rien a voir avec job 75
pour ce qui est de ce code, j'avais regardé sommairement, et il me semblait qu'il recupérait ce qu'il y avait dans array pour l'injecter dans sa boucle, et c'est ce que je voulais faire, je voulais me servir comme modèle.
quand je bloque sur quelque chose, je passe à autre chose, le temps de réfléchir, et pour avancer

quand je récupère un fichier ou ne macro, qui m'intéresse, j'essaie de mettre le nom de celui qui l'a fait,et le lien ,pour deux raisons
un par respect pour son travail, car il fait quelque que je ne sais pas faire
deux pour avoir un repère
 

Hoareau

XLDnaute Occasionnel
Bonjour

sur le principe, oui, je peux effectivement récupérer la variable,en changeant le nom de la plage en plage_2 et L en O ce qui me génère une erreur O déja dans encours alors que je n'ai pas O déclaré, mais là n'est pas le problème

ce qui est généré c'est :
100 200
300 400
500 600
700 800
900 1000
alors que :
10 N ° dans le range (cela peut être moins ou plus)
=COMBIN(10;2) donne 45 combinaisons, manque donc 40 combinaisons
Sub Test()

Dim Plage_2 As Range, T(), O As Long, TS() As String, LS As Long
Set Plage_2 = Sheets("Feuil2").Range("Y4:Y23")
T = Plage_2.Value
ReDim TS(1 To UBound(T, 1) \ 2)
For O = 1 To UBound(T, 1) - 1 Step 2
LS = LS + 1
TS(LS) = T(O, 1) & " " & T(O + 1, 1)
Next O
Debug.Print Join(TS, vbLf)
End Sub
 

Pièces jointes

  • 10 par 2 (45 combs).txt
    369 bytes · Affichages: 10

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous auriez du dire depuis le début que vous vouliez toutes les associations possibles de 2 valeurs d'une plage d'une colonne.
VB:
Sub Test()
   Dim Plage As Range, T(), L1 As Long, L2 As Long, TS() As String, LS As Long
   Set Plage = Sheets("Feuil2").Range("Y4:Y13")
   T = Plage.Value
   ReDim TS(1 To (UBound(T, 1) ^ 2 - UBound(T, 1)) / 2)
   For L1 = 1 To UBound(T, 1) - 1
      For L2 = L1 + 1 To UBound(T, 1)
         LS = LS + 1
         TS(LS) = T(L1, 1) & " " & T(L2, 1)
         Next L2, L1
   MsgBox Join(TS, vbLf)
   End Sub
 

Hoareau

XLDnaute Occasionnel
merci, je vais tester

Cela a été dit, mais c'est pas grave
Au départ c'était changer n et m, parce que mes couplés de 10 N° étaient déjà fait dans la macro avec les variables n et m,après explication pas possible

A ce moment le code proposé au #9, ne correspondait pas à ma demande e je comprenais pas sa teneur, donc oublié
Hier "C'est ce que fait le code proposé au #9, non ? "
Je me suis dit, je vais re regarder, et incorporé le code dans ma boucle
d'où message

""""""""""""""""""""""""
cela a été aussi précisé , quand j'ai fait référence au fichier de l'autre poste, dans lequel j'avais créer un onglet a lire pour comprendre

""""""""""""""
Plus haut dans ce post

le but éliminer certains couplés en fonction de la somme des côtes, et d'autres critères, notament que certain N° ne figurent pas deux par deux, c'est pourquoi, je vais chercher les N° dans un range, , car ils changent au fil des courses, je les associes deux par deux et à un certain moment dans la boucle, je supprime ces couplés (10 N° donne quand même, 45 combinaisons en moins, même ce chiffre n'est pas constant, il va de 7 à 10 en principe)
ce que j'essaie de faire, réduire les combinaisons, en essayant de ne pas réduire trop la réussite

pour résumer, les couplés des N° qui sont dans le range ou il y 100 200 et...,que j'ai mis juste pour le test, pour mieux visualiser l'affichage, mais qui en réalitée sont des N° de 1 à 18
j'ai oublié de mettre des N° réels dans ce post dans le fichier joint
 

Dranreb

XLDnaute Barbatruc
Vous être reparti dans des explications nébuleuses après avoir prétendu avoir dit des choses que vous n'aviez jamais dites. Pas grave. J'en reste à votre confirmation que c'était bien ce que vous vouliez.
En tout cas, j'ai l'impression que deux procédures de service pourraient vous intéresser ultérieurement. Elles ouvrent aussi la voie à une autre manière de l'écrire :
VB:
Sub Test()
   Dim Plage As Range, T(), L1 As Long, L2 As Long, TS() As String, LS As Long
   Set Plage = Sheets("Feuil2").Range("Y4:Y13")
   T = Plage.Value
   ReDim TS(1 To VersusJA(UBound(T, 1) - 1, UBound(T, 1)) + 1)
   For LS = 1 To UBound(TS)
      CalcJAVersus L1, L2, LS - 1
      TS(LS) = T(L1, 1) & " " & T(L2, 1)
      Next LS
   MsgBox Join(TS, vbLf)
   End Sub
Public Function VersusJA(ByVal J As Long, ByVal A As Long) As Long
   If A < J Then A = A Xor J: J = J Xor A: A = A Xor J
   If A > J Then VersusJA = A * (A - 3) \ 2 + J Else VersusJA = -1
   If VersusJA < 0 Then Err.Raise 9999, , "VersusJA(" & J & ", " & A & ") impossible."
   End Function
Private Sub CalcJAVersus(ByRef J As Long, ByRef A As Long, ByVal VS As Long)
   A = Int(Sqr(2 * VS + 0.25) + 1.5)
   J = VS - A * (A - 3) \ 2
   End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Elle permettent d'utiliser un tableau triangulaire simulé par un tableau linéaire.
La Function VersusJA donne l'indice correspondant aux numéros du joueur et de l'adversaire quel que soit l'ordre dans lequel ils sont spécifiés, et la Sub CalcJAVersus fait l'opération inverse, redonnant les deux numéros de joueurs en fonction d'un indice de confrontation, le plus petit en premier.
 
Dernière édition:

Hoareau

XLDnaute Occasionnel
j'ai constaté 2 choses :
j'ai changé private en publique pour mettre tout dans même module, importance pour les erreur 9, je ne pense pas
voir fichier excel ci-joint pour visualiser erreur

1) ce ne sont pas le bonnes associations à un moment donc tout décale
2) j'ai remplacé les 100 200 juste mis pour mieux visualiser par des chiffres de 1 à10
ça passe de temps, de temps ou me donne erreur 9
si je remets 100 200, ça refonctionne
je remet des chiffres de1 à 10, ça fonctionne, après erreur 9
 

Pièces jointes

  • Resultats test macro.xlsx
    10.5 KB · Affichages: 8

Hoareau

XLDnaute Occasionnel
il n'y avait pas de macro dans ce fichier, juste du texte, de comparaison de résultats
j'ai mis mis juste la macro dans la feuille, pas la procédure dans laquelle, elle va être inséré, donc aucune modification du nom de la plage comme dit précedement
 

Pièces jointes

  • Resultats test macro.xlsm
    23 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Attention les associations sont dans un ordre différent avec CalcJAVersus (mais cohérent avec le numéro VersusJA) : il fait d'abord tout ceux inférieurs à un numéro avec lequel ils vont avant de faire tout ceux qui vont avec le suivant. Mais ça revient au même n'est ce pas, ça les sort aussi toutes.
L'avantage c'est que comme ça les début de listes portent toujours les mêmes paires de numéros quel que soit le numéro maxi. Avec des numéro jusqu'à 10 on à la même chose que jusqu'à 9 avec seulement en plus ceux de 1 à 9 qui vont avec 10.
Ou plutôt, dit autrement, un numéro de versus donné par VersusJA(X, Y) est toujours le même pour deux entiers différents X et Y quel que soit l'ensemble de paires possibles dont ils font partie, c'est surtout ça l'avantage. Et bien entendu CalcJAVersus(X, Y, Vs) redonne les mêmes X et Y si Vs est l'indice qui a été donné par VersusJA(X, Y) pour ces deux là (ou par VersusJA(Y, X), l'ordre est sans importance.).
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
312

Statistiques des forums

Discussions
312 097
Messages
2 085 257
Membres
102 842
dernier inscrit
Miguelita