Décallage colonne C

Bonjour

Je n'arrive pas à trouver ou est mon erreur la répartition doit se faire en C2,D2,E2,F2 mais pour C elle commence en C3

Merci pour votre aide

Sub MelangerEtRepartir()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim noms() As Variant
    Dim temp As Variant
    Dim randomIndex As Long

    Set ws = ThisWorkbook.Sheets("Tournoi") ' Remplacez par le nom de votre feuille
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    noms = ws.Range("A2:A" & lastRow).Value ' Récupérer les noms dans un tableau

    ' Mélanger les noms
    For i = UBound(noms, 1) To LBound(noms, 1) Step -1
        randomIndex = Application.WorksheetFunction.RandBetween(LBound(noms, 1), i)
        temp = noms(i, 1)
        noms(i, 1) = noms(randomIndex, 1)
        noms(randomIndex, 1) = temp
    Next i

    ' Répartir les noms en groupes de 4 dans les colonnes C, D, E, F à partir de la ligne 2
    j = 2 ' Commencer à la ligne 2
    For i = LBound(noms, 1) To UBound(noms, 1)
        ws.Cells(j, 3 + (i Mod 4)).Value = noms(i, 1) ' Colonne C (3), D (4), E (5), F (6)
        If (i + 1) Mod 4 = 0 Then j = j + 1 ' Passer à la ligne suivante après 4 noms
    Next i
End Sub

Bonjour ! Il semble que l'erreur vienne de cette ligne :

ws.Cells(j, 3 + (i Mod 4)).Value = noms(i, 1)

Quand i = 0, 3 + (i Mod 4) = 3, ce qui correspond bien à la colonne C. Mais comme j commence à 2, la première valeur est placée en C2 comme prévu.

Le problème peut venir du fait que Excel commence l'indexation des tableaux à 1 et non à 0. Une solution consiste à ajuster la façon dont les valeurs sont insérées. Vous pouvez essayer cette modification :

ws.Cells(j, 2 + (i Mod 4)).Value = noms(i, 1)

En décalant l'index des colonnes de 2 au lieu de 3, vous devriez bien avoir C2 comme premier emplacement.

@+

Bonjour BAROUTE78

Merci pour ton aide

J'ai fait l'essai en mettant 2 cela me décalle de 1 colonne vers la gauche et j'ai B3 ,C2D2,E2 pourquoi B3 alors que je devrais avoir B2

Hello,

Essaie de changer j=2 par j=1 dans ce cas... Si c'est pas ça il me faudrait le fichier pour tester plus loin

@+

essai non concluant je remonte tout d'une ligne et C est toujours décalée

6tournoi.xlsm (17.28 Ko)

Hello,

Ca vient de là forcément,

ws.Cells(j, 3 + (i Mod 4)).Value

Quand ton i = 1 le résultat de i Mod 4 c'est 1 donc il te fait 3 + 1 donc démarrage à la colonne D

Mais j'arrive pas à le corriger je suis fatigué je crois

Si tu fais ça c'est ok ?

ws.Cells(j, 3 + ((i - 1) Mod 4)).Value

Sachant que t'auras deux cases vides forcément sur ta plage mais les équipes seront équilibrées

J'ai essayé de rajouter les deux joueurs manquants mais j'ai ça

image

Je deviens fou

@+

Edit j'ai trouvé, c'était lié au décalage d'index avec le tableau donc au lieu de faire i Mod 4 on fait (i - 1) Mod 4 et pour le (i+1) Mod 4 on fait i Mod 4

Sub MelangerEtRepartir()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long, j As Long
    Dim noms() As Variant
    Dim temp As Variant
    Dim randomIndex As Long

    Set ws = ThisWorkbook.Sheets("Tournoi") ' Remplacez par le nom de votre feuille
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    noms = ws.Range("A2:A" & lastRow).Value ' Récupérer les noms dans un tableau

    ' Mélanger les noms
    For i = UBound(noms, 1) To LBound(noms, 1) Step -1
        randomIndex = Application.WorksheetFunction.RandBetween(LBound(noms, 1), i)
        temp = noms(i, 1)
        noms(i, 1) = noms(randomIndex, 1)
        noms(randomIndex, 1) = temp
    Next i

    ' Répartir les noms en groupes de 4 dans les colonnes C, D, E, F à partir de la ligne 2
j = 2 ' Commencer à la ligne 2
For i = LBound(noms, 1) To UBound(noms, 1)
    ws.Cells(j, 3 + ((i - 1) Mod 4)).Value = noms(i, 1) ' Ajuster l'index
    If (i Mod 4 = 0) Then j = j + 1 ' Passer à la ligne suivante après 4 joueurs
Next i

End Sub

J'ai la vague impression que je deviens fou aussi

Je reverrai cela dés demain

Bonne soirée

Alors là tu es vraiment un grand chef ,il fallait la voir celle là

Merci pour ton aide

Cordialement

Rechercher des sujets similaires à "decallage colonne"