Supprimer une ligne dans une ListView ?
1. ID
- Pour l'ID dans la feuille Inscriptions, on peut se passer de cette info si la listview est bien dans le même ordre que la liste dans la feuille Inscription. Le souci qui pourrait arriver c'est une ordre de noms différents entre la listview et la feuille. Exemple vous triez par noms dans la listview puis vous voulez supprimer un nom. Dans ce cas, il faudrait chercher la ligne dans la feuille Inscription en utilisant le nom. Risqué si on a deux noms identiques... D'où l'ID qui solutionne la recherche.
- Ok pour l'ID NM1.... pour les non membres
2. Date
Ok pour la date en colonne 17. Par contre après analyse, je reviens sur cette colonne contenant le X. Je n'avais pas saisi au départ mais cela me parait important d'ajouter cette donnée dans la feuille membres. Elle va permettre de savoir qui est en compétition ou pas et surtout de ne pas avoir de doublons entre les 2 listview.
Exemple : Vous chargez l'usf inscription, la listview1 est complétée d'après la feuille Membres. Vous ajoutez les membres en listview2. Cet ajout complète aussi la feuille inscriptions. Fermez le fichier et réouvrez le.... vous aurez un doublon entre listview1 et listview2 !
Du coup je propose de rajouter une info pour le X en colonne R (on pourrait l'appeler "En compétition", "En cooncours" ou autre nom). Dites moi
3. je compte d'ailleurs supprimer ce UserForm et intégrer l'enregistrement des joueurs non membres dans le UserForm "usf_Inscription" en me servant du bonton "Inscription joueur non membre" pour élargir "usf_Inscription".
Vous pouvez mais je ne suis pas sûr que ce soit une bonne idée. Je laisserais cette userform en place et l'appellerais depuis l'usf inscription via un bouton. Ce sera plus facile à gérer aux niveau des codes puis vous restez dans la philosophie de l'usf gestion
Rem : j'ai une question concernant la feuille Inscription, quelle info doit être mise en colonne G DicoH/F ?
OK pour l'ID dans la feuille "Inscription", d'autant plus qu'on va y inscrire les joueurs non membres avec une ID différente "NM1".
Au Fait, Mélanger 2 ID dans la même colonne est possible ?
...
Pour le deuxième point, il ne doit pas être possible de fermer et d'ouvrir a nouveau le "usf_Inscription" durant les inscriptions.
Il ne pourra donc pas y avoir de doublons entre les deux ListView. Un membre inscrit disparait de la ListView1, et un membre inscrit annulé y reviens.
Après, je m'en remet à votre préssenti, Faite pour le mieux....
Enfin pour la colonne ("G"), je crois qu c'est une colonne qui servait uniquement de vérification pour le bon fonctionnement des dico.
Elle n'a plus d'intérêt maintenant.
Merci a vous
Bonjour
Au Fait, Mélanger 2 ID dans la même colonne est possible ?
Rien ne l'empêche à ce stade. Il suffit de l'ajouter dans la colonne A de la feuille inscription depuis l'usf nom membres. Il peut ensuite être ajouté en Listview2 avec, par exemple, une couleur différente pour montrer que le joueur est nom membre.
A moins que vous pensiez à autre chose.
Pour le deuxième point, il ne doit pas être possible de fermer et d'ouvrir a nouveau le "usf_Inscription" durant les inscriptions.
Ok. Cela peut se faire mais cela n'empêche pas de prévoir un cas spécifique (genre bug,....) qui obligerait à fermer excel puis devoir tout recommencer. En ajoutant le X dans la colonne, cela évitera toujours le doublon entre la listview1 et la listview2.
Enfin pour la colonne ("G"), je crois qu c'est une colonne qui servait uniquement de vérification pour le bon fonctionnement des dico.
Je vous laisserai faire.
Bonjour Dan,
OK pour l'ID et la couleur dans la ListVew2, c'est une bonne idée.
je n'avais pas envisagé le bug, mais c'est vrai qu'il existe...
Faites ce qui vous semble nécessaire.
Merci infiniment.
OK pour l'ID et la couleur dans la ListVew2, c'est une bonne idée.
Est-ce que vous voulez que la couleur se rajoute dès que l'on inscrit un non membre depuis l'usf Inscription non membre ?
Cette question parce que vous aviez envisagé de supprimer l'usf non membre pour placer les textbox dans l'usf inscription. Voir ce que voulez faire ou alors je laisse en suspend
Pour ma part je trouvais pas mal de faire une usf séparée mais à vous de me dire
Je vais me rallier à votre conseil, je conserve l'usf séparé, j'ai vu qu'un userform avait une propriété ".visible", il disparaitra donc à l'ouverture du "usf_NomMembre",
et réapparaîtra à la fermeture de celui ci.
il disparaitra donc à l'ouverture du "usf_NomMembre",et réapparaîtra à la fermeture de celui ci.
Je n'ai pas compris. Pour l'instant vous cliquez sur le bouton "inscription non membres" disponible dans l'usf inscription, vous inscrivez les joueurs puis vous quittez cette usf une fois les non membres inscrits. Juste ?
Edit : lorsque vous utilisez l'usf inscription non membres c'est elle qui est active et est positionnée à droite de l'usf inscription qui elle reste en arrière plan. cela va vous montrer les ajouts
C'est vrai, vous avez raison, encore une fois, je n'y avais pas réfléchi...
l'usf_Iscriptions restera donc visible, merci pour toutes vos idées...
Bonjour
Votre fichier en retour avec les modifications suivantes :
- Feuille Membres : ajout colonne 18 utilisée en cas de concours
- feuille Inscription : ajout ID en colonne A et changé les formules en colonne K
- USF gestion : les Codes Initialize, actualisation, btn_Enregistrer_Click, btn_Modif_Click, btn_Suppr_Click sont adaptés suite au tableau structuré nommé "TabMembres"
- USF inscription :
--- tous les codes sont modifiés en fonction de l'ajout de la colonne ID et du tableau structuré
--- La listview2 reprend les inscriptions sélectionnés depuis la listview1. Les noms de la listview2 ne sont plus dans la listview et vice versa.
--- la suppression d'un nom de la listview2 rajoute ce nom en listview1 (sauf pour les non membres) et le supprime de la feuille Inscription.
--- les codes des boutons annulation et inscrire au concours ne s'exécute que si le nom est sélectionné
--- le code de Remise à zéro supprime la liste dans la feuille inscription et les X dans la colonne R de la feuille Membre
--- j'ai renommé les codes Initliste en Initliste1 (pour listview1) et Initlist1 en Initliste2 (pour listview2)
- USF Non Membres :
--- Adpaté le code CommandButton1_Click pour ajout de l'ID "NMx" pour les non membres
--- A voir mais la textbox3 peut être supprimée. Il suffirait d'utiliser le bouton d'option1 Homme ou option2 Femme. Si coché, on récupère la première lettre pour l'ajouter dans la feuille
--- les ajouts de Non Membres sont ajoutés dans la listview2 de l'usf Inscription qui est en arrière plan et sont en couleur rouge
Sauf TabMembres, une grosse partie des noms dans le gestionnaire de noms sera à supprimer. Ils ne servent plus vu la modifications des codes. A vérifier toutefois au cas par cas. (je n'ai pas encore regardé ce point)
Je vous ai laissé les anciennes USF Gestion et Inscription renommées OLD. Elles sont à supprimer lorsque vous n'en aurez plus besoin.
Faites quelques tests
Merci Dan,
Je vais m'y pencher dés demain, et vous retourne mes impressions au plus vite...
Merci encore infiniment...
Merci infiniment Dan,
Je viens de regarder ce que vous avez fait, et c'est parfait....
Je vais me plonger dedans un peu plus pour assimiler ces propriétés "PivoteTable" que je n'ai encore jamais abordé...
Dans l'ensemble, le code que vous avez produit me semble effectivement plus clair que celui que j'avais auparavant.
Merci encore mille fois pour votre aide précieuse.
Je vais me plonger dedans un peu plus pour assimiler ces propriétés "PivoteTable"
Il n'y a pas de propriétés "Pivot table" dans ce que je vous ai proposé...
Dans votre USF non membres, vous pourriez supprimer la Textbox3 qui est masquée. Une fois fait, remplacer tous les codes de l'usf par ceux placés dans le fichier joint
A votre dispo si besoin
Si tout est ok
Cordialement
Bonjour Dan,
Ce qui m'a fait croire à "Pivot table", c'est l'aide Microsoft par la touche "F1":
https://docs.microsoft.com/fr-fr/office/vba/api/excel.pivottable.databodyrange?f1url=%3FappId%3DDev1...
Je vais remplacer les codes comme vous le préconisez, mais pour l'instant, j'ai un soucis lorsque je lance le tirage de la feuille concours:
J'ai un bug "400" à la ligne "Cells(Dl - 2, 10).Select" en fin de procédure "Sub Grille1()" dans le module "M_EnteteEtGrilles".
J'ai essayé avec les 3 compositions d'équipes et je suis toujours à la recherche d'une solution....
Si vous avez une idée, elle est la bienvenue...
Bonjour
Ce qui m'a fait croire à "Pivot table", c'est l'aide Microsoft par la touche "F1"
Non le "Pivot table" correspond aux tableaux croisés dynamiques. Le fichier n'en contient pas. Dites moi ce que vous cherchez, je peux peut-être vous orienter.
J'ai un bug "400" à la ligne "Cells(Dl - 2, 10).Select" en fin de procédure "Sub Grille1()" dans le module "M_EnteteEtGrilles".
Il faudrait d'abord que je comprenne comment votre fichier est complété avant de cliquer sur le bouton Tirage.
A la lecture de votre souci, si vous avez un bug, c'est ce que DI est inférieur à 3. Si DI-2 lorsque DI est inférieur à 3 vous revoie les lignes 0 ou -1 sur votre feuille.
Sinon quelques questions :
- pourquoi voulez-vous sélectionner cette cellule ??
- à quoi sert la variable D1 ??
- pourquoi avez vous deux codes grille ? (Grille1 et Grille1 Triplette)
Autre chose, il y a beaucoup de Select dans ce code. A éviter avec VBA si possible, cela ne fait que ralentir le code et ne sert à rien
EDIT : Dans votre feuille concours, j'ai simplifié les codes OptionButtonX_Click et la macro Worksheet_BeforeDoubleClick. Vous pouvez les remplacer par ceux placés dans le fichier joint. Je les ai adapté dans mon fichier de travail.
A noter que je me demande pourquoi vous avez placés tous les autres codes dans la feuille Concours au lieu de les mettre dans un module.
Bonjour Dan,
Pardon de ne pas avoir répondu plus tôt, mais ce weekend, le n'étais pas là.
Pour le cheminement du fichier : un exemple (Doublettes) avec la cellule V1 cochée dans la feuille "Concourt"
| Bouton "Clore les inscriptions" : Les 3 boutons de tirage apparaissent |
| Bouton " Tirage Doublettes " |
| On selectionne la feuille "Concours" |
| Dans cette feulle, on valide le bouton d'option 2 (cellule V1) |
| On appelle la procédure "Feuil12.DecomperLesParties" |
| Le Userform disparait |
| dans la procédure "Décompter les parties" |
| On fait la boucle "If Tournois = 2 then" qui gère la ligne suivante. |
| On appelle la procédure "Worksheets("Concours").GagnantsConcoursDoublette_2eP" de la feuille "Concours" |
| On appele la procédure "Sub Tirage(equip As Integer)" du module "M_Tirages" |
| On inscrit le sexe indenté de son N° de comptage dans la colonne "G" de la feuille "inscriptions" |
| On fait un tirage au sort dans la colonne "G", on concatène les noms et prénoms pour les inscrire en colonnes "N" et "O" de la même feuille. |
| Ensuite on clique sur le bouton "Tirage" |
| On appele la procédure "Tirage Doublettes "du module "M_Tirages") |
| On crée les équipes dans la feuille "Concours". |
Pour la ligne "Cells(Dl - 2, 10), vous avez raison, je l'ai supprimée et ça fonctionne apparemment très bien sans.
Pour "D1", Je n'en ai pas dans mon programme, je suppose que vous voulez parler de "Dl_1")
auquel cas je craois quelle sert a positionner le dessin des grilles.
Pour la 2ème Procédure "Grille", Je l'ai également supprimée sans problèmes apparents.
Pour les "select", par quoi puis-je les remplacer pour que ce soit moins lourd ?
Pour les codes dans la feuille "Concours", Je pensais que comme ils ne servaient qu'a cette feuille, il valait mieux les mettre là...
Voilà, j'espère n'avoir rien oublié...
En attendant vos directives de travail, je vous remercie de toute l'aide que vous m'apportez...
Merci de vos explications, je vais analyser
1. Pour "D1", Je n'en ai pas dans mon programme, je suppose que vous voulez parler de "Dl_1")
Si vous avez cela dans la sub Grille1, tout au début et dans la sub Grille1Triplette et aussi dans la sub DecomperLesParties
2. Pour les codes dans la feuille "Concours", Je pensais que comme ils ne servaient qu'a cette feuille, il valait mieux les mettre là...
cela fonctionne bien entendu. Mais habituellement je préfère laisser uniquement les codes de type private dans les feuilles et les autres (Sub ou Public sub) dans un module. Parfois cela évite de dupliquer des lignes mais aussi de perdre les codes si par hasard on supprime la feuille par exemple (cela arrive...malheureusement)
3. Bouton "Clore les inscriptions" : Les 3 boutons de tirage apparaissent
Là j'ai un bug sur le clikc "Clore les inscriptions", le code pose souci sur "btnannulation.visible". dites moi
4. dans mon message précédent, j'ai placé un fichier avec les codes que vous pouvez modifier. Je viens de voir un petite erreur que j'avais faite sur les codes Private Sub OptionButton3_Click() et Private Sub OptionButton2_Click(). Remplacez les dans votre fichier
5. A quoi servent les colonnes N à Q dans la feuille Inscriptions ? Elles interviennent dans le code DecomperLesParties pour la variable CompteP mais je ne vois pas la raison de ces colonnes puisque l'info existe dans la colonne B (ou A devenue ID)
Bonsoir Dan,
Pour les "Dl", Je l'ai supprimé de la procédure "Grille1", et j'ai supprimé complètement "Grille1Triplette".
Dans "la sub DecomperLesParties", je les ai également supprimé...
Pardon pour le bug "btnannulation", c'est de ma faute, J'ai oublié de le renommer dans le fichier que je vous ai fourni.
Je l'ai renommé "btn_Annulation" et ai rectifié également le code du bouton "Clore les inscriptions".
J'ai vu que vous aviez fait un copié collé Du bouton1 pour les 2 et 3, J'ai rectifié de moi-même.
Ce qui m'a le plus perturbé, c'est les guillemets qui avaient disparu dans votre fichier texte...
Quand au colonnes N à Q de la feuille "Inscriptions", Elles servent à la constitution des équipes (Tat, Doublettes ou Triplettes), un tirage aléatoire et fait en colonne "N", puis un tri avant des les envoyer dans la feuille "concours".
Merci pour votre pugnacité a vouloir m'aider...
PS: La colonne "H" de la feuille "Inscription est importante, si elle ne se rempli pas, le programme bug?
il faut remplacer le code des dicos (DicoH et DicoF) dans la "Sub Tirage(equip As Integer)" par le code suivant:
'homme
Do Until DicoH.Count = H 'Faire jusqu'a ce que le dico soit rempli au compte de H
v = Int((H) * Rnd() + 1)
If Not DicoH.Exists(v) Then ' vérifier que le tirage au sort n'est pas dans le dico
DicoH.Add v, "" ' le nombre n'est pas dans le dico alors ajout du nombre
N = N + 1 ' changement de ligne pour inscription nom et prénom
joueur = Application.Match("H" & v, .Range("H:H"), 0) 'trouve la ligne correspondance dans la colonne H
nom = Application.Index(.Range("B:B"), joueur) 'nom (colonne B) de la ligne correspondance
prénom = Application.Index(.Range("C:C"), joueur) 'prénom (colonne C) de la ligne correspondance
.Cells(N, col) = nom & "-" & prénom ' inscrit Nom et prénom en colonne O (O=14)
If N = equipe + 1 Then col = col + 1: N = 1 ' si le nombre de "premier" joueurs pour chaque équipe est atteint on passe a la colonne suivante (P)
End If
Loop
If N = equipe + 1 Then col = col + 1 ' on passe a la colonne suivante (Q) pour la prochaine boucle Femme
'femme
Do Until DicoF.Count = F
v = Int((F) * Rnd() + 1)
If Not DicoF.Exists(v) Then
DicoF.Add v, ""
joueur = Application.Match("F" & v, .Range("H:H"), 0)
nom = Application.Index(.Range("B:B"), joueur)
prénom = Application.Index(.Range("C:C"), joueur)
.Cells(N + 1, col) = nom & "-" & prénom
N = N + 1
If N = equipe + 1 Then col = col + 1: N = 1
End If
LoopPardon pour le bug "btnannulation", c'est de ma faute, J'ai oublié de le renommer dans le fichier que je vous ai fourni.
Ok je l'ai modifié mais vous devez aussi renommer le code "Btn_désincrireauconcours" en " Btn_Annulation"
J'ai vu que vous aviez fait un copié collé Du bouton1 pour les 2 et 3, J'ai rectifié de moi-même.
Ce qui m'a le plus perturbé, c'est les guillemets qui avaient disparu dans votre fichier texte...
Bah je ne sais pas de quels guillemets vous parlez mais rien d'anormal dans le fichier texte posté ici. Il suffisait de faire un copier du code puis coller dans votre usf.
il faut remplacer le code des dicos (DicoH et DicoF) dans la "Sub Tirage(equip As Integer)" par le code suivant:
ok j'ai corrigé.
Bonjour Dan,
le bouton "Btn_désincrireauconcours" a bien été modifié.
Voici le code quand j'ai ouvert le fichier texte :
Option Explicit
' ======================================================================
' = INITALISATION DU FORMULAIRE =
' ======================================================================
' Initialisation du UserForm usf_NonMembre
' ---------------------------------------------------------------------------------------------------------------------------
' Initialisation du UserForm usf_NonMembre
' ---------------------------------------------------------------------------------------------------------------------------
Private Sub UserForm_Initialize()
Dim Ctrl As Control
Dim i As Byte
For i = 1 To 2
With Me.Controls(Textbox & i)
.Value =
.BackColor = &H80000016
.Font.Bold = True
End With
'If i = 3 Then Me.Controls(Textbox & i).Visible = False
Next i
'TextBox3.Visible = False
End Sub
' ======================================================================
' = CONFIGURATION DE LA TEXTBOX NOM =
' ======================================================================
' Au format MAJUSCULE
' ---------------------------------------------------------------------------------------------------------------------------
Private Sub TextBox1_Change()
TextBox1.Value = UCase(TextBox1.Value)
End Sub
' ======================================================================
' = CONFIGURATION DE LA TEXTBOX Prenom =
' ======================================================================
' 1ere lettre en Majuscule
' ---------------------------------------------------------------------------------------------------------------------------
Private Sub TextBox2_Change()
TextBox2.Value = Application.Proper(TextBox2.Value)
End Sub
' ======================================================================
' = CONFIGURATION DU BOUTON Inscrire =
' ======================================================================
' Permet d'enregistrer un joueur non membre du club au concours
' ---------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton1_Click()
Dim lastRw As Long
Dim L As Byte
For L = 1 To 2
If Controls(TextBox & L).Value = Then
MsgBox Vous n'avez pas rempli ce champ, vbOKOnly + vbCritical, Alerte
Me.Controls(TextBox & L).SetFocus
Exit Sub
End If
Next L
If OptionButton1 = False And OptionButton2 = False Then MsgBox Choisir un sexe Exit Sub
Set Sh2 = Inscriptions
With Sh2
lastRw = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(lastRw, 1).Value = NM & WorksheetFunction.CountIf(Sh2.Range(A2A & lastRw), =NM) + 1 'ID
.Cells(lastRw, 2).Value = TextBox1.Value 'Nom
.Cells(lastRw, 3).Value = TextBox2.Value 'prenom
If OptionButton1 = True Then 'sexe
.Cells(lastRw, 4).Value = H
Else .Cells(lastRw, 4).Value = F
End If
If Me.CheckBox1 = True Then .Cells(lastRw, 5) = X 'tireur
If Me.CheckBox2 = True Then .Cells(lastRw, 6) = X 'milieu
If Me.CheckBox3 = True Then .Cells(lastRw, 7) = X 'pointeur
'couleur rouge cas nom membre
If .Cells(lastRw, 1).Value Like NM Then .Range(A & lastRw & G & lastRw).Font.Color = -16776961
End With
Call usf_Inscription.InitListe2
Unload Me
End Sub
' ======================================================================
' = QUITTER LE FORMULAIRE =
' ======================================================================
' Bouton Quitter dans Userform usf_NonMembre
' ---------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton2_Click()
Unload Me
End SubJe ne sais pas ce qu'il s'est passé ....
Mais c'est pas grave, Je les ai remis.
Je continue de mon coté a essayer d'épurer le code, et a remettre les chose en place, car pour l'instant, j'ai un défaut au niveau du transfert des noms concaténé de la feuille "Inscriptions" à la feuille "concours".
ils se déplacent bien en tirage1, mais J'ai un manque pour les 2 autres tirages.
J'ai également une grille incomplète pour les 3 Tirages.
Je cherche, je cherche...
A+
Pour le code, effectivement il y a eu un souci dans le fichier sur le code Private Sub CommandButton1_Click() au sujet des guillemets.
Le revoici tel qu'il devait être posté
Private Sub CommandButton1_Click()
Dim lastRw As Long
Dim L As Byte
For L = 1 To 2
If Controls("TextBox" & L).Value = "" Then
MsgBox "Vous n'avez pas rempli ce champ", vbOKOnly + vbCritical, "Alerte"
Me.Controls("TextBox" & L).SetFocus
Exit Sub
End If
Next L
If OptionButton1 = False And OptionButton2 = False Then MsgBox "Choisir un sexe": Exit Sub
Set Sh2 = Inscriptions
With Sh2
lastRw = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(lastRw, 1).Value = "NM" & WorksheetFunction.CountIf(Sh2.Range("A2:A" & lastRw), "=NM*") + 1 'ID
.Cells(lastRw, 2).Value = TextBox1.Value 'Nom
.Cells(lastRw, 3).Value = TextBox2.Value 'prenom
If OptionButton1 = True Then 'sexe
.Cells(lastRw, 4).Value = "H"
Else: .Cells(lastRw, 4).Value = "F"
End If
If Me.CheckBox1 = True Then .Cells(lastRw, 5) = "X" 'tireur
If Me.CheckBox2 = True Then .Cells(lastRw, 6) = "X" 'milieu
If Me.CheckBox3 = True Then .Cells(lastRw, 7) = "X" 'pointeur
'couleur rouge cas nom membre
If .Cells(lastRw, 1).Value Like "NM*" Then .Range("A" & lastRw & ":G" & lastRw).Font.Color = -16776961
End With
Call usf_Inscription.InitListe2
Unload Me
End SubEdit :
1. j'ai modifié le fichier posté ici qui comportait une erreur dans option2 et option3-->https://forum.excel-pratique.com/s/goto/1052667 Reprenez les codes dans celui là
2. Dans la macro Decomptepartie, au début du code il y a une variable CompteP qui prend le nombre en colonne N. J'ai 4 inscrits, je clique sur Tirage tete à tete ou doublette, mais comme il n'y a rien en colonne N, CompteP égal à 0. Normal cela ?