Microsoft 365 Aide VBA excel

sebsut1

XLDnaute Nouveau
Bonjour à tous,
j'aurais besoin d'aide concernant un fichier que j'ai mis en pièce-jointe.
C'est un planning d'affectation du personnel. j'ai mis en place une petite macro qui me prévient si je mets 2 fois le même nom dans la même journée. Là ou je bloque, c'est que j'aurais besoin d'un avertissement si j'essaie de positionner une personne (représentées par des lettres dans mon fichier) qui n'est pas présente ce jour (liste des personnes présentes dans l'onglet "Présence semaine".
je ne sais pas si je suis bien clair...
Par exemple, dans l'onglet S48, je met "FF" dans la cellule D14, comme FF n'est pas dans la liste du lundi dans l'onglet "Présence semaine", il faudrait que MSGBoX me dise "personne absente ce jour"

Merci pour votre aide
Bonne journée
Seb
 

Pièces jointes

  • FIT 4 - Copie.xlsm
    42.6 KB · Affichages: 16

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Une autre manière de voir les choses. Le code ci-dessous mettra à jour les validations de données de l'onglet S48 en fonction des noms dans l'onglet Présence semaine. Pour être sûr de son action il est exécuté à l'ouverture du classeur et à la activation de l'onglet S48. L'utilisateur ne pourra pas mettre une personne absente...

Le code :

VB:
Sub Macro1()
Dim OP As Worksheet 'déclare la variable OP (Onglet Présence semaine)
Dim OS As Worksheet 'déclare la variable OS (Onglet S48)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim L As String 'déclare la variable L (Liste)
Dim PL As Range 'déclare la variable PL (PLage)

Set OP = Worksheets("Présence semaine") 'définit l'onglet OP
Set OS = Worksheets("S48") 'définit l'onglet OS
For COL = 1 To 5 'boucle 1 : sur les colonnes COL de 1 à 5
    L = "" 'vide la liste L
    DL = OP.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet OP
    For I = 5 To DL 'boucle 2 : sur toutes les lignes I de  à DL
        L = IIf(L = "", OP.Cells(5, COL).Value, L & "," & OP.Cells(I, COL))
    Next I 'prochaine ligne de la boucle
    Set PL = OS.Columns(COL + 3).SpecialCells(xlCellTypeAllValidation) 'définit la plage PL (cellule ayant une validation de donnée dans la colonne COL)
    With PL.Validation 'prend en compte la plage PL
        .Delete 'efface une éventuelle validation de données existante
        .Add xlValidateList, Formula1:=L 'ajoute la liste L comme liste de validation de données
    End With 'fin de la prise en compte de la plage PL
Next COL 'prochane colonne de la boucle
End Sub

Le fichier :
 

Pièces jointes

  • Sebsut_ED_v01.xlsm
    49.8 KB · Affichages: 4

sebsut1

XLDnaute Nouveau
Bonjour Chalet 53 et Robert et merci pour vots réponses
Je pense que c'est un peu plus compliqué que ça mais je ne vous ai pas tout dit, ceci explique cela...
Dans la liste des personnes des colonnes D à H, j'ai besoin d'avoir uniquement celles qui sont affectées au poste défini en colonne C. Les affectations sont listées dans l'onglet Matrice Compétences à partir de la colonne R ( ex: CLA_P1A1_Vrac: seules D, K et M doivent apparaitrent dans la liste ) c'est pourquoi j'ai utilisé la fonction INDIRECT() dans la liste de données des colonnes D à H.
Conclusion : je ne peux pas "figer" la liste de données des personnes car j'ai besoin que cette liste s'adapte au poste saisi en C
Merci beaucoup pour votre aide
Bonne journée
Seb
 

CHALET53

XLDnaute Barbatruc
J'ai tenté un truc basé sur le schéma suivant :
Lorsque l'on se positionne sur une cellule en D4:H100,
Recherche des individus en cohérence avec la matrice des compétences , la feuille Présence semaine et le projet en colonne C sur la ligne sélectionnée
Les individus élus sont portés en colonne O2 :O100
La liste de validation est alors la même pour tout le monde O2:O....
Je n'ai pas modifié dans toutes les cellules la liste de validation . Il faut mentionner partout : O2:O100
Seul le premier carré est fait
J'ai l'impression que des infos sont en doublon dans les différents tableaux
a+
 

Pièces jointes

  • Sebsut_ED_v01.xlsm
    56.5 KB · Affichages: 7

sebsut1

XLDnaute Nouveau
Bonjour à tous et merci pour vos réponses.
Je vous donne l'explication des doublons : dans l'onglet "présence semaine", je viens coller une extraction d'un logiciel de présence personnel. c'est la donnée brute.
Je viens recopier ce tableau dans l'onglet S48 (colonnes J à N) ce qui me permet, grâce à une formule, d'enlever les noms des personnes utilisées sur le planning, j'ai comme ça la liste des personnes restantes qui ne sont pas encore sur le planning.
 

CHALET53

XLDnaute Barbatruc
Bonjour
J'ai un peu de mal à comprendre la manière dont sont intégrées dans le traitement les informations des colonnes J à N
Comme tu ne précises pas si ma démarche fait avancer le schmilblic, j'ai apporté une modification qui permet de remplir automatiquement la zone de validation pour la cellule sélectionnée
J'ai laissé un pgm dont je ne me sers plus (controle) qui permet de transformer un numéro de colonne en Lettres) : au cas où ça t'intéresserait. J'ai trouvé une autre solution
J'ai squizzé la fin de ton programme Macro1 qui semait la zone dans mon traitement. Je n'ai pas l'impression que cela ait des conséquences particulières

a+
 

Pièces jointes

  • Sebsut_ED_v01 bis.xlsm
    60.8 KB · Affichages: 2

sebsut1

XLDnaute Nouveau
Bonjour Chalet53
Merci beaucoup pour tous tes efforts!! ;)
Pour les colonnes J à N, j'avais besoin d'avoir la liste de mon personnel et que les noms s'elèvent au fur et à mesure que je les positionnent sur le planning. Ca me permet de voir qui il reste à affecter.
Ton prog fonctionne très bien, Dans la liste, je n'ai que les personnes dispos, c'est génial!
Juste une petite chose (si je peux abuser...), je ne peut pas selectionner plusieurs cellules dans les colonnes D à H (pour supprimer tous en une fois par ex)
Merci beaucoup
 

CHALET53

XLDnaute Barbatruc
Le problème est le suivant :
dès que je sélectionne une cellule, la procédure événementielle (.SelectionChange) s'active et annule ta sélection.
J'ai trouvé une parade (de dingue) pour y palier (ça semble fonctionner)
Je n'avais pas vu ton message ci-dessus : j'avais également trouvé une parade pour éliminer les doublons dans la sélection proposée pour la cellule sélectionnée

A vérifier tout ça
 

Pièces jointes

  • Sebsut_ED_v01 ter.xlsm
    67.5 KB · Affichages: 3

sebsut1

XLDnaute Nouveau
Bonjour CHALET53 et tous les autres!
Je reviens à la charge avec mon satané fichier!
j'ai fait une petite modif : au lieu de
Dim OP As Worksheet,
Set OP = Worksheets("Presence semaine")
J'ai mis :
Dim OP As Range
Set OP = Range("s6:w69")
Ca me permet d'avoir tout dans le même onglet.
Du coup, ma demande est : comment faire pour pouvoir supprimer l'onglet "Présence semaine" (qui ne me sert plus à rien) sans que ça bug?
ma deuxième demande est : comment faire pour que la macro fonctionne pour un nouvel onglet S49 puis S50, ainsi de suite, sacahnt que ce fichier nous servira pour toutes les semaines de l'année, en dupliquant les onglets au fur et à mesure des semaines?
J'éspère ne pas trop être exigeant...
merci pour tout
bonne soirée à tous
cdt
Sébastien
 

Pièces jointes

  • Planning V3.xlsm
    86.9 KB · Affichages: 4

Discussions similaires

Réponses
5
Affichages
324
Réponses
12
Affichages
227

Statistiques des forums

Discussions
312 088
Messages
2 085 202
Membres
102 817
dernier inscrit
Nini668