evitare doppi assegnazioni in agenda

Anonimo
2021-08-19T13:37:50+00:00

ho un'agenda excel con in colonna A i clienti e nelle successive i giorni, in cui viene inserita la risorsa rappresentato da un colore di riempimento con motivo. Mi sono fatto con molta fatica perchè non esperto una routine che mi conta gli impegni di ogni risorsa sempre per il colore di riempimento. Ora mi piacerebbe avere modo, nel momento che inserisco il colore di una risorsa già impegnata in quel giorno, di ricevere un alert per evitare la sovrapposizione. Se può essere utile allego routine di conteggio (se poi è migliorabile.....)

Function cellsetting(InRange As Range, CellRange As Range) As Long
Dim cl As Range, TempCount As Long, ColorIndex As Long, pattern As Long, PatternColorIndex As Long

ColorIndex = CellRange.Cells(1.1).Interior.ColorIndex  
pattern = CellRange.Cells(1.1).Interior.pattern  
PatternColorIndex = CellRange.Cells(1.1).Interior.PatternColorIndex  
 

TempCount = 0
For Each cl In InRange
If ((cl.Interior.ColorIndex = ColorIndex And (cl.Interior.pattern = pattern And (cl.Interior.pattern <> xlPatternAutomatic Or cl.Interior.pattern <> xlPatternNone)) And cl.Interior.PatternColorIndex = PatternColorIndex)) Then
TempCount = TempCount + 1
Else: TempCount = TempCount
End If
Next cl

Set cl = Nothing  
  
cellsetting = TempCount  
  

End Function

grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2021-08-20T11:21:28+00:00

Ciao Massimo,

https://1drv.ms/x/s!Ahjd5nHUaqHiiEXyCZVxMi52S3tk?e=1sjC6z ecco il link. praticamente io inserisco in corrispondenza di un lavoro e di una data il colore di una risorsa e vorrei che se in quella data la persona è già impegnata mi dia un alert.

Ti ricordo che i colori possono essere differenti per colore di riempimento, motivo ecolore del motivo

Penso che ci sia un problema intrinseco con il tuo approccio perché il cambiamento di colore (o motivo) di una cella non attiva un evento gestibile in Excel. Di conseguenza, non è possibile generare direttamente un avviso quando viene inserito o modificato un colore.

Suggerirei quindi un approccio diverso: invece di inserire un colore/motivo, inserisci un codice per ogni risorsa e crea un formato condizionale per ogni risorsa. Questo formato condizionale può inserire il colore/motivo desiderato e nascondere il codice imponendo un colore del carattere bianco.

In questo modo si possono ottenere gli avvisi richiesti come segue:

  • Fai clic dx sulla linguetta del foglio Program
  • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
  • Incolla il seguente codice:

'========>>

Option Explicit

'-------->>

Private Sub Worksheet_Change(ByVal Target As Range)

Dim RngLavori As Range, Rng As Range, Rng2 As Range 

Const sRighe\_Lavori\_In\_Corso As String = "5:55" 

Set RngLavori = Me.Range(sRighe\_Lavori\_In\_Corso) 

Set Rng = Intersect(RngLavori, Target) 

If Not Rng Is Nothing Then 

Set Rng2 = Intersect(RngLavori, Target.EntireColumn) 

    If Application.CountIf(Rng2, Target.Value) &gt; 1 Then 

        Call MsgBox(Prompt:="Attenzione ! La persona è già impegnata!", \_ 

            Buttons:=vbCritical, \_ 

            Title:="PROBLEMA") 

            Target.Select 

    End If 

End If 

End Sub

'<<========

Per quanto riguarda la tua funzione cellsetting, forse potresti provare la seguente versione modificata:

'-------->>

Public Function CellSetting(InRange As Range, CellRange As Range) As Long

Dim cl As Range 

Dim TempCount As Long, ColorIndex As Long, pattern As Long, PatternColorIndex As Long 

With CellRange.Cells(1).Interior 

    ColorIndex = .ColorIndex 

    pattern = .pattern 

    PatternColorIndex = .PatternColorIndex 

End With 

For Each cl In InRange.Cells 

    With cl.Interior 

        If .ColorIndex = ColorIndex \_ 

            And .pattern = pattern \_ 

            And .pattern &lt;&gt; xlPatternAutomatic \_ 

            And .pattern &lt;&gt; xlPatternNone \_ 

            And .PatternColorIndex = PatternColorIndex Then 

            TempCount = TempCount + 1 

        End If 

    End With 

Next cl 

 CellSetting = TempCount 

End Function

'<<========

===

Regards,

Norman

Immagine

La risposta è stata utile?

0 commenti Nessun commento

16 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-08-27T14:39:15+00:00

    Ciao Massimo,

    con più tempo ho provato la tua routine per far uscire al'alert ma non funziona

    Sarei molto sorpreso se il codice, o meglio lo sfruttamento dell'evento Worksheet_Change, non potesse essere utilizzato per ottenere gli avvisi desiderati.

    Per adattare il codice ai tuoi scopi specifici, sarebbe necessario comprendere l'uso delle tue formule nell'intervallo R55:T89. In particolare, dovresti spiegare il vero valore del riferimento di intervallo che viene mostrato come #Rif! nel file che hai caricato.

    In altre parole, con riferimento al tuo file, è necessario capire cosa costituisce una duplicazione di risorse e come questa viene identificata.

    Sarebbe anche utile se potessi caricare la versione del tuo file che includeva il codice non funzionante.

    ===

    Regards,

    Normasn

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-08-27T13:39:57+00:00

    con più tempo ho provato la tua routine per far uscire al'alert ma non funziona

    ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-08-22T08:10:24+00:00

    grazie, ci provo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-08-22T07:17:48+00:00

    Come suggerito da Normann un modo per “attivare” una reazione da parte di excel è quello di utilizzare un carattere anziché un colore, al massimo a quel carattere puoi assegnarci una forma trazione condizionale che te lo colori anche come vuoi tu. Esempio, il carattere O potrebbe indicare che quella risorsa e occupata e con una formattazione condizionale puoi assegnarci il colore rosso.

    In questo modo Excel genera l’evento Worksheet_change su cui poi si può lavorare seguendo l’esempio di Normann

    La risposta è stata utile?

    0 commenti Nessun commento