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

[Résolu]mélanger ensembles de cellules dans colonne d'un tableau

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

Mad

XLDnaute Nouveau
Bonjour,
J'aurais besoin de votre aide SVP.
Dans une feuille avec 2 tableaux que j'alimente et tri via un userform qui pioche dans une base de donnée.
Dans le code du tri, à la fin je fait repéré les lignes des Mr et Mme en les taguant par :
H1, H3, H5, etc pour le tableau homme (colonne D)
F2, F4, F6, etc pour les femmes (colonne K)
J'aimerais par vba en me servant du bouton "MELANGER", mélanger les colonne (A;B;C) et (H;I;J) (avec leurs propre valeurs) pour que les personnes se voit octroyer un autre un autre Tag. Sachant que les tableaux peuvent contenir chacun de 1 à 25 lignes indépendamment.
Ci joint le fichier exemple.
Par avance merci pour votre aide
 

Pièces jointes

Dernière édition:
Bonsoir.
Voyez si vous pouvez utiliser cette procédure OrdreAléat en étudiant l'exemple d'utilisation.
VB:
Sub Essai()
Dim TE(1 To 26), TN() As Long, TS(1 To 26), N As Long, P As Long
For N = 1 To 26: TE(N) = Chr$(N + 64): Next N
Randomize
OrdreAléat TN, 26 ' Dimensionne et garnit TN de numéros de 1 à 26 en ordre aléatoire.
For N = 1 To 26: P = TN(N): TS(N) = TE(P): Next N
MsgBox Join(TE, ", ") & vbLf & Join(TS, ", ")
End Sub

Sub OrdreAléat(TN() As Long, ByVal Nombre As Long)
Dim P As Long, A As Long, J As Long
ReDim TN(1 To Nombre): For P = 1 To Nombre: TN(P) = P: Next P
Randomize
For P = Nombre To 2 Step -1
   A = Int(Rnd * P) + 1: J = TN(A): TN(A) = TN(P): TN(P) = J
   Next P
End Sub
 
Bonjour,
Alors d'abord merci pour la direction a prendre.
Mais comment vous dire ..., j'ai découvert la fonction "countif" hier.
Mon niveau en VBA est donc misérable.
J'ai quand même essayé depuis hier de comprendre ton code, mais sans succès pour le moment.
J'avoue que je m'attendais à quelque chose de plus accessible.
Si je peu avoir un autre indice, je suis preneur.
 
Bonjour.
Qu'est-ce que vous ne comprenez pas ?
(moi c'est votre demande que je ne comprends pas: vous parlez de mélanger des colonnes alors que ça parait n'avoir aucun sens au vu des données, contrairement à un éventuel déclassement aléatoire des lignes)
En tout cas ma Sub OrdreAléat fabrique une table d'entiers longs uniques en ordre aléatoire. Alors servez vous en pour pomper des données sources dans un certain ordre et les envoyer vers un emplacement cible dans un ordre différent donné par la table rendue par cette procéture. Tout comme dans ma Sub Essai de démo j'envoie par une boucle les infos de la table TE vers la table TS dans l'ordre donné par la table TN fabriquée par la Sub OrdreAléat.
 
Alors oui, je n'ai peut-être pas été très clair.
colonne B à partir de la ligne 3, j'ai les noms de famille
colonne C à partir de la ligne 3, j'ai les prénoms correspondants.
j'aimerais que de la ligne 3 jusqu’à la fin du tableau (variable), les colonnes B et C soit mélanger ensemble afin que par exemple :
Dupont gérard en ligne 3 avant mélange, se retrouve en ligne 7 par exemple, mais reste Dupont gérard.
Et de même pour un 2ème tableau sur la même feuille mais sur les colonnes I et J avec toujours les premières valeurs en 3ème ligne.
J'espère avoir été plus compréhensible dans le but recherché.
Pour la méthode, j'essaye toujours de comprendre 🙁 et surtout de l'appliqué.
 
Oui, en me basant sur l'exemple, qui ne figure d'ailleurs pas sur votre classeur ExempleTEST, ça me semble bien être simplement un déclassement aléatoire de lignes. Les colonnes ne changent pas de place. Essayez comme ça :
VB:
Sub Bouton12_Cliquer()
Randomize
DéclasserLignesPlage ActiveSheet.[B3:C3].Resize(ActiveSheet.[B1000000].End(xlUp).Row - 2)
DéclasserLignesPlage ActiveSheet.[I3:J3].Resize(ActiveSheet.[I1000000].End(xlUp).Row - 2)
End Sub

Sub DéclasserLignesPlage(ByVal Rng As Range)
Dim TE(), LE As Long, TN() As Long, TS(), LS As Long, C As Long
TE = Rng.Value
ReDim TS(1 To UBound(TE, 1), 1 To UBound(TE, 2))
OrdreAléat TN, UBound(TE, 1)
For LE = 1 To UBound(TE, 1)
   LS = TN(LE)
   For C = 1 To UBound(TE, 2)
      TS(LS, C) = TE(LE, C)
      Next C, LE
Rng.Value = TS
End Sub

Sub OrdreAléat(TN() As Long, ByVal Nombre As Long)
Dim P As Long, A As Long, J As Long
ReDim TN(1 To Nombre): For P = 1 To Nombre: TN(P) = P: Next P
Randomize
For P = Nombre To 2 Step -1
   A = Int(Rnd * P) + 1: J = TN(A): TN(A) = TN(P): TN(P) = J
   Next P
End Sub
 
Merci beaucoup.
Alors cela marche parfaitement.
J'ai beau comprendre le principe, c'était encore en dehors et loin de ma porté de rédiger ce code.
Un indice ne m'aurais pas suffit j'aurais encore pédalé.
En tout cas du coup, un grand merci.
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…