Condividi:        

distribuire le presenze in base a disponibilità

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

distribuire le presenze in base a disponibilità

Postdi wallace&gromit » 22/09/19 15:42

Ciao,
mi trovo a dover gestire un gruppo di persone che deve presenziare ad una serie di partite.
Sul tabellone principale (foglio1) ho il calendario delle partite e la disponibilità dei singoli.
Nei fogli successivi, mese per mese, scrivo i nominativi effettivi, cercando di distribuire equamente le mansioni.
Ora è un po' la storia del gatto che si morde la coda, perché io preferisco lavorare sul foglio del mese, inserendo i nominativi disponibili, ma vorrei che ne venisse tenuta traccia anche nel tabellone e soprattutto mentre inserisco vorrei sapere chi è disponibile e chi no, e questo lo posso solo sapere in base al tabellone.
Dubito di essere stato chiaro, magari con il file si capisce qualcosa e vi viene qualche idea.

https://www.dropbox.com/s/2kug2rl8boajgbr/2019-20%20piano%20partite.xlsx?dl=0
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: distribuire le presenze in base a disponibilità

Postdi Anthony47 » 23/09/19 10:12

Prima di cimentarmi vorrei sapere come si riconoscono, nel foglio "piano partite" le disponibilita', se i colori hanno un significato pertinente al quesito e se la disponibilita' e' per un ruolo specifico o generica.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: distribuire le presenze in base a disponibilità

Postdi wallace&gromit » 23/09/19 22:48

Il rosso è abbinato alla x e significa non disponibile. Il verde è una preferenza ma non vincolante. Per ogni data devono esserci due R (reporter) e un O (orologio), eventualmente un P (picchetto) non indispensabile.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: distribuire le presenze in base a disponibilità

Postdi Anthony47 » 24/09/19 22:34

Non e' che la storia delle preferenze sia proprio chiara...
Comunque io gestirei il tutto con una "convalida" dinamica, da attuare tramite questo codice che va inserito nel "modulo vba" del foglio "Ottobre":
Codice: Seleziona tutto
Dim I As Long, J As Long, AvaiLab As String, PreVal As String    'RIGOROSAMENTE IN TESTA

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myMatch, myRan As String, myRC As Long, myC As Range
'
AvaiLab = "2019-20 piano partite"       '<<< Foglio delle disponibilita'
myRan = "C1:F1"                         '<<< L'intestazione delle colonne da compilare
'
myRC = Range(myRan).Cells(1, 1).Column
For Each myC In Target
    If Not Application.Intersect(Target, Range(myRan).Offset(1, 0).Resize(1000)) Is Nothing Then
        If myC.Value <> "" Then
            myMatch = Application.Match(myC.Value, Sheets(AvaiLab).Range("A1:AZ1"), False)
            If Not IsError(myMatch) Then
                Sheets(AvaiLab).Cells(I, myMatch) = Left(Cells(1, Target.Column), 1)
            End If
            myC.Offset(0, 1).Select
        Else
            Application.EnableEvents = False
            Cells(myC.Row, myRC).Resize(1, Range(myRan).Columns.Count).ClearContents
            For J = 5 To Sheets(AvaiLab).Range("A1:AZ1").Columns.Count
                If UCase(Sheets(AvaiLab).Cells(I, J)) <> "X" Then Sheets(AvaiLab).Cells(I, J).ClearContents
            Next J
            Application.EnableEvents = True
        End If
    End If
Next myC
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MData As Double, MTeam As String, CRow As Long
Dim VaStr As String, myRan As String
'
AvaiLab = "2019-20 piano partite"       '<<< Foglio delle disponibilita'
myRan = "C1:F1"                         '<<< L'intestazione delle colonne da compilare
'
If Target.Count = 1 And Not Application.Intersect(Target, Range(myRan).Offset(1, 0).Resize(1000)) Is Nothing Then
    CRow = Selection.Row
    MData = Round(Cells(CRow, "A"), 5)
    MTeam = UCase(Cells(CRow, "B"))
    VaStr = ""
    If MData > Int(Now) And Len(MTeam) > 1 Then
        For I = 2 To Sheets(AvaiLab).Cells(Rows.Count, 2).End(xlUp).Row
            If Round(Sheets(AvaiLab).Cells(I, "C").Value, 5) = MData And UCase(Sheets(AvaiLab).Cells(I, "B").Value) = MTeam Then
                If Target.Value = "" Then
                    For J = 5 To Sheets(AvaiLab).Cells(1, Columns.Count).End(xlToLeft).Column
                        If Sheets(AvaiLab).Cells(I, J).Value = "" Then VaStr = VaStr & "," & Sheets(AvaiLab).Cells(1, J)
                    Next J
                End If
                Range(myRan).Resize(1000).Validation.Delete
                With Selection.Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:=Mid(VaStr & ",,", 2)
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .InputTitle = ""
                    .ErrorTitle = ""
                    .InputMessage = "Scegli"
                    .ErrorMessage = "Scegliere nell'elenco"
                    .ShowInput = True
                    .ShowError = True
                End With
                Exit For
            End If
        Next I
    End If
End If
End Sub

La SelectionChange crea una lista di validazione che comprende solo i nominativi non ancora "usati" per quella partita; La WorksheetChange scrive sul foglio "2019-20 piano partite" quando una risorsa viene allocata, eliminandola quindi dalle possibili scelte per quella stessa partita.

In caso che una cella venga cancellata, allora tutta la riga verra' cancellata e tutta la squadra dovra' essere riconfigurata.
Anche per modificare un singolo componente di una squadra e' necessario prima cancellare quel componente, che pero' comporta la cancellazione di tutta la squadra, e riconfigurare in toto.
Questo perche' non ho trovato un modo piu' furbo di rilasciare una risorsa, sul foglio "2019-20 piano partite", nel caso che essa venga sostituita sul foglio mensile.

Qualora ci siano piu' fogli mensili su cui operare, allora la riga "Public etc etc", in cima al codice che ho suggerito, andra' rimosso dal "modulo vba del foglio di lavoro" e posizionato in testa a un modulo standard.

Secondo me sono stato chiaro quanto te, vedi cosa riesci a ottenere e fai sapere...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: distribuire le presenze in base a disponibilità

Postdi wallace&gromit » 25/09/19 07:24

Anthony ha scritto:Secondo me sono stato chiaro quanto te

Haha, molto di più in realtà!!!
Penso sia esattamente quello che volevo, infatti anche io mi incartavo sul fatto della circolarità della ricerca e penso che la soluzione di cancellare tutta la riga sia la soluzione migliore.
Effettivamente dopo ottobre verranno altri mesi, ma nessuno mi impedisce di lavorare sempre sullo stesso foglio e nascondere solo le righe in funzione del mese attivo.
Potrò provare il tutto solo stasera, poi darò un nuovo feedback, ma ti ringrazio già perché ho pochi dubbi sul funzionamento.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: distribuire le presenze in base a disponibilità

Postdi wallace&gromit » 25/09/19 19:37

Confermo che funziona benissimo.
Ho solo sperimentato alcuni crash, dove, probabilmente dopo avere fatto alcune manovre inattese sul foglio del mese di ottobre, usciva la finestra di debug e da lì via si arrestava tutto, costringemdomi ad uscire completamente da excel e poi rientrare per riprendere.
Penso, come detto, che sia dovuto a manovre "anomale" tipo prolungare in giù la tabella, che ora non dovrò più fare, quindi non penso che vi sia bisogno di ulteriori interventi, ci posso convivere.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21


Torna a Applicazioni Office Windows


Topic correlati a "distribuire le presenze in base a disponibilità":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti