Code VBA ou autres ...

Lycaethos

XLDnaute Nouveau
Bonjour à tous,
Après plusieurs jours de recherches infructueuses, je me tourne vers vous ...
A partir d'un planning, je souhaite récupérer une personne en poste par jour, une autre de nuit, pour accomplir une tache bi quotidienne, et ce durant le mois complet.
Les fonction si, recherche et aléa me posent problème. Un code VBA serait plus judicieux, mais je suis novice dans ce domaine.
Je joins une copie pour essayer d'être plus clair.
Par avance, Merci à tous.
 

Pièces jointes

  • Planning.xlsm
    44.6 KB · Affichages: 41
  • Planning.xlsm
    44.6 KB · Affichages: 44
  • Planning.xlsm
    44.6 KB · Affichages: 42

PMO2

XLDnaute Accro
Re : Code VBA ou autres ...

Bonjour,

Une piste avec une fonction personnalisée.

1) copiez le code suivant dans un module standard

Code:
Function ALEA_POSTE(Liste As Range, PlageDuJour As Range, T_ou_N As String) As String
Dim var1
Dim var2
Dim A$
Dim i&
Dim cpt&
Dim T()
If Liste.Rows.Count <> PlageDuJour.Rows.Count Then Exit Function
If Liste.Columns.Count > 1 Or PlageDuJour.Columns.Count > 1 Then Exit Function
A$ = UCase(T_ou_N)
If A$ <> "T" And A$ <> "N" Then Exit Function
var1 = Liste
var2 = PlageDuJour
For i& = 1 To UBound(var2, 1)
  If Trim(var2(i&, 1)) = A$ Then
    cpt& = cpt& + 1
    ReDim Preserve T(1 To cpt&)
    T(cpt&) = var1(i&, 1)
  End If
Next i&
If cpt& > 0 Then
  Randomize Timer
  ALEA_POSTE = A$ & " : " & T(Int((UBound(T) * Rnd) + 1))
End If
End Function


2) UTILISATION (on prend votre feuil1 comme base exemple)
En cellule B16 on entre la formule =ALEA_POSTE($A2:$A14;B2:B14;"T") qui contient 3 paramètres
a) paramètre 1 : $A2:$A14 qui indique la plage des personnes
b) paramètre 2 : B2:B14 qui est la plage du jour concerné
(ces 2 plages doivent comporter une seule colonne et posséder le même nombre de lignes sinon la fonction échoue)
c) paramètre 3 : "T" contient la lettre T ou N pour distinguer la recherche sur jour ou nuit

En cellule B17 on entre la formule =ALEA_POSTE($A2:$A14;B2:B14;"N")
elle se distingue de la formule précédente que par le 3ème paramètre

On sélectionne B16 : B17 et on tire la sélection à droite jusqu'en AF16

Comme à chaque recalcul les résultats risquent de changer par le fait de l'effet aléatoire il faudrait copier la plage B16 : AF17 et faire un collage spécial Valeurs pour que tout soit intangible.

Cordialement.

PMO
Patrick Morange
 

Lycaethos

XLDnaute Nouveau
Re : Code VBA ou autres ...

Je vous remercie beaucoup, c'est exactement ce que je recherchais.
Un petit détail me tracasse ... Serait t-il possible que le nom d'une personne soit différent d'un jour à l'autre ???
Que, par exemple, Emile ne soit pas sélectionné le 1, 2 et 3 ???
Une solution consiste à réactualiser chaque cellule. Un autre module VBA pourrait-il répondre à ma demande ???
Merci de vous pencher encore un peu sur mon problème de planning.
 

PMO2

XLDnaute Accro
Re : Code VBA ou autres ...

Bonjour,

Serait t-il possible que le nom d'une personne soit différent d'un jour à l'autre ???
Que, par exemple, Emile ne soit pas sélectionné le 1, 2 et 3 ???

Une piste en suivant la démarche suivante :

1) entrez les formules sous la forme (plage B16 : AF17)
=ALEA_POSTE($A$2:$A$14;B$2:B$14;"N")
=ALEA_POSTE($A$2:$A$14;B$2:B$14;"T")
2) copiez la plage B16 : AF17 et collez en B19 puis B22 puis B25 etc
3) vous avez ainsi plusieurs résultats différents et pouvez copier ceux qui vous intéressent et les coller spécial Valeurs

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 779
Messages
2 092 045
Membres
105 165
dernier inscrit
paulo121415