Il problema dei 3 corpi: Attraverso continenti e decadi, cinque amici geniali fanno scoperte sconvolgenti mentre le leggi della scienza si sgretolano ed emerge una minaccia esistenziale. Vieni a parlarne su TopManga.
 
Pagina precedente | 1 2 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

fare un elenco di combobox

Ultimo Aggiornamento: 14/04/2020 16:49
Post: 4.372
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 17:23

Ah ora è chiaro-

Nei moduli dei fogli Carico e Scarico sostituisci il precedente codice con questo

vb
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B1000")) Is Nothing Then
    UserForm1.Show
End If

Alfredo
Post: 4.373
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 17:26

Re:
etabetasub, 13/04/2020 17:12:


da una nottata di entusiasmo ora sono quasi disperata... devo aver fatto qualcosa di talmente grave che non mi va piu ne la vesione combo ne quella della userform
ciao
Erica



E che diavolo avrai mai fatto? [SM=g27828]

Un consiglio tieni sempre a parte una copia del file funzionante ed effettua tutti i tuoi "esperimenti" su copie.

Se qualcosa va male hai sempre una base da cui ripartire.

Coraggio non ti avvilire.



Alfredo
Post: 18
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 17:56

Grazie Alfredo,
per il codice e per l'incoraggiamento :)
ho quasi ripristinato il tutto, un crash di chrome mi ha incasinato il foglio, ma quasi ci sono.

Una domanda, le istruzioni:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2:B1000")) Is Nothing Then
UserForm1.Show
End If

considerano la colonna B fino a massimo di 1000 righe; mi chiedevo se fosse possibile idetnificare il range utilizzando il nome delal tabella (T_Carico) e colonna (Prodotti). Ho fatto un paio di tentativi, ma nisba, provo a cercare un po' in giro anche io.

grazie e ciao
Erica
Post: 4.375
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 19:09

Erica nei moduli dei fogli Carico e Scarico sostituisci il codice presente con questo

Carico

vb
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.ListObjects("T_Carico").ListColumns(2).DataBodyRange) Is Nothing Then
    UserForm1.Show
End If
End Sub


Scarico

vb
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.ListObjects("T_Scarico").ListColumns(2).DataBodyRange) Is Nothing Then
    UserForm1.Show
End If
End Sub


Fai sapere.
[Modificato da alfrimpa 13/04/2020 19:16]

Alfredo
Post: 4.376
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 19:18

Ora ti faccio una domanda indiscreta [SM=g27828]

Ma di tutto questo codice che ti sto dando ne stai comprendendo il significato?

Questo è importante per la sua gestione in futuro.

Alfredo
Post: 19
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 19:32

Ciao Alfredo,

il ritardo nella mia risposta è dato dal fatto che cerco anche di capire cosa sto facendo, ammetto che non sempre ci riesco.

Ora son fusa, ma ho apportato tutte le modifiche mi hai suggerito.
Sono indietro con la versione combobox, ma recupererò.

Ora voglio provare ad arrivare a una versione pseudo-definitiva con le funzionalità sistemate e poi provare ad usarlo un po' e vedere come utente cosa vorrei.
C'e' però un altro punto che non riesco a risolvere e non so dove sbaglio.
Mi viene però il dubbio di dover aprire un altro thread, dimmi tu, intanto scrivo qui poi se mi dirai di aprirlo lo apro.

Intanto allego la V3, dove ho provato a consuntivare i carico-scarico nello sheet Prodotti.
Però ho il problema che se voglio mettere in ordine per "Giacenza) crescente si incasinano i riferimenti... ho fatto due versioni di calcoli: una usando le celle, l'altra i nomi di tabella/colonne, ma non ne vengo fuori... dove sto sbagliando?

ciao e grazie infinite, sei (siete) veramente fortissimi!
erica
[Modificato da etabetasub 13/04/2020 19:32]
Post: 4.378
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 19:38

Se ritieni esaurito/risolto l'argomento di questa discussione e soprattutto se le domande sono diverse dall'oggetto di questa meglio se apri una nuova discussione.

Limitatamente a questa è tutto chiaro? Tutto funziona come dovrebbe?

Se qualche istruzione nei codici ti appare "ostica" chiedi pure.

Alfredo
Post: 20
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 19:47

Grazie Alfredo,
ne approfitto e il primo dubbio resta qui (teniamola nella versione semplice B2:B1000):


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("B2:B1000")) Is Nothing

Then (da qui ok)
UserForm1.Show
End If


Chiaro l'evento, poi per il resto nebbia fitta... senza perdere troppo tempo, se hai qualceh indicazione dove poter chiarirmi il concetto (da principiante) io sono piu che desiderosa di studiarmelo, e poi magari torno da te :) per i dubbi rimasti. Ho provato a cercare in primis di capire "target"... ma non ho capito.
Tieni conto che la mia esperienza su excel parte circa 10 gg fa, quindi proprio neofitissima :)

Per l'altro punto "sort tabella" apro un altro thread. Questo cmq lo terrei aperto, perchè alla fine ho chiuso l'opzione userform, ma non la combo (che era il titolo del thread), ma dimmi tu.

grazie
ciao
Erica
Post: 4.380
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 20:04

Ciao Erica

Ti scrivo in italiano quello che fa il codice.

Se la cella selezionata (target) ricade all’interno del range B2:B1000 allora mostrami la userform1; diversamente non fa nulla.

Il target non è altro che la cella su cui si verifica l’evento.

In SelectionChange è la cella che abbiamo selezionato.

In Change la cella che abbiamo modificato.

In BeforeDoubleClick la cella su cui abbiamo fatto doppio clic e così via per tutti gli eventi che prevedono un target.

Ad esempio gli eventi Activate, Deactivate, Calculate non hanno un target perchè in essi non sono coinvolte celle ma solo il foglio di lavoro.

Alfredo
Post: 22
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 22:55

Ciao Alfredo,
sto provando ad utilizzarla e vorrei sistemare questo comportamento che ora ti descrivo.

Quando il cursore arriva sulla cella della colonna B (dove è legata la user form) vorrei differenziare il comportamento in funzione che il campo sia gia valorizzato o meno, mi spiego:

1 - se la cella della colonna B è piena, e clicco ENTER o doppio click -> fai partire la userform (se ci passo sopra non vorrei si aprisse la userform se il campo è rimepito)


2 - se la cella è vuota va bene cosi

Mi verrebbe da pensare di metterla nella fantomatica:
Private Sub Worksheet_SelectionChange(ByVal Target As Range), ma
come "catturo" ENTER e doppio click?
Ho allegato la V3, se per caso vuoi dare un occhio
grazie
ciao
erica
Post: 4.382
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 23:16

In questo caso non c’è bisogno di premere enter nè fare doppio clic.

È sufficiente mettere un If all’interno della macro per verificare se il target (sai cos’è il target vero? [SM=g27828] ) è vuoto oppure no più o meno così

vb
If Target.Value <> "" Then
Userform1.Show
Else
Exit Sub
End If


Non l’ho testata ma dovrebbe andare.
[Modificato da alfrimpa 14/04/2020 11:07]

Alfredo
Post: 23
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 23:36

Diciamo che, grazie a te, io e Target non siamo più sconosciuti :)

Mi dici di mettere nella macro:
If Target.Value <> “” Then
Userform1.Show
Else
Exit Sub
End If

quale macro? la Private Sub Worksheet_SelectionChange(ByVal Target As Range)? Se sì dovro dirgli che vale solo se è sulla colonna "B".

Io pensavo di metterla cosi, dimmi se ha senso per favore:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("B2:B1000")) Is Nothing

Then (-LA METTEREI QUI): if target.vale <> "" then

exit sub
else
UserForm1.Show


End If

che dici? (intanto io provo :)
grazie
ciao
[Modificato da etabetasub 13/04/2020 23:41]
Post: 4.383
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 23:43

La SelectionChange

L’If lo devi mettere dopo If Not Intersect(.......)

Alfredo
Post: 24
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
13/04/2020 23:46

E ti comunico con gran soddisfazione che ho inserito le righe nel posto giusto, fa quello che deve fare :)
grazie, proseguo con il mio test
ciao
Erica

Post: 4.384
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 23:46

Re:
etabetasub, 13/04/2020 23:36:

Diciamo che, grazie a te, io e Target non siamo più sconosciuti :)

Mi dici di mettere nella macro:
If Target.Value <> “” Then
Userform1.Show
Else
Exit Sub
End If

quale macro? la Private Sub Worksheet_SelectionChange(ByVal Target As Range)? Se sì dovro dirgli che vale solo se è sulla colonna "B".

Io pensavo di metterla cosi, dimmi se ha senso per favore:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("B2:B1000")) Is Nothing

Then (-LA METTEREI QUI): if target.vale <> "" then

exit sub
else
UserForm1.Show


End If

che dici? (intanto io provo :)
grazie
ciao



Nel tuo codice hai invertito la condizione.

If target.value <> “” then userform1.show else exit sub


Alfredo
Post: 4.385
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
13/04/2020 23:47

Re:
etabetasub, 13/04/2020 23:46:

E ti comunico con gran soddisfazione che ho inserito le righe nel posto giusto, fa quello che deve fare :)
grazie, proseguo con il mio test
ciao
Erica




Benissimo sono contento.


Alfredo
Post: 25
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
14/04/2020 10:45

Ciao Alfredo, e buona giornata a te e a tutti voi.

Ne approfitto (gentilmente) e ti aggiorno del mio test notturno.

Utilizzando il mio excel mi sono accorta che ci sarebbe due cosucce da sistemare (oltre al problema della somma per cui ho altro thread silente).

Entrambe le funzionalità sono legate al doppio click.
1 - Se faccio doppio click sulla cella del range "B" vorrei che cmq si aprisse la userform.

2 - mi piacerebbe che la userform (si chiudesse e passasse il valore anche con l'uso del doppio click sull'item scelto.

Se cortesemente tu mi dessi qualche dritta provo a sistemarlo.

Oggi devo anche lavorare, quindi il tempo che potrò dedicarci ahimè sarà meno :(, ma non mollo.

grazie
un caro saluto
erica



Post: 4.387
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
14/04/2020 12:09

Allora siamo tornati indietro? [SM=g27828]

Queste due per il doppio clic sui fogli

Carico

vb
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, ActiveSheet.ListObjects("T_Carico").ListColumns(2).DataBodyRange) Is Nothing Then
    UserForm1.Show
End If
End Sub


Scarico

vb
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, ActiveSheet.ListObjects("T_Scarico").ListColumns(2).DataBodyRange) Is Nothing Then
    UserForm1.Show
End If
End Sub


Devi però eliminare le procedure Worksheet_SelectionChange()

Quasta è per il doppio clic sulla Listbox

vb
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell.Value = UserForm1.ListBox1.Value
UserForm1.TextBox1.Value = ""
UserForm1.Hide
End Sub

Alfredo
Post: 28
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
14/04/2020 16:21

ciao Alfredo,
sai che non ho capito perchè di questo:

-> Devi però eliminare le procedure Worksheet_SelectionChange()

Vorrei poi inserire una condizione sulla colonna quantità, e cioè se non è vuota ma la famigerata colonna B dei prodotti lo è, devo far vedere un popup che dica di inserire il prodotto (o cancella la quantità).

userei il target :)
If Intersect(Target, ActiveSheet.ListObjects("T_Carico").ListColumns(3).value) Is <> "" and ... ceom identifico la cella dei prodotti, stessa riga cella precedente?

Then MsgBox "Inserire prodotto o cancellare quantità"
else
exit sub... in che sub lo posso mettere?

che dici?
grazie ciao
erica
Post: 4.388
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
14/04/2020 16:49

Re:
etabetasub, 14/04/2020 16:21:

ciao Alfredo,
sai che non ho capito perchè di questo:

-> Devi però eliminare le procedure Worksheet_SelectionChange()

erica



Perchè andrebbe in conflitto con la procedura BeforeDoubleClic.

Se permanesse viene visualizzata subito la userform e il doppio clic non potresti usarlo

Per la seconda prova questa da inserire nei moduli dei fogli Carico/Scarico

vb
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, ActiveSheet.ListObjects("T_Carico").ListColumns(3).DataBodyRange) Is Nothing Then
    If Target.Offset(0, -1).Value = "" Then
        MsgBox "Occorre prima inserire" & Chr(10) & "il prodotto poi la quantità"
        Application.EnableEvents = False
        Target.Value = ""
        Application.EnableEvents = True
    End If
End If
End Sub


Per il foglio Scarico devi cambiare il nome tabella.

Alfredo
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 20:23. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com