Condividi:        

Ordine alfabetico lista

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

Ordine alfabetico lista

Postdi systemcrack » 13/06/24 13:03

Continuando a lavorare sul file di cui ho parlato qui e che ora è liberamente scaricabile qui mi sono trovato in difficoltà con l'ordinamento alfabetico della lista che si va a creare nel foglio "REGISTRO".

Riepilogando:
Il file è costituito da due fogli per il momento: "SCHEDA" e "REGISTRO"

SCHEDA:
Il foglio è composto da uno specchietto in cui una volta compilato nei suoi campi si clicca sul bottone e i dati vengono copiati tramite macro nel foglio registro.

REGISTRO:
Nel foglio c'è una griglia in cui vengono riportati i dati tratti dal foglio scheda.

Vi sono due Macro che popolano il file:

Una nel modulo 2 (il modulo 1 non c'è) che copia i dati nel foglio "REGISTRO"
Codice: Seleziona tutto
Sub registra()
'
' registra Macro
'

'
    Sheets("REGISTRO").Select
    Rows("2:2").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    Range("A2").Select
    Sheets("SCHEDA").Select
    Range("D5").Select
    Selection.Copy
    Sheets("REGISTRO").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D7").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("D2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D13").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("E2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D15").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("F2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
       
    Sheets("SCHEDA").Select
    Range("D17").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("G2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   
    Range("B6").Select
    Sheets("SCHEDA").Select
    Range("D5:D17").Select
    Range("D17").Activate
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("D5").Select
End Sub


E una seconda macro, che adatta le celle al contenuto, associata al foglio REGISTRO così composta:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveCell.EntireRow.AutoFit
End Sub

A questo punto vorrei che l'elenco fosse sempre in ordine alfabetico (con colonna di riferimento D = cliente), a meno che l'utente non si avvalga dei filtri manuali (che ancora non sono presenti nel file però).

Perciò, dopo aver visto questo video ho provato ad inserire in REGISTRO il codice in questo modo:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveCell.EntireRow.AutoFit
Range("A:G").Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlYes
End Sub


Ma mi dava errore, perciò ho provato a ad inserire la macro in un modulo a parte
Codice: Seleziona tutto
Sub OrdineCrescente()
Range("A:G").Sort _
Key1:=Range("D1"), _
Order1:=xlAscending, _
Header:=xlYes

End Sub

e poi di richiamarla così:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveCell.EntireRow.AutoFit
Call OrdineCrescente
End Sub

Ma così mi sovrascrive sempre la stessa riga.. :roll:
Che sia il comando del riporto del testo
Codice: Seleziona tutto
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

che va in conflitto con la nuova macro? Mi aiutate a capire per favore?
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Sponsor
 

Re: Ordine alfabetico lista

Postdi systemcrack » 13/06/24 13:32

Scusate come non detto.. funziona richiamandola da modulo.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Ordine alfabetico lista

Postdi systemcrack » 13/06/24 15:51

Niente era meglio se non scrivevo.. sembrava andasse, ma ora ha ricominciato a scrivere sulla stessa riga :aaah
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Ordine alfabetico lista

Postdi Anthony47 » 13/06/24 17:31

Niente era meglio se non scrivevo.. sembrava andasse, ma ora ha ricominciato a scrivere sulla stessa riga
Meno male che te ne sei accorto prima di trovarti con i dati di REGISTRO mischiati a caso.
Infatti la tua Sub Registra carica 7 celle, A-G di Riga 2; ognuno di questi cambiamenti crea un Worksheet_Change, quindi andrai ad eseguire 7 volte la Sub Worksheet_Change. Se quando hai caricato A2 esegui il sort, il dato da A2 andra' a finire non so su quale riga; ma il prossimo caricamento da SCHEDA a REGISTRO mettera' il dato in B2, cioe' in un record che realisticamente e' quello sbagliato.

Per evitare questo casino non devi mettere la Call OrdineCrescente all'interno della Sub WorksgeetChange, ma eseguitla in coda alla Sub Registra, subito prima di End Sub:
Codice: Seleziona tutto
Sub registra()
'
' registra Macro
'
'

'Il codice della tua macro, lungo o corto che sia
'
'
Call OrdineCrescente
End Sub
Avatar utente
Anthony47
Moderatore
 
Post: 19435
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Ordine alfabetico lista

Postdi systemcrack » 13/06/24 20:22

No Anthony, purtroppo non funziona..
non ricevo più errori e scrive su righe differenti, ma non riordina in or.alfabetico la lista.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Ordine alfabetico lista

Postdi Anthony47 » 14/06/24 13:16

Io ho posizionato la Call OrdineCrescente nella posizione probabilmente giusta; se la Sub OrdineCrescente non ordina allora cancellala e registrane un'altra mentre esegui l'ordinamento che ti serve
Avatar utente
Anthony47
Moderatore
 
Post: 19435
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Ordine alfabetico lista

Postdi systemcrack » 14/06/24 13:33

Se faccio girare io la macro OrdineCrescente da vba funziona, se metto il comando call no. Ora sono fuori sede e non riesco a linkare il file, ma appena torno lo uppo e lo posto.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Ordine alfabetico lista

Postdi Anthony47 » 14/06/24 13:41

Non sapendo quale foglio e' selezionato, e lavorando la Sub OrdineCrescente sul foglio attivo, prova innanzitutto a inserire una selezione:
Codice: Seleziona tutto
Sub OrdineCrescente()
Sheets("REGISTRO").Select             'Seleziona foglio da ordinare
Range("A:G").Sort _
'etc etc
Avatar utente
Anthony47
Moderatore
 
Post: 19435
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Ordine alfabetico lista

Postdi systemcrack » 14/06/24 18:10

Siii grande Anthony! Così funziona! Fantastico!
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40


Torna a Applicazioni Office Windows


Topic correlati a "Ordine alfabetico lista":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti