XL 2019 excel vba problème pour nommer une cellule

jojo22

XLDnaute Nouveau
J'ai une liste de nom dont le nombre peut évoluer quand on lance la macro
je compte le nombre de nom et ce nombre est mis dans une cellule . je fais un classement aléatoire de cette liste avec Alea sur la première ligne
je voudrais étendre cette Aléa sur l'ensemble des noms
Selection.AutoFill Destination:=Range(Cells(1, F), Cells( NB, F)), Type:=xlFillDefault ===> c'est la ou ça bloque Range(Cells(1, F), Cells( NB, F)) >>NB étant le nombre de noms
Selection.Copy
Range("D2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
 

jojo22

XLDnaute Nouveau
Bonjour Sylvanu,
je voudrais associer un chiffre à la lettre F pour avoir l'adresse de ma dernière cellule ex 27F
chiffre qui est le résultat d'un comptage des cellules non vides ex 27). J'ai extrait la valeur de la cellule et je l'ai mis dans la référence NB (ne sachant. Association a lettre F représentant la colonne
C'est pour faire une boucle. tant qu'il y a un nom en colonne A je mets la fonction aléa() dans la colonne C

le tout pour faire un tri aléatoire et regrouper les noms par groupe de 4 et par 3

merci pour ton aide
 

Pièces jointes

  • exemple.xlsx
    10.4 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Jojo,
Pas bien compris. Vous donnez du code VBA dans le post #1, et un fichier sans code et qu'avec des formules en post #3.
Ci joint une PJ avec ce que j'ai compris :
VB:
Option Explicit: Option Base 1
Sub Tirage()
    Dim DL%, P%, i%, j%, Buffer, T
    Application.ScreenUpdating = False
    DL = [A65500].End(xlUp).Row
    ReDim T(DL, 2)
    For i = 1 To UBound(T)          ' Tableau indice 1 Nom, indice 2 Nbre alea
        T(i, 1) = Cells(i, "A"): T(i, 2) = Rnd()
    Next i
    For i = 1 To UBound(T)          ' Tri tableau sur Nb alea décroissant
        For j = 1 To UBound(T)
            If T(i, 2) > T(j, 2) Then
                Buffer = T(i, 1): T(i, 1) = T(j, 1): T(j, 1) = Buffer
                Buffer = T(i, 2): T(i, 2) = T(j, 2): T(j, 2) = Buffer
            End If
        Next j
    Next i
    P = 1: [E2:J5].ClearContents    ' P pointeur de rangement
    For i = 5 To 10                 ' Rangement des noms dans tableau de sortie.
        For j = 2 To 5
            Cells(j, i) = T(P, 1)
            P = P + 1
            If P = DL + 1 Then Exit Sub
        Next j
    Next i
End Sub
 

Pièces jointes

  • exemple (6).xlsm
    19.2 KB · Affichages: 0

jojo22

XLDnaute Nouveau
Bonjour Jojo,
Pas bien compris. Vous donnez du code VBA dans le post #1, et un fichier sans code et qu'avec des formules en post #3.
Ci joint une PJ avec ce que j'ai compris :
VB:
Option Explicit: Option Base 1
Sub Tirage()
    Dim DL%, P%, i%, j%, Buffer, T
    Application.ScreenUpdating = False
    DL = [A65500].End(xlUp).Row
    ReDim T(DL, 2)
    For i = 1 To UBound(T)          ' Tableau indice 1 Nom, indice 2 Nbre alea
        T(i, 1) = Cells(i, "A"): T(i, 2) = Rnd()
    Next i
    For i = 1 To UBound(T)          ' Tri tableau sur Nb alea décroissant
        For j = 1 To UBound(T)
            If T(i, 2) > T(j, 2) Then
                Buffer = T(i, 1): T(i, 1) = T(j, 1): T(j, 1) = Buffer
                Buffer = T(i, 2): T(i, 2) = T(j, 2): T(j, 2) = Buffer
            End If
       [B] [/B][COLOR=rgb(85, 57, 130)][B]Next j
    Next i[/B][/COLOR]
    P = 1: [E2:J5].ClearContents    ' P pointeur de rangement
    For i = 5 To 10                 ' Rangement des noms dans tableau de sortie.
        For j = 2 To 5
            Cells(j, i) = T(P, 1)
            P = P + 1
            If P = DL + 1 Then Exit Sub
        Next j
    Next i
End Sub
Sylvanu re-bonjour et merci pour cette réactivité.
j'ai testé la macro que vous m'avez envoyé. Je n'ai pas tout compris mais le principal c'est qu'elle fonctionne
je vois bien mon tableau se former avec des groupes aléatoires
Je vais revoir les fonctions Ubound et buffer pour essayer de comprendre comment ça marche
 

jojo22

XLDnaute Nouveau
merci de ce retour.
Pour finalise ma macro j'ai 2 choses à régler
j'extrais d'une liste les noms qui sont suivi(cellule à coté) d'un x. Je les mets dans une feuille ou j’exécute ta macro. mais quand je les mets la première cellule est vide ma liste commence toujours en cellule A2. je vois bien pourquoi mais je n'arrive pas à remédier au pb. Peut être faire une boucle pour traiter la première cellule. Donc quand j'applique ta macro je me trouve avec une partie dont une cellule sans nom.
2ième pb si je peux abuser c'est que je voudrais repartir les groupes par 4 ou3 mais pas 2 ni 1 y a t il une solution
je te joins le fichier complet avec la macro ou j'ai ajoutéma sélection de noms
 

Pièces jointes

  • ptitsmardis.xlsm
    23.4 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Pour le premier point c'est réglé. C'était juste une question de pointeur dans le tableau. La dernière cellule est vide. Donc au lieu d'aller jusqu'à UBound(T) on s'arrete à UBound(T) - 1.

Pour le second point je pense avoir trouvé une solution.
1- On fait comme avant.
2- Si dans la dernière colonne il n'y a que 2 noms, on rajoute le dernier de la colonne précédente. Ca fait 3.
Si dans la dernière colonne il n'y a que 1 nom, on rajoute le dernier de la colonne précédente + le dernier de la colonne N-2. Ce qui fait 3.
Evidemment on efface les éléments piqués.
Ca à l'air de marcher. :17 font 2*4 + 3*3
 

Pièces jointes

  • ptitsmardis.xlsm
    25.6 KB · Affichages: 2

jojo22

XLDnaute Nouveau
Bonsoir,

Pour le premier point c'est réglé. C'était juste une question de pointeur dans le tableau. La dernière cellule est vide. Donc au lieu d'aller jusqu'à UBound(T) on s'arrete à UBound(T) - 1.

Pour le second point je pense avoir trouvé une solution.
1- On fait comme avant.
2- Si dans la dernière colonne il n'y a que 2 noms, on rajoute le dernier de la colonne précédente. Ca fait 3.
Si dans la dernière colonne il n'y a que 1 nom, on rajoute le dernier de la colonne précédente + le dernier de la colonne N-2. Ce qui fait 3.
Evidemment on efface les éléments piqués.
Ca à l'air de marcher. :17 font 2*4 + 3*3
bonjour Sylvanu,
j'ai essayé avec des nombres de participants différents et ça marche super
Merci de ton aide. j'en avais besoin car mes connaissances en VBA ce sont volatilisées au fil du temps par manque de pratique
merci encore et bonne journée
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Je pense que c'est celle du post #8 qui est la bonne.
 

Discussions similaires

Réponses
3
Affichages
547