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

XL 2019 Changer valeur boucle for par valeur range

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

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
 
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

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 !
 
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
 
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

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
 
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
 
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:
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:
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

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

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:
- 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
7
Affichages
692
Réponses
2
Affichages
1 K
Réponses
11
Affichages
1 K
Réponses
3
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…