Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

excel compilazione elenco

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

Re: excel compilazione elenco

Postdi enrico43 » 16/12/16 22:23

Si, ma per questa bazzecola (ma non per me) non fare le 03.00, và, facciamo per domani che è sabato e di sabato "non si lavora".
Allora, leggendo la richiesta di Wallace e l'ottima soluzione proposta da Alfredo, ho applicato la stessa soluzione ad un file preparato per l'ufficio personale. Poi, come dice Wallace, l'appetito vien mangiando e nel mio caso la soluzione di Alfredo poichè non contempla il fatto che nell'elenco ci siano 2 volte lo stesso nome (in sostanza lo straordinario della stessa persona viene registrato separatamente dall'orario canonico ma con ID diverso (tranne che per i Servizi Generali)), ho pensato alla ListBox multicolonna.
La macro di Alfredo nel caso del nome ripetuto 2 volte fa la ricerca ma trasferisce la prima occorrenza che trova anche se si sceglie la seconda (lo straordinario) occorrenza. Il file dove ho inserito questa soluzione già ne prevedeva un altra (Foglio1 e 2), classica maschera con scelta del nome e riporto di tutti i dati in TextBox con l'alternativa di fermare la ricerca o continuarla, per lo stesso nome intendo e trasferimento dati su Foglio2.
"Purtroppo" la soluzione Alfredo ha sconfitto la prima ed io al momento, per ovviare al problema del nome che compare 2 volte, ho creato una colonna d'appoggio con nome e ID (Posizione) e faccio pescare la ListBox su quella colonna. Ma mi sono intestardito nel creare la ListBox a 2 o più colonne. Non so perchè ma il ColumnCount non funziona nella list di Alfredo, ho provato anche ad inserire nella "Private Sub mCaricaListBox(ByVal s As String)" le istruzioni per fare la List a 2 colonne, ma poi se si sceglie il nominativo da trasferire sul Foglio3 il debugger s'incazza. La maschera che fa arrabbiare il debugger l'ho messa in apertura file, ma anche se doubleclicchi stando sul foglio3 dove c'è pure un bottone per aprirla.
Fine del poema.
E con questo ti e Vi saluto
Enrico
http://www.filedropper.com/ufpe3
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Sponsor
 

Re: excel compilazione elenco

Postdi enrico43 » 17/12/16 15:50

Buonpomeriggio,
Mi son rimasti 2 problemini da risolvere: se rilancio 2 o più volte la maschera di inserimento nomi continua a ricopiarmi l'ultimo nominativo automaticamente e secondo non mi funziona più (megaimportante) la ricerca per iniziale nella textbox in alto. Ho cambiato tutto dal file di Alfredo ed ho sicuramente tralasciato qualcosa d'importante, ma ho una ListBox multicolonna e non più il problema dei doppioni. Aiuto!
Saluti
Enrico
http://www.filedropper.com/ufpe4
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Re: excel compilazione elenco

Postdi enrico43 » 18/12/16 22:33

Salve, non riesco a risolvere il problema del nome che se compare 2 volte seppur con dati adiacenti diversi, non me lo seleziona, seleziona sempre la prima ricorrenza che incontra.
Suvvia, un aiutino. Tutto il resto funziona a meraviglia grazie al file di Alfredo ed ai suggerimenti di Wallace.
Saluti
Enrico
http://www.filedropper.com/showdownload.php/ufpe4_1 (sbagliato)
http://www.filedropper.com/ufpe4_1
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Re: excel compilazione elenco

Postdi Anthony47 » 19/12/16 17:44

Hai un messaggio privato.
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel compilazione elenco

Postdi Anthony47 » 27/12/16 17:04

Passato il Natale tra i soliti riti pagani, i giorni di festa mi hanno consentito di riprendere anche questo argomento rimasto indietro...
Il tuo messaggio privato ha chiarito alcune cose, salvo che hai continuato a parlare di una cosa che io non ho seguito e quindi non conosco (la "soluzione Alfredo"). Ho anche un grosso dubbio su quali siano i tuoi dati di partenze e che cosa vuoi ottenere.
Volendo pero' evitare di tornare a chiedere ti do' qualche suggerimento a caso che indirizzano cose che non quadrano qua e la', sperando che siano un utile spunto.
Mi pare che UPFE2 sia il file piu' vicino alla tua situazione, quindi ignorero' gli altri due file; come pure mi pare che parliamo di quanto gira attorno alla UserForm1, pertanto ignorero' la userform Straordinari.
Con queste premesse, a caso alcuni commenti:
1-Non ho capito perche' si e' scelto di usare un textbox e un listbox, e non direttamente un ComboBox che per definizione e' l'unione tra i due.
2-Se usi un listbox (o un combobox) multicolonne allora il caricamento deve avvenire su tutte le colonne.
3-Nella Private Sub UserForm_Activate non ha senso fare un caricamento tramite la mCaricaListBox e poi caricare usando la proprieta' RowSource; la seconda (multicolonna) rende inutile la prima (monocolonna)
4-Avendo fatto la scelta tramite la listbox (o la combobox) e' inutile (anzi dannoso) popolare poi l'elenco usando la Application.WorksheetFunction.VLookup; si prendera' invece direttamente il contenuto della riga selezionata.

Alla luce di questi commenti, tralasciando il n° 1 (che suggerirebbe di ridisegnare la userform adattando tutte le macro all'uso di un ComboBox) e quindi rimanendo col Textbox e il ListBox, gli interventi che propongo sono:
A- Inserire sulla Userform1 (GestionDati) un pulsante che attiva l'inserimento sul foglio della voce selezionata nella ListBox; questo consente all'utente di Selezionare una voce, esaminare la scelta fatta, e (se la scelta lo convice) inserire la voce sull'elenco di Foglio3. Tutto cio' in sostituzione dell'uso dell'evento ListBox1_Click, che secondo me non consente nemmeno di capire quale voce e' stata cliccata; le azioni ora previste nella Sub ListBox1_Click vengono quindi spostate sul click del CommandButton, mentre in una nuova Sub ListBox1_Click viene solo inserita l'abilitazione del Commandbutton di inserimento, che nel mio test e' stato chiamato CBPrendi:
Codice: Seleziona tutto
Private Sub ListBox1_Click()
    CBPrendi.Enabled = True
End Sub

B- Considerando quanto appena detto al punto A e al punto 4 prima, al CommandButton viene associata la seguente MACRO:
Codice: Seleziona tutto
Private Sub CBPrendi_Click()
Dim J As Long
'
Application.EnableEvents = False
Range("B1000").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, 0)
ActiveCell.Offset(0, -1).Value = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, 1)
For J = 2 To UserForm1.ListBox1.ColumnCount - 1
    ActiveCell.Offset(0, J - 1).Value = UserForm1.ListBox1.List(UserForm1.ListBox1.ListIndex, J)
Next J
UserForm1.TextBox1.Value = ""
UserForm1.Hide
Application.EnableEvents = True
End Sub

C- Eliminare dalla Private Sub UserForm_Activate il caricamento tramite mCaricaListBox, limitandosi al solo uso della RowSource:
Codice: Seleziona tutto
Private Sub UserForm_Activate()
Dim ur As Long
ur = Sheets("Foglio4").Range("A65536").End(xlUp).Row
ListBox1.RowSource = "Foglio4!A1:J" & ur
ListBox1.ColumnWidths = "67;30;40;90;35;42;40;40;40"
End Sub

D- Poiche' la Sub mCaricaListBox e' progettata per inserire dati in un controllo monocolonna (mentre il listbox e' multicolumn) la eliminiamo, e inseriamo all'interno della Sub TextBox1_Change il necessario per ripopolare il listbox multicolumn.
Codice: Seleziona tutto
Private Sub TextBox1_Change()
Dim lastR As Long, myList(), I As Long, J As Long, JJ As Long
'
If Len(TextBox1.Text) > 0 Then
    CBPrendi.Enabled = False
Else
    CBPrendi.Enabled = True
End If
With ThisWorkbook.Worksheets("Foglio4")
    lastR = .Cells(Rows.Count, 1).End(xlUp).Row
    ReDim myList(1 To 10, 1 To lastR)
    For I = 2 To lastR
        If InStr(1, .Cells(I, 1).Value, UserForm1.TextBox1.Text, vbTextCompare) > 0 Then
            JJ = JJ + 1
                For J = 1 To 10
                    myList(J, JJ) = .Cells(I, J)
                Next J
        End If
    Next I
End With
ReDim Preserve myList(1 To 10, 1 To JJ)
ListBox1.RowSource = ""
ListBox1.List = Application.WorksheetFunction.Transpose(myList)
End Sub

Si noti che in questo modo, le colonne che indicano degli orari potrebbero risultare praticamente illegibili (visualizzate come numeri decimali, secondo lo standard Excel di rappresentazioe delle ore); se queste colonne sono importanti per determinare la scelta da fare allora bisognera' modificare sia il caricamento nel listbox che nell'elenco di foglio3; se invece fossero superflue bastera' nascondere queste colonne dal listbox. In ambedue i casi quindi e' previsto un qualche intervento, che al momento non ho fatto.

La nuova userform1 e' descritta in questi file:
https://www.dropbox.com/s/gp3zg0yh6gwbg ... 1.frm?dl=0
https://www.dropbox.com/s/j4z8hk3q22pst ... 1.frx?dl=0

Scaricali sul tuo Pc, quindi rimuovi (in una copia del tuo file UPFE2.xls) la userform1 e importa il file 4ENRICO_UserForm1.frm che creera' la NUOVA userform col suo codice.

Nel modulo di codice della userform c'e' anche una Sub m() che ho lasciato perche' non so a che serve

Prova quanto detto e vediamo se andiamo nella direzione giusta...
Avatar utente
Anthony47
Moderatore
 
Post: 17656
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: excel compilazione elenco

Postdi enrico43 » 30/12/16 01:16

Ah, ma allora o mi hai letto nel mio pc o cooopiii eh. Ma da stasera non si potrà più fare, ho messo un paravento fra il modem ed il pc (e purtroppo non prendo più bene il segnale-male minore).
A parte gli scherzi e nel vano tentativo di precederti, ho lavorato sul mio file la scorsa settimana raggiungendo quasi l’obbiettivo, ma poi ho smesso e stasera ho aggiornato il file secondo le tue “disposizioni” e direi che mi soddisfa al 9,9E-12%. Quello che manca è dovuto al fatto che è troppo “freddo”, ma ci penserò io a personalizzarlo.
Ribadendo però che le tue istruzioni vanno benissimo per lo scopo prefissato, te lo rimando insieme a quello su cui ho lavorato, che contiene però una problematica, descritta sul foglio d’apertura, che ti chiederei di risolvere, sempre con le mani giunte ed in ginocchio.
Però senza usare quel linguaggio da giuramento di fedeltà alla triade cinese “ReDim Preserve myList(1 To 10, 1 To JJ)” oppure quel “carica dati o filtra dati” di Alfredo che tutt’ora non ho capito da dove li pesca e a cosa servono.
Vi auguro di trascorrere uno spumeggiante Fine Anno insieme ad un prospero e radioso Anno Nuovo, esteso a tutta la famiglia.
Enrico

http://www.filedropper.com/ufpe3ant
http://www.filedropper.com/straordinari
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Re: excel compilazione elenco

Postdi enrico43 » 30/12/16 22:35

Esattamente 30 giorni per compilare questo benedetto elenco. Mannaggia....però ne ho imparate di cose.
Ora è finito e lo allego per qualcuno a cui può interessare e per Voi Mod...non sghignazzate troppo che con questo lavoretto sono stato promosso (alle elementari) e mi hanno pure dato il cesto dei dirigenti.
Enrico
http://www.filedropper.com/ufpefinale
enrico43
Utente Senior
 
Post: 208
Iscritto il: 13/09/14 15:33
Località: Fiumicino

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "excel compilazione elenco":


Chi c’è in linea

Visitano il forum: Nessuno e 51 ospiti