Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

dov'e' il codice?

Ultimo Aggiornamento: 04/05/2020 15:07
Post: 31
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
30/04/2020 11:20

Ciao a tutti,
premetto che sono veramente agli albori, quindi mi scuso in anticipo per la domanda.
avrei cortesemente bisogno del vostro aiuto per capire dove trovo il codice che fa comparire le combobox su tutte le righe sulle colonne B e E dello sheet "consegne" le combobox.
Penso che ci debba essere un posto dove definisce il compoertamento solo per le colonne B e E, ma non lo trovo, non riesco a trovarlo.
Grazie in anticipo a chi mi potrà aiutare.
Buona giornata
Erica
[Modificato da etabetasub 03/05/2020 21:35]
30/04/2020 13:17

Hai provato ALT+F11 oppure sul foglio "consegne", mouse destro " visualizza codice"
Post: 31
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
30/04/2020 14:06

Ciao ABCDEF,
Sì, sì al codice arrivo, ma non trovo dove è codificato il comportamento per cui in alcune colonne fa partire la combo in colonna.
Se non sbaglio, il codice che vedo è relativo alla ricerca testo nella combo e allo spostamento (con tab e enter).

Io mi aspetterei di trovare una parte dove viene specificato in quali colonne riproporre la combo... non lo vedo proprio.

Grazie a chi vorrà aiutarmi
ciao
Erica
30/04/2020 14:43

Intanto mi dà fastidio la formula in colonna D
=SE(B4="";"";CERCA.VERT(B4;anagrafica!$A:$A;2;FALSO))
Credo dovrebbe essere ...
=SE(B4="";"";CERCA.VERT(B4;anagrafica!$A:$A;1;FALSO))

Per finire penso che >>>If Target.Validation.Type = 3 Then
Sia dovuto alla combobox in colonna E
Post: 32
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
30/04/2020 15:38

Ciao ABCDEF,
ignora pure le formule, non mi interessano per ora, cmq grazie del suggerimento.

Le combo vengono create solo in colonna B e E, non capisco come la riga che citi tu
-> If Target.Validation.Type = 3 Then
possa generare le combo nelle 2 colonne citate.

Da qualche parte mi sarei aspettata del codice tipo "se target... =colonna B o colonna E -> crea la combo", ma non lo trovo.

Può essere nascosto da qualceh parte?

grazie
ciao



Post: 4.405
Registrato il: 21/06/2013
Città: NAPOLI
Età: 70
Utente Master
Excel 365
OFFLINE
30/04/2020 15:40

La macro Worksheet_SelectionChange che fa spostare la combobox è nel modulo del foglio consegne.

Alfredo
Post: 931
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
30/04/2020 15:42

Un saluto a tutti.

Alle celle delle colonne B ed E è stata attivata una Convalida Dati che successivamente viene gestita ed elaborata tramite l'evento Worksheet_SelectionChange che gestisce anche la ComboBox.
Per verificare devi prima interrompere il controllo dell'evento, basta inserire uno Stop od un Punto di Interruzione e poi stoppare la macro.
[Modificato da rollis13 30/04/2020 15:52]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 33
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
30/04/2020 15:54

Ciao a tutti,
tempo fa cercavo una funzione per ripetere le combo su più righe e mi era stata data questo suggerimento:

-> if Not Intersect(Target, [b:b,d:d]) Is Nothing Then [...]

questa era l'istruzione che identificava le colonne interessate (b e d).

Nel file allegato non la trovo proprio, e quindi mi chiedo da dove prende l'informazione delle colonne su cui creare le combo?

PS: data validation non ne vedo, se non erro la combo punta all'altro sheet.

grazie
ciao
30/04/2020 15:54

>>>Può essere nascosto da qualceh parte?
NO

Solo con ....If Target.Validation.Type = 3
Mi fai capire quale problema hai
Post: 932
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
30/04/2020 16:20

@etabetasub, forse non hai letto il mio post #7. Per poter visualizzare la Convalida dati devi bloccare la gestione dell'evento altrimenti ti si apre la ComboBox sopra la cella impedendoti l'accesso alla convalida.

Con:
If Target.Validation.Type = 3 Then
viene controllato se la cella Target contiene un elenco a discesa (Convalida = Type 3) ed in tal caso viene gestita una ComboBox.
Tramite:
xStr = Target.Validation.Formula1
xStr = Right(str, Len(str) - 1)
si ottiene la formula di convalida dei dati per la cella Target, in questo caso (colonna B) "=anagrafica!$A$2:$A$5000" (oppure colonna E: =Lettera!$B$2:$B$10). Il segno ' = ' viene rimosso utilizzando la funzione Right e questo dato viene utilizzato per i parametri della ComboBox:
.ListFillRange = xStr
[Modificato da rollis13 30/04/2020 16:51]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 34
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
01/05/2020 21:05

Grazie mille Rollis13,

ma c'e' ancora qualcosa che non capisco.

Se io cancello la combo dalla colonna E (ho intenzione di mettere altro tipo di controllo) - e se ho ben inteso quanto mi scrivi tu - non la dovrebbe trovare e dovrebbe filare tutto liscio.
Invece si incasina.

Riesci ad aiutarmi?
grazie
ciao
Post: 933
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
01/05/2020 22:30

Cosa e come si incasina ? Se elimini la 'Convalida dati' attiva sulla colonna E la macro non potrà MAI creare la ComboBox su tale colonna. Questo perché la macro valuta la condizione ".Validation.Type = 3" e SOLO se trova una 'Convalida dati' attiva genera una ComboBox di dimensioni leggermente più grande (.Width + 5 e .Height + 5) della cella cliccata (Target).
Se hai l'esigenza di mantenere qualche forma di 'Convalida dati' anche in colonna E (od altre) senza che compaia una ComboBox devi attivare una discriminazione sulla sola colonna B utilizzando la modalità che avevi indicato nel tuo post #8.
[Modificato da rollis13 01/05/2020 23:00]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 35
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
03/05/2020 09:55

Ciao Rollis,
grazie alle tue risposte sto capendo che mi manca un pezzo di comprensione fondamentale.

Mi scrivevi: "è stata attivata una Convalida Dati che successivamente viene gestita ed elaborata tramite l'evento Worksheet_SelectionChange che gestisce anche la ComboBox". Perfetto, grazie.

Quello che non capisco è come è stata attivata. Ho spazzolato un po' di video online e le opzioni che ho visto (per la data validaiton) non le trovo.
Quindi la domanda per te, e sempre cortesemente, è:

-> dove vedo che la convalida dati è attivata? Se mi posiziono sulla colonna E non trovo (come mi sarei aspettata) l'opzione menu "Data Valadation" attiva. Dove setto questa caratteristica?


grazie infinite
ciao
Erica


[Modificato da etabetasub 03/05/2020 10:01]
Post: 2.761
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
03/05/2020 10:32

Ciao e una caro saluto a Rollis (che te lo ha già spiegato)

Vai nella:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

e subito dopo scrivi:
Exit Sub, quindi avrai:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Exit Sub
'Update by Extendoffice: 2018/9/21
Dim xCombox As OLEObject
Dim xStr As String
etc etc

Ora vai in una cella della colonna B oppure E, dove in convalida dati troverai rispettivamente:
=anagrafica!$A$2:$A$5000
e
=Lettera!$B$2:$B$10

Dopo, per far rifunzionare il tutto togli l'Exit Sub che hai messo prima alla macro.

saluti




Domenico
Win 10 - Excel 2016
Post: 36
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
03/05/2020 11:01

Grazie Domenico e Rollis,

il mio livello di ignoranza talmente elevato non mi permetteva di comprendere quanto scriveva Rollis, come direbbe qualcuno perle ai porci... ORA HO CAPITO!

Mi scuso e vi ringrazio infinitamente.

Era proprio lì che volevo arrivare, GRAZIE GRAZIE GRAZIE.


Buona domenica a voi
ciao
Erica
Post: 2.762
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
03/05/2020 11:13

importante che tu abbia risolto😉

saluti




Domenico
Win 10 - Excel 2016
Post: 934
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
03/05/2020 11:53

Sono a ringraziare anch'io dato non mi era mai capitato gestire una ComboBox a fronte di una Convalida.

Ma perché non accontentarsi della semplice Convalida mettendo la spunta sulla voce "Elenco nella cella" ?
Ok, con la ComboBox posso inserire 'al volo' voci non previste ma se dopo tutto questo ambaradan la tabella non viene aggiornata con le nuove voci, a mio modo di vedere, è solo sprecare energie.
Vabbè, diciamo che la ComboBox mi serve solo per voci diverse e 'a perdere'😀.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 37
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
03/05/2020 19:03

Ciao Rollis,

il motivo della combo era per la ricerca, con il codice che ho trovato posso digitare alcuni caratteri e propone dall'elenco originale solo quelli pertinenti. Tieni conto che sono proprio neofita, quindi potrebbero esserci modi migliori, in effetti ho anche provato sempre con l'aiuto del forum ad usare una userform, ma poi mi son persa e mi sono arresa. Inoltre mi risultava piu difficile trovare help online, mente con le combo (tranne la chicca spiegata da Domenico) riesco a trovare piu documentazione.



Cmq avrei un'altra cosa che non capisco.
Nel foglio sono inserite (intendo da developer -> Design... -> insert Combobox) le combobox o fa tutto il codice?

Questo non riesco a capirlo, nel foglio ne vedo due (se vado in modalità Developer) ma hanno anche lo stesso nome... TempCombo, e quindi ne riesco a modificare solo una alla volta... non capisco proprio.


Un altro punto in effetti c'e' ancora: come faccio a modificare la lista a cui punta la validation? sto provando, ma pare che per errore cancelli la combo, quindi mi sta venendo il dubbio non sia corretto.


grazie
ciao
erica


[Modificato da etabetasub 03/05/2020 19:05]
Post: 2.769
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
03/05/2020 19:09

ce n'è una soltanto e si chiama TempComb.

E' il codice che la sposta a secondo della cella (col B oppure E) che selezioni

Edit:
non avevo letto il resto della tua domanda, comunque:

la Combo viene caricata secondo quanto scritto nella convalida di col B oppure E, cioè quando ti posizione per esempio in B, poichè la convalida di tale colonna contiene: =anagrafica!$A$2:$A$5000, la combo viene caricata con quei dati.

Lo stesso per col. E (cambia la convalida:=Lettera!$B$2:$B$10) etc etc.

Se segui in debug il codice, ti accorgerai che la variabile xStr viene di volta in volta caricata con il range della convalida e alimenta la lista della combo:

.....
xStr = Target.Validation.Formula1
.....
.ListFillRange = xStr

Spero sia chiaro

saluti




[Modificato da dodo47 03/05/2020 19:27]
Domenico
Win 10 - Excel 2016
Post: 38
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
03/05/2020 20:29

Ciao Domenico,
in effetti seguendo il debug mi ero accorta che xstr si caricava, ma non capivo come e da lì il mio dubbio, titolo del thread "dove è il codice?", grazie mi hai chiarito.

Però perdonami, non colgo ancora una cosa: per cambiare la lista =anagrafica!$A$2:$A$5000, nella validation, mi metto in modalità Developer, sposto la combo e raggiungo la validation list per aggiornarla o esiste altro modo?
grazie
ciao


Post: 935
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
03/05/2020 21:59

Questa non l'ho capita. Fermi la macro con la modalità che preferisci: Stop, Punto di interruzione, Exit Sub, Application.EnableEvents = False (che poi dovrai rimettere a TRUE), ecc.; l'importante è "spegnere" la macro o non farla partire se preferisci. Così operando la ComboBox 'sparisce'. A quel punto torni nel foglio e modifiche la Convalida Dati a tuo piacimento, o solo alcune celle o tutta la colonna.
Se proprio scegli la strada delle Modalità Progettazione non serve spostare la ComboBox; da una qualsiasi cella di quella colonna puoi accedere alla Convalida e modificarla, l'importante è mettere la spunta su "Applica le modifiche a tutte le altre celle ...".
[Modificato da rollis13 04/05/2020 10:12]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 39
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
04/05/2020 09:25

Ciao a entrambi,
ho sistemato la lista a cui deve puntare la data validation, grazie.
ma non capisco ancora una cosa e cioè, se anche io ho settato nel Data Validation "show error alert after invali data is entered" il campo mi accetta anche i dati che digito, non appartenenti alla lista.
come posso fare per bloccare questo comportamento?
grazie
ciao
Erica
Post: 2.772
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/05/2020 10:56

ciao
vedo che la cosa ancora non ti è chiara.
Tu non scrivi in una cella che contiene una convalida, ma nella comboBox.
La convalida viene solo utilizzata per passare alla comboBox il range di pertinenza.

per fare quello che vuoi, devi settare il parametro Style nelle proprietà della ComboBox come da immagine, che impedisce di digitare nella combo valori non presenti.

Edit: fatti tutti i chiarimenti nei vari precedenti post, a questo punto non converrebbe lasciar stare la convalida ed utilizzare solo la combo, modificando opportunamente il codice ? (tipo: se col. B il listFillRange è xxxx, se colonna E il listfillrange è yyyy. (tra l'altro il codice sarebbe più snello e risparmi 10.000 celle con convalida).
[Modificato da dodo47 04/05/2020 11:42]
Domenico
Win 10 - Excel 2016
Post: 2.773
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/05/2020 11:33

@Rollis

c'è una cosa che non mi è chiara il quel codice e ti chiedo (se puoi) di aiutarmi a comprendere:

If Target.Validation.Type = 3 Then
Target.Validation.InCellDropdown = False
Cancel = True
xStr = Target.Validation.Formula1
xStr = Right(xStr, Len(xStr) - 1)
If xStr = "" Then Exit Sub
With xCombox
.Visible = True
.Left = Target.Left
.Top = Target.Top
.Width = Target.Width + 5
.Height = Target.Height + 5
.ListFillRange = xStr
If .ListFillRange = "" Then
xArr = Split(xStr, ",")
Me.TempCombo.List = xArr



Che senso hanno le ultime 3 righe?

Per prova ho posto xStr="" (bypassando la prima istruzione in rosso) e nella combo c'è andato a finire quello che c'è scritto nella convalida, quindi per esempio la combo mostra: =Lettera!$B$2:$B$10, tipo un promemoria che ti dovrebbe dire che il range è vuoto.

Ma ciò, a mio avviso non accade mai.

In sintesi, secondo te, quando si attiva l'ultimo if ??
If .ListFillRange = "" Then
xArr = Split(xStr, ",")
Me.TempCombo.List = xArr

Ciao e grazie



[Modificato da dodo47 04/05/2020 11:34]
Domenico
Win 10 - Excel 2016
Post: 936
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
04/05/2020 11:48

Le avevo adocchiate anch'io quelle 3 ultime righe e la prima volta in modo superficiale ho pensato a rimasugli di macro più complete, poi, visto che ho dovuto visionarle più volte 😉, ho pensato che potevano servire nei casi in cui la lista di Convalida era già presente nel campo Origine e non in una tabella. Non mi sono impegnato a valutare se in versione italiana il separatore nello Split(xStr, ",") va , o ; .

PS. adesso ho fatto la riprova: ci vuole Split(xStr, ";") dato che non vi sono traduzioni/conversioni automatiche.
[Modificato da rollis13 04/05/2020 11:56]

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Post: 2.774
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/05/2020 12:07

ahhh ecco

grazie😊
una caro saluto




Domenico
Win 10 - Excel 2016
Post: 40
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
04/05/2020 13:06

Re:
dodo47, 5/4/2020 10:56 AM:

ciao
vedo che la cosa ancora non ti è chiara.
Tu non scrivi in una cella che contiene una convalida, ma nella comboBox.
La convalida viene solo utilizzata per passare alla comboBox il range di pertinenza.

per fare quello che vuoi, devi settare il parametro Style nelle proprietà della ComboBox come da immagine, che impedisce di digitare nella combo valori non presenti.

Edit: fatti tutti i chiarimenti nei vari precedenti post, a questo punto non converrebbe lasciar stare la convalida ed utilizzare solo la combo, modificando opportunamente il codice ? (tipo: se col. B il listFillRange è xxxx, se colonna E il listfillrange è yyyy. (tra l'altro il codice sarebbe più snello e risparmi 10.000 celle con convalida).




Grazie del chiarimento, e del suggerimento (che proverò a mettere in pratica). Ho però un altro problema ora, e cioè se seleziono un item del menu non ho poi piu la possibilita di lasciare il campo bianco. C'e un rimedio per questo?
grazie
ciao



Post: 2.776
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/05/2020 13:14

ci vai sopra e cancelli con il backspace (normalmente freccia a sinistra sopra l'invio). Come se cancellassi un testo




Domenico
Win 10 - Excel 2016
Post: 41
Registrato il: 02/04/2020
Età: 55
Utente Junior
Office 365
OFFLINE
04/05/2020 14:03

Re:
dodo47, 5/4/2020 1:14 PM:

ci vai sopra e cancelli con il backspace (normalmente freccia a sinistra sopra l'invio). Come se cancellassi un testo








Grazie del suggerimento, ho provato e a me non funziona.
Avete qualche altra idea per caso?
grazie
ciao
Post: 937
Registrato il: 16/08/2015
Città: CORDENONS
Età: 67
Utente Senior
Excel 2016-32bit Win11
OFFLINE
04/05/2020 15:07

Se ti si è chiusa la tendina clicca il triangolino e scegli un campo vuoto, in fondo alla lista ne trovi moltissimi. Se ti serve spesso ti conviene inserire un cella vuota in testa alle liste da cui trae i dati la ComboBox.

______________________________________________________________
C'è chi fa le COSE a CASO e chi fa CASO alle COSE (Ignoto)
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | 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 09:53. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com