Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Aiuto Creazione Gestionale

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

Aiuto Creazione Gestionale

Postdi Marco75CT » 22/06/14 11:12

Ciao Forum,
ho bisogno del vostro aiuto.
Sto cercando di creare un semplice gestionale per un B&B http://www.filedropper.com/gestionalebkp ed avrei bisogno di qualche consiglio:

1. nel foglio "Prenotazioni" selezionando SI nella cella I12 dovrebbero sbloccarsi le celle I13, I14, I15, I16; mentre selezionando NO o in caso di cella vuota, le celle I13, I14, I15, I16, dovrebbero essere bloccate e dello stesso colore dello sfondo.
2. nel foglio "Anagrafica_Clienti" selezionando il nome del cliente dalla ComboBox1, le celle del foglio dovrebbero popolarsi con i rispettivi valori presenti nel foglio DB_Clienti, in corrispondenza del nome del cliente, presente nella colonna U
3. cosa succede se di inserisce una riga con lo stesso nome nella colonna U del foglio DB_Clienti?
4. non riesco a modificare i dati presenti nel foglio DB_Clienti, agendo da quelli presenti nel foglio Anagrafica_Clienti, richiamati col la macro qui descritta al punto 2

Attendo i vostri preziosi consigli

Grazie
Marco75CT
Utente Senior
 
Post: 143
Iscritto il: 05/08/11 11:54

Sponsor
 

Re: Aiuto Creazione Gestionale

Postdi Marco75CT » 23/06/14 13:48

Ciao, rinnovo la richiesta. Grazie
Marco75CT
Utente Senior
 
Post: 143
Iscritto il: 05/08/11 11:54

Re: Aiuto Creazione Gestionale

Postdi Anthony47 » 23/06/14 23:14

Sei sulla buona strada ma in quanto a tecnica devi ancora ...migliorare.
Punto 1:
A. Hai inserito nel codice di Prenotazioni una macro di Workbook_SheetChange; se vuoi che quel codice "scatti" quando cambi qualcosa su quel foglio allora devi usare una macro di Worksheet_Change.
B. nel codice della macro c' e' un End If subito prima di End Sub che non e' appaiato a nessun If precedente (quindi va tolto).
C. Cells ha una sintassi diversa da quella che hai usato (Cells(i13), per indicare la cella I13); guarda l' help on line alla voce "Worksheet.Cells, proprietà".
D. Comunque e' piu' chiaro usare "Range", cioe' ad esempio Range("I13").
E. La Select di ogni cella non e' necessaria, perche' puoi impostare la proprieta' Locked con l' indirizzo di cella; es Range("I13").Locked = True
F. Inoltre puoi indicare tutte le celle, in una unica istruzione, ad esempio
Range("I13, I14, etc etc").Locked = True

Con queste informazioni dovresti poter compilare la tua Worksheet_Change che realizza in poche righe di codice quanto chiesto al punto 1 delle tue esigenze.

Per la richiesta 2, usa Indice & Confronta; ad esempio per il nome metti in I3 la formula
Codice: Seleziona tutto
=INDICE(DB_Clienti!$A$1:$A$1000;CONFRONTA($I$1;DB_Clienti!$U$1:$U$1000;0))

Per gli altri campi adatta la prima parte per usare altre colonne del DB_Clienti.

Punto 3. Usare Mario Rossi come chiave per identificare un Cliente e' abbastanza debole. Devi usare qualcosa di piu' univoco, ad esempio il Codice Fiscale (o la P.Iva)

Punto 4. Devi scegliere se Anagrafica_Clienti preleva i dati da DB_Clienti (come mi pareva dal tuo punto 2) o e' viceversa (come sembrerebe al punto 4).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Aiuto Creazione Gestionale

Postdi Marco75CT » 26/06/14 19:36

Ciao Anthony,
grazie per la risposta.
Ho modificato il codice
Codice: Seleziona tutto
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
       If Cells(i12) = "SI" Then
            ActiveSheet.Unprotect ' toglie protezione foglio
            Cells(i13).Select ' seleziona cella
            Selection.Locked = False ' toglie blocco della cella
            Cells(i14).Select ' seleziona cella
            Selection.Locked = False ' toglie blocco della cella
            Cells(i15).Select ' seleziona cella
            Selection.Locked = False ' toglie blocco della cella
            Cells(i16).Select ' seleziona cella
            Selection.Locked = False ' toglie blocco della cella
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' blocca foglio
        Else
            ActiveSheet.Unprotect ' toglie protezione foglio
            Cells(i13).Select ' seleziona cella
            Selection.Locked = True ' toglie blocco della cella
            Cells(i14).Select ' seleziona cella
            Selection.Locked = True ' toglie blocco della cella
            Cells(i15).Select ' seleziona cella
            Selection.Locked = True ' toglie blocco della cella
            Cells(i16).Select ' seleziona cella
            Selection.Locked = True ' toglie blocco della cella
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' blocca foglio
        End If
    End If
End Sub


con

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Sh As Integer, ByVal Target As Range)
       If Cells(i12) = "SI" Then
            ActiveSheet.Unprotect ' toglie protezione foglio
            Range(i13, i14, i15, i16).Locked = False
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' blocca foglio
        Else
            ActiveSheet.Unprotect ' toglie protezione foglio
            Range(i13, i14, i15, i16).Locked = True
            ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ' blocca foglio
        End If
End Sub


E mi da questo errore

Immagine

Dove sbaglio?

Per quanto riguarda il foglio Anagrafica_Clienti, la mia esigenza sarebbe quella di trovare il nome agendo sulla combobox, che i campi sotto si popolassero per merito di una macro e che fosse possibile andare a modificare l'anagrafica in DB_Clienti, agendo direttamente sulla maschera presente in Anagrafica_Clienti.

Troppo contorto? :roll:
Marco75CT
Utente Senior
 
Post: 143
Iscritto il: 05/08/11 11:54

Re: Aiuto Creazione Gestionale

Postdi Anthony47 » 27/06/14 01:49

La Worksheet_Change ha come argomento solo ByVal Target As Range, mentre tu hai riportato quelli della Workbook_SheetChange (che e' un evento a livello di Workbook e andrebbe messo nel modulo ThisWorkbook)
Per evitare errori:
-tasto dx sul tab col nome foglio "Prenotazioni"; scegli Visualizza codice.
-clicca sul menu a tendina a sinistra sopra il frame in cui si scrive il codice; scegli Worksheet
-clicca sul menu a tendina di destra, e vedrai quali eventi sono disponibili; scegli Change
Automaticamente l' editor impostera' inizio e fine della macro, e all' interno inserirai il codice che ti interessa.

Ti faccio notare che hai eseguito male i suggerimenti... Ad esempio:
Hai ignorat il warning Cells ha una sintassi diversa da quella che hai usato (Cells(i13), per indicare la cella I13); guarda l' help on line alla voce "Worksheet.Cells, proprietà" e hai ancora scritto Cells(i12)
Io avevo detto Range("I13, I14, etc etc").Locked = True
Tu hai scritto Range(i13, i14, i15, i16).Locked = True
Ci sono piccole differenze, che corrispondono alla differenza tra successo e insuccesso...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Aiuto Creazione Gestionale":


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti