XL 2016 Macro: Eviter les conflits ente les noms et les dates

karakoman1

XLDnaute Occasionnel
Bonjour le forum,
J'aimerais si c'est possible, pouvoir importer dans un tableau comportant des dates, des noms de personnes provenant d'une liste, tout en évitant de mettre ces personnes les jours ou ils sont indisponibles.
Un exemple concret vaut mieux que mes explications. (Voir fichier)
Voici la macro dans laquelle il faudrait pouvoir l'intégrer.

Code:
Sub Test_V2()
'Variables
Dim t As Variant, i&, lgDeb&, nCopy&, item$
'valeurs dans l'array
Application.ScreenUpdating = False

                  'Copier coller la liste des joueurs et le nombre de fois sur la feuille 4

    Sheets("Tableau").Range("N3:N12").Copy Destination:=Sheets("Feuil2").Range("A1")
Sheets("Tableau").Range("L3:L12").Copy Destination:=Sheets("Feuil2").Range("B1")
Sheets("Feuil2").Select



                ' Faire 4 colonnes de 30 noms sur la feuil2

t = Range("a1").CurrentRegion
lgDeb = 1 'début ligne
'boucle
For i = 1 To UBound(t, 1)
     item = t(i, 2): nCopy = t(i, 1) - 1
     If nCopy > -1 Then
     Range("d" & lgDeb & ":d" & (lgDeb + nCopy)).Value = item 'recopie en colonne d
     lgDeb = lgDeb + nCopy + 1 'incrément
     Range("D1").Select
    Range(Selection, Selection.End(xlDown)).Select
     End If
Next



Dim TSrc(), RngCbl As Range, TCbl(), LSrc As Long, CSrc As Long, LCbl As Long, CCbl As Long
TSrc = Selection.Value
On Error Resume Next
Set RngCbl = Range("f1:i30")
If Err Then Exit Sub
On Error GoTo 0
ReDim TCbl(1 To RngCbl.Rows.Count, 1 To RngCbl.Columns.Count)
CCbl = 1
For CSrc = 1 To UBound(TSrc, 2)
    For LSrc = 1 To UBound(TSrc, 1): LCbl = LCbl + 1
       If LCbl > UBound(TCbl, 1) Then
          LCbl = 1: CCbl = CCbl + 1: If CCbl > UBound(TCbl, 2) Then Exit For
          End If
       TCbl(LCbl, CCbl) = TSrc(LSrc, CSrc): Next LSrc, CSrc
RngCbl.Value = TCbl
                'Importer les 4 plages de 30 noms dans le tableau
Range("F1").Select
Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("Tableau").Select
    Range("c3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Feuil2").Select
    Range("G1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Tableau").Select
    Range("e3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Feuil2").Select
    Range("H1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Tableau").Select
    Range("g3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Feuil2").Select
    Range("I1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Tableau").Select
    Range("i3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
     Sheets("Feuil2").Select
        Cells.Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("Tableau").Select
    Range("B2").Select

   'Appel des macros "mixer_joueur" et les executer 5 fois chacune
    For i = 1 To 5
Application.Run "Module1.Mixer_joueur_1"
Application.Run "Module1.Mixer_joueur_2"
Application.Run "Module1.Mixer_joueur_3"
Application.Run "Module1.Mixer_joueur_4"
Next

  Application.ScreenUpdating = True
End Sub
Merci d'avance à qui pourra m'aider
 

Pièces jointes

  • Conflits Noms Dates.xlsx
    13.2 KB · Affichages: 36
Dernière édition:

karakoman1

XLDnaute Occasionnel
Bonjour mapomme,

Ce que tu as réussi la est tout bonnement génial.
J'ai fait plusieurs essais et ca a l'air d'être juste au niveau des dates d'indisponibilités.
Au niveau de ces indisponibilités, penses-tu que c'est fiable à 100% ou alors il vaut quand même mieux vérifier qu'il n'y ai pas une erreur? :rolleyes:

Autrement, il me reste "tout simplement" (grâce à toi) à importer le reste de mes macros pour le terminer.

Je te remercie énormément et te souhaite une excellente fin d'après-midi.

Edit:
J'aurais quand même une dernière petite demande.

La, ce serait la cerise sur le gateau!!

Serait il possible d'y intégrer le fait de ne pas mettre de noms dans les lignes ou il y a des indisponibilités de terrain mais plutôt d'y inscrire "Tournoi" dans chaque case au lieu des Noms de joueurs?
Le nombre de places disponibles diminuera en fonction des dates d'indisponibilités du terrain, mais je l'adapterais dans le nombre de fois demandé pour chaque joueur
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Au niveau de ces indisponibilités, penses-tu que c'est fiable à 100% ou alors il vaut quand même mieux vérifier qu'il n'y ai pas une erreur?

La macro balaye chaque cellule du tableau initial (en Feuil2) à la recherche de conflit. En cas de conflit, la macro va échanger le nom de la ligne en conflit avec un autre nom d'une autre ligne de la même colonne (après avoir vérifié que chacun des noms ne sera pas en conflit après l'échange). La méthode semble donc être fiable. Après, c'est un problème de justesse du codage.
Cependant, Il se peut que la macro ne trouve pas de solution, et, dans ce cas elle doit le détecter.
Pour le voir, interdire à Raymond et à Bruno le 20/09/2017. la macro va normalement échouer et l'annoncer.
 

karakoman1

XLDnaute Occasionnel
Re,
En effet, j'ai vérifié et j'ai un message d'erreur
Pour ma dernière demande, j'ai oublié de mettre le fichier avec la modification.
J'ai intégré dans le module1 la macro pour insérer les dates de tournois, mais forcément je ne suis plus juste au niveau des demandes du nombre de fois demandé.
Je te joint ce fichier.
 

Pièces jointes

  • Tableau rencontres de tennis v3.xlsm
    37.2 KB · Affichages: 28

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

J'utilise un format personnalisé pour les cellules des noms correspondant à la date d'un tournoi. Ce format personnalisé (;;;"Tournoi") affiche le texte Tournoi mais conserve la valeur du nom dans la cellule pour que les vérifications des occurrences des noms soient correctes. J'ai aussi supprimé la MFC qui ne correspondait et ne servait plus à rien.

Les codes des procédures RemplirTableau et DatesTournois ont été modifiés.
 

Pièces jointes

  • karakoman1- Conflits Noms Dates- v4.xlsm
    39.3 KB · Affichages: 24

karakoman1

XLDnaute Occasionnel
Bonjour mapomme,

Je viens de tester le dernier fichier, tout fonctionne très bien.
J'aurais éventuellement une petite demande.
Dans le but de l'utiliser aussi bien pour la saison d'hiver que la saison d'été, le nombre de dates (30 pour l'instant) ne sera très certainement pas le meme.

Serait-il possible d'inclure la possibilité de créer le tableau vide suivant une date de début et une date de fin?

Parce que le probleme va se situer au niveau des macros que je ne parviendrais certainement pas à modifier pour transformer le tableau vide de 30 dates à peut être 25,,26, ou 27 dates.

Ou meme mieux, donner la possibilité de choisir entre une date de début et de fin, ou, demander un nombre de dates (donc de lignes) pour faire le tableau suivant les besoins.

En espérant que ça puisse être réalisable, mais quand je vois déjà le travail que tu as accompli, je n'en doute presque pas :).

Et si vraiment, ce n'est pas réalisable, peut-être pourrais-tu m'indiquer dans la macro, les changements à effectuer afin de pouvoir modifier moi-même le nombre de date (en plus ou en moins)

Je te souhaite une bonne journée
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir karakoman1,

J'y ai pensé. Ma semaine sera chargée. Je ne coderai sans doute qu'en fin de semaine. Mais j'ai une question:
Ou même mieux, donner la possibilité de choisir entre une date de début et de fin, ou, demander un nombre de dates (donc de lignes) pour faire le tableau suivant les besoins.

La macro peut être adaptée aux nombres de lignes du tableau de la feuille "Feuil2" (c'est d’ailleurs ce tableau que je modifie pour arriver au résultat). Donc si on agrandit ou diminue ce tableau, je saurai adapter la macro.

Demander une date de début et de fin, je n'en vois pas l’intérêt. Autant sauvegarder le fichier dans un nouveau pour la saison suivante puis adapter le nombre de ligne du tableau de la feuil2 et mettre les bonnes dates dans le tableau de la feuille "tableau". Une manipulation simple par an, ce n'est pas la mer à boire (et pas l'amer qu'on boit chez moi :D qui lui est à boire). La macro modifiée, se basant sur ce tableau fourni par tes soins, s'adaptera. Ou bien je n'ai pas tout compris.

C'est bien toi qui fournit le tableau de la feuille "Feuil2" avec son nombre de lignes et les noms pour chaque saison ?
 

karakoman1

XLDnaute Occasionnel
Bonsoir mapomme,

Merci d'être toujours dispo.:)

C'est bien moi qui fourni le tableau de la "feuill2" En fait, il se remplit simplement par macro en allant chercher les données dans la feuille Tableau via les plages "O3:O12 et S3:S12" . Données qui sont simplement le nombre de fois que chaque joueur à demandé à pouvoir jouer et que je rentre dans ces plages que j'ai adaptées sur ton dernier fichier envoyé.

Tu me dis:
Demander une date de début et de fin, je n'en vois pas l’intérêt

Mon idée, était de savoir si' il était possible que toute la macro s'adapte automatiquement à une seule question posée au départ, à savoir, combien de semaine ( d'où ma demande de date de début et de fin, ou d'une demande dès le départ, ou alors via un nombre de semaine demandé pour fabriquer le tableau final ).

Il peut peut-être être fait via le total du nombre de fois que les joueurs auront demandé?
Ou alors si tu penses qu'il n'y en a pas besoin, tu as peut-être raison, comme je ne comprends pas bien le fonctionnement de la macro, je ne vois pas son fonctionnement qui sera plus clair une fois que je l'aurais comprise.

Dans le fichier que je joint, j'ai ajouté dans le module1 toutes les macros (3) nécessaires à la préparation du tableau de la "feuil2"
C'est à dire
1- Importer la liste des noms de la plage "O3:O12", et le nombre de fois demandé, plage S3:S12
2- la deuxième fait une colonne de tout les noms multipliés par le nombre de fois que chaque joueur demande pour jouer ( ici, 120 au total )
3 - La troisième réparti ces 120 noms en 4 colonnes (Nos fameuses 4 listes)

Si tu vois autre chose que tu n'as pas bien compris, fais le moi savoir ;)

Je te souhaite une excellente nuit.

PS: Tu m'as donné soif avec ton amer :D
 

Pièces jointes

  • Tableau rencontres de tennis v4a (1).xlsm
    46.8 KB · Affichages: 26

Discussions similaires

Réponses
3
Affichages
606

Statistiques des forums

Discussions
312 484
Messages
2 088 795
Membres
103 970
dernier inscrit
pepito59