Microsoft 365 VBA trier et ecrire pour une certaine valeur

sylvainroberge

XLDnaute Nouveau
Bonjour à tous
J'ai un tableau qui représente des personnes que je dois classer en ordre 1er - F (pour fille) et M (masculin) , "F" en premier ET AUSSI par serie en ordre décroissant.

J'ai 2 macros , l'un pour le tri (assez simple j'ai utilisé enregistrement automatique !!!) et une autre pour inscrire les équipes MAIS j'ai réussi seulement de mettre "A" pour toutes "F" MAIS pas capable de mettre a,b,c,d, et continuer a,b,c,d, ect jusqu'a avoir fait tous les F et refaire l'exercice pour le M...je n'ai pas mis beaucoup de lignes de travaill mais généralement cela devrait etre une 50 lignes.

J'aimerais par VBA dans un tableau trié par 2 colones(Sexe et Série) puis après , inscrire dans une autre colone ("13" qui représente la 13iem sem) pour chaque ligne correspondant un A,B,C et D qui représente des équipes
 

Pièces jointes

  • Cellule contenu.xlsm
    23.6 KB · Affichages: 14
Dernière édition:

dg62

XLDnaute Barbatruc
Bonjour SylvainRoberge

Vous avez un tableau structuré, pourquoi utiliser un module vba pour trier ???
une formule pour les femmes : mettre "A" pour la première femme, coller la formule sur la cellule du dessous et étirer.
VB:
=SI(ET(F23="A";[@Sexe]="F");"B";SI(ET(F23="B";[@Sexe]="F");"C";SI(et(F23="C";E24="F");"D";"A")))
et pour les hommes remplacer dans la formule "F" par "M" avec le même principe.

Bonjour Staple,
Bien vu
Donc tu nous faire un tit coucou, le forum est immunisé contre le COVID-19
 

sylvainroberge

XLDnaute Nouveau
J'ai un tableau qui représente des personnes que je dois classer en ordre 1er - F (pour fille) et M (masculin) , "F" en premier ET AUSSI par serie en ordre décroissant.

J'ai 2 macros , l'un pour le tri (assez simple j'ai utilisé enregistrement automatique !!!) et une autre pour inscrire les équipes MAIS j'ai réussi seulement de mettre "A" pour toutes "F" MAIS pas capable de mettre a,b,c,d, et continuer a,b,c,d, ect jusqu'a avoir fait tous les F et refaire l'exercice pour le M...je n'ai pas mis beaucoup de lignes de travaill mais généralement cela devrait etre une 50 lignes.

J'aimerais par VBA dans un tableau trié par 2 colones(Sexe et Série) puis après , inscrire dans une autre colone ("13" qui représente la 13iem sem) pour chaque ligne correspondant un A,B,C et D qui représente des équipes
Bonjour SylvainRoberge

Vous avez un tableau structuré, pourquoi utiliser un module vba pour trier ???
une formule pour les femmes : mettre "A" pour la première femme, coller la formule sur la cellule du dessous et étirer.
VB:
=SI(ET(F23="A";[@Sexe]="F");"B";SI(ET(F23="B";[@Sexe]="F");"C";SI(et(F23="C";E24="F");"D";"A")))
et pour les hommes remplacer dans la formule "F" par "M" avec le même principe.

Bonjour Staple,
Bien vu
Bonjour le fil, sylvainroberge

•>sylvainroberge

Donc tu nous faire un tit coucou, le forum est immunisé contre le COVID-19
;)

EDITION:Bonjour dg62
(Je ne fus point assez rapide, les effets délétères du confinement sans doute ;))
merci mais as tu un exemple pour comprendre...
 

sylvainroberge

XLDnaute Nouveau
Bonjour SylvainRoberge

Vous avez un tableau structuré, pourquoi utiliser un module vba pour trier ???
une formule pour les femmes : mettre "A" pour la première femme, coller la formule sur la cellule du dessous et étirer.
VB:
=SI(ET(F23="A";[@Sexe]="F");"B";SI(ET(F23="B";[@Sexe]="F");"C";SI(et(F23="C";E24="F");"D";"A")))
et pour les hommes remplacer dans la formule "F" par "M" avec le même principe.

Bonjour Staple,
Bien vu
je suis capable de le faire avec des formules ect ... mais j'ai besoin une action VBA automatique...merci
 

sylvainroberge

XLDnaute Nouveau
Je ne comprends pas j'utilise pour une premiere fois excel-download pour posé une question et j'aurais aimé faire VBA pour un tri et ajouté des données vis a vis chaque ligne voir mon exemple de mon fichier ...si tu me parle de CODE ou BBCODE ??? ect je ne comprends pas
 

sylvainroberge

XLDnaute Nouveau
Bonjour
Merci encore mais je vais faire plus attention
pour le moment je n'ai pas eu de solution preposé SEULEMENT une avec une formule mais j'ai besoin vraiment par VBA c'est pour appliquer dans un autre fichier je voulais avoir un exemble , mon fichier est vraiment plus conplexe et j'ai crée un très petit fichier pour l'utiliser comme exemple
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, sylvainroberge

Une proposition "bricolée"
(qui semble faire ce qu'il faut faire (tout du moins ce que j'ai compris)
VB:
Sub Main()
Inserer_NL
Trier_LO
End Sub
Private Sub Inserer_NL()
Range("Tableau1[13]").FormulaR1C1 = "=CHOOSE(MOD(COUNTIF(Feuil1!R2C5:Feuil1!RC5,Feuil1!RC5),4)+1,""D"",""A"",""B"",""C"")"
End Sub
Private Sub Trier_LO()
Dim LO As ListObject
Set LO = Worksheets("Feuil1").ListObjects("Tableau1")
LO.DataBodyRange.Sort Key1:=Range("Tableau1[Sexe]"), Order1:=xlAscending, Header:=xlYes
End Sub
PS: Test OK sur ta PJ
 

sylvainroberge

XLDnaute Nouveau
Bonjour le fil, sylvainroberge

Une proposition "bricolée"
(qui semble faire ce qu'il faut faire (tout du moins ce que j'ai compris)
VB:
Sub Main()
Inserer_NL
Trier_LO
End Sub
Private Sub Inserer_NL()
Range("Tableau1[13]").FormulaR1C1 = "=CHOOSE(MOD(COUNTIF(Feuil1!R2C5:Feuil1!RC5,Feuil1!RC5),4)+1,""D"",""A"",""B"",""C"")"
End Sub
Private Sub Trier_LO()
Dim LO As ListObject
Set LO = Worksheets("Feuil1").ListObjects("Tableau1")
LO.DataBodyRange.Sort Key1:=Range("Tableau1[Sexe]"), Order1:=xlAscending, Header:=xlYes
End Sub
PS: Test OK sur ta PJ
Bonjour
Tu as vraiment réussi , merci , pour comprendre et évoluer dans VBA , dans les codes , peux tu m'expliquer FormulaR1C1 ?et Feuil1!R2C5 ?? ...c'est les R1C1 et R2C5 que je ne comprends pas ???

DE PLUS je veux bien inscrire "résolu" mais je ne trouve pas l'endroit que je devrais clic...
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

R pour Row (ligne en anglais)
C pour Column (colonne en anglais)
Pour plus d'explications, voir ici (par exemple)

EDITION: Il n'est pas obligatoire de marquer Résolu
D'ailleurs, pour moi (et ce n'est que mon avis), une question n'est jamais résolue, il y aura toujours une autre façon de solutionner une question.
;)
 
Dernière édition:

sylvainroberge

XLDnaute Nouveau
Re

R pour Row (ligne en anglais)
C pour Column (colonne en anglais)
Pour plus d'explications, voir ici (par exemple)

EDITION: Il n'est pas obligatoire de marquer Résolu
D'ailleurs, pour moi (et ce n'est que mon avis), une question n'est jamais résolue, il y aura toujours une autre façon de solutionner une question.
;)
Encore merci je vais etudier pour mieux comprendre et j'aurai comme tu dis sur sur sur d'autres questions - réponses !!! le fichier était pour simplifier je vais faire une tentative dans mon vrai fichier... si j'ai trop de difficulter tu me permetteras de mettre le fichier et corriger mes erreurs...merci d'avance
 

sylvainroberge

XLDnaute Nouveau
Je vais joindre mon fichier des joueurs de volley ...j'étais rendu à la semaine 14 (cell as43)
tu as une liste de joueurs (env 100) il y a dans les colones "O" pour Oui présent cette soirée "N" Non pour absent ...ect.
Le soir du volley pour créer les équipes (4) je fais manuelement filtre des "O" pour la date de la soirée PUIS tri par 1er sexe..(F=Fille , M=Masculin) puis tri par calibre total décroissant.
Nous devrions avoir généralement entre 16 -28 joueurs 'O'ui - les autres ne serons pas trié, et dans aucune équipe (il y MAX 7 joueurs par équipes x 4)
j'écris manuelement A , B , C et D pour les 4 premieres F ...et continu jusqu"a ce que je n'ai plus de F...VOICI LE PROBLEME DE PROGRAMMATION je dois completer mes choix pour completer les équipes AVEC le meme nombre de joueurs (par ex j'ai 6 filles cette soirée je vais completer avec 2 "M" mais les plus faible donc en bas de mon filtre-tri)...(s'il y n'y a plus de F) je commence les M pour 4 joueurs.
A PARTIR de ce moment j'ai 3 joueurs choisis par équipes. JE REFAIS MANUELEMENT un filtre pour n'avoir que les joueurs pas choisi et je les tri par le calibre 'bloc' et il n'y a que des M pas choisi et a partir de mes totaux (en haut dans la colone de cette journée) je vais "équilibrer" et quelques points de difference pour équilibrer les équipe , je recommence avec un filtre 'denfense' pour avoir seulement les 'non choisis' et je complete tous les joueurs pour etre le plus pres d'avoir des equipes equilibres.
apres je serai capable de copier par equipe sur l'autre feuille ect...mais c'est tout les tri-et filtre que je dois faire et le choix de facon manuelle que je veux eliminer.
DANS le fichier (Volley_HIV2020,xlsm ) les 13 premieres sont completés ...merci
je vais aussi envoyé avec celui que je travaillais (liste des joueurs ANCIEN(hiv-2020).xlsm)
TU N'AS que d'aller dans la feuille 'Équipe' et peser sur le bouton macro"soumettre'.

mais la personne qui l'a fait nous quitte et n'a pas fait les corrections dans le nouveau fichier le tri dans le nouveau
 

Pièces jointes

  • Volley_HIV_2020.xlsm
    131.9 KB · Affichages: 4
  • Liste des joueurs ANCIEN(hiv-2020).xlsm
    949.4 KB · Affichages: 2
Dernière édition:

dg62

XLDnaute Barbatruc
Bonjour le fil,
une autre façon de gérer ABCD beaucoup moins concise mais qui fait également le boulot.
VB:
Sub ABCD()
' A appliquer après le tri sur le sexe
' Maplage et derlig à adapter
Dim derlig As Integer
Dim sexeF As Integer
Dim sexeM As Integer
Dim maplage As String
Dim car As Integer
car = 65 'caractère A en ASCII
Dim i As Integer
Dim j As Integer

derlig = Range("A" & Rows.Count).End(xlUp).Row 'nombre d'éléments
maplage = "A1:A" & derlig 'la colonne
sexeF = Application.WorksheetFunction.CountIf(Range(maplage), "F") 'nombre de femmes
sexeM = Application.WorksheetFunction.CountIf(Range(maplage), "M") ' nombre d'hommes
j = 0

For i = 1 To sexeF 'traitement F

Range("A1").Offset(j, 1).Value = Chr(car)
    car = car + 1
    j = j + 1
        If car = 69 Then
        car = 65
        End If

Next i

car = 65
For i = 1 To sexeM 'traitement M

Range("A1").Offset(j, 1).Value = Chr(car)
    car = car + 1
    j = j + 1
        If car = 69 Then
        car = 65
        End If

Next i


End Sub
 

sylvainroberge

XLDnaute Nouveau
Bonjour
peux tu inserer dans le fichier j'ai copié et cela ne fonctionne pas MAIS il serait peut etre mieux de voir les 2 autres fichiers pour comprendre vraiment se que j'avais besoin j'avais fait un petit exemple mais je crois il serait plus simple de voir l'application que je voulait faire
 

Discussions similaires

Réponses
6
Affichages
202

Statistiques des forums

Discussions
311 732
Messages
2 081 997
Membres
101 861
dernier inscrit
Jerem28630