Condividi:        

Dividere su fogli diversi i dati di un 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

Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 02/11/15 11:31

Buongiorno,
sto sviluppando un sistema di gestione ordini che mi permetta di dividere in fogli diversi gli ordini di spedizione gestiti da quelli non gestiti.

Nello specifico ho questo file con in Foglio1 un elenco di ordini da gestire :
http://www.filedropper.com/elencoconsegne

Gli ordini sono distinti tra loro dal codice univoco del campo "N° spedizione" (es. IT00100075356)

Tramite varie macro -e passando anche per un programma esterno a Excel- genero questo file con la pianificazione di alcuni ordini che decido di gestire:
http://www.filedropper.com/ordineviaggio_1

Parto dicendovi a cosa devo arrivare, ovvero:

nel file "Elenco Consegne" alla fine dovrò avere:
Foglio1 Elenco dati di tutti gli ordini da gestire -e c'è-
Consegne Pianificate Elenco dati come in "Foglio1" ma dei soli ordini pianificati con vari file "Ordine Viaggio_1" -più una nuova colonna "Codice viaggio" che descrivo sotto-
Consegne Rimaste Elenco dati come in "Foglio1" degli ordini non presenti in "Consegne Pianificate"


Ora il punto in cui mi areno (e inizio a invocare il Dio Countif) è questo:

Ho bisogno che una macro legga i N°spedizione contenuti nel file "Ordine Viaggio_1" e generi nel file "Elencoconsegne" - foglio "Consegne Pianificate" un elenco con i relativi dati di quegli ordini copiati dal Foglio1 partendo dalla colonna B.
In colonna A invece deve associare ad ogni riga appena importata il "Codice Viaggio" (Formula della CELLA E1).

Prima di incollare i dati deve però controllare che il codice viaggio non sia già presente nel foglio "Consegne Pianificate" colonna A.
Se è presente deve chiedermi se voglio sovrascrivere i dati del codice e quindi:
Se dico di Sì deve eliminare le righe che contengono quel codice viaggio e inserire in fondo nuove righe con i nuovi dati di spedizioni.
Se dico No abortire l'operazione così da poter modificare il codice viaggio che voglio importare.

Se decido per il Sì avrò aggiornato l'elenco delle "Consegne Pianificate" e ho bisogno che la Macro generi in foglio "Consegne Rimaste" un elenco delle consegne rimaste da pianificare, copiando i dati dal "Foglio1" .

Quindi mi troverò 3 fogli in "Elenco Consegne":

Se può essere utile:
per farlo ho già provato a modificare in vari modi la seguente macro di ANthony47
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=105548

che fa una cosa molto simile (controlla che non ci siano valori duplicati quando si importano dati da file esterni)
ma non riesco ad adattarla correttamente al mio scopo.
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Sponsor
 

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 02/11/15 17:56

Allego un esempio molto semplificato di come deve essere il risultato nei 3 fogli

http://www.filedropper.com/elencoconsegne_1
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 04/11/15 11:19

È troppo complesso?
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi Anthony47 » 04/11/15 13:46

E' che quelle che hai pubblicato somigliano tanto alle Specifiche funzionali che in genere si abbozzano per ottenere un preventivo, non a un quesito per un forum...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 04/11/15 16:16

Ok capisco Anthony, ti chiedo scusa se la richiesta non era adeguata al forum.
Allora sono fregato perché ho provato a lungo ma la mia preparazione è troppo lontana da quello a cui voglio arrivare. :) :cry: :(

Cerco di svilupparlo per gradi e pubblicare man mano i codici che non mi funzionano.

Grazie della risposta intanto Anthony.
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 10/11/15 18:39

Ciao Anthony,
come promesso sto andando per gradi e dopo una settimana vedo la luce.

Sono riuscito a modificare la macro in modo che controlli i dati in colonna A dei due file già aperti e nel caso i dati siano già presenti nel foglio "Cons Pianificate" mi chieda se voglio importarli lo stesso:


Codice: Seleziona tutto
Sub Riporta_Viaggio()
'
Dim LastA As Long, Last1 As Long, SummaSh As String, Cnt As Long, Rispo
Dim dayWkb As String, yNext As Long
'
SummaSh = "Cons Pianificate"           '<<< Il foglio del file su cui fare l'import dei dati
'

dayWkb = ActiveWorkbook.Name
Sheets(2).Activate
Cnt = Application.WorksheetFunction.CountIf(ThisWorkbook.Sheets(SummaSh).Range("A:A"), Range("A2").Value) ' controlla se il valore in colonna A è già presente
If Cnt > 0 Then
    Rispo = MsgBox("Il n viaggio e gia presente in Cons Pianificate (" & Cnt & "volte)" & _
    vbCrLf & "Vuoi importare comunque i dati (Si /No)?", vbYesNo)
    If Rispo <> vbYes Then Exit Sub
End If
LastA = Cells(Rows.Count, 1).End(xlUp).Row
Last1 = Cells(1, Columns.Count).End(xlToLeft).Column

yNext = ThisWorkbook.Sheets(SummaSh).Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A2").Resize(LastA - 1, Last1).Copy ThisWorkbook.Sheets(SummaSh).Cells(yNext, 1)
MsgBox ("Copia effettuata, " & LastA - 1 & " righe" & _
    vbCrLf & "Sostituzione valori effettuata. Salvare il file.")
'
End Sub


e funziona.

Vorrei però che se trova valori duplicati e io gli dico di procedere:
prima elimini le righe nel foglio "Cons Pianificate" che contengono in colonna A gli stessi dati del foglio di origine;
e poi incolli i nuovi dati nel foglio "Cons Pianificate".

Spero tu possa aiutarmi.

Grazie

Christian
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi Anthony47 » 11/11/15 00:02

Quindi vuoi eliminare da foglio "Cons Pianificate" le RIGHE che in colonna A hanno lo stesso valore contenuto in A2 del foglio correntemente selezionato? Se Si, ci possono essere piu' righe da eliminare? Sono assolutamente contigue (senza nemmeno righe vuote) o sono sparse?

PS: Noto che indirizzi i fogli sia tramite il loro Index sia tramite il loro Nome; suggerirei di standardizzare sul Nome (meglio ancora sarebbe l'uso del CodeName, ma gia' il Nome e' meglio dell'Index).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 11/11/15 08:43

Sì,
nel secondo file sul foglio "Cons Pianificate" potrebbero esserci in colonna A dei valori uguali a quello della cella A2 del primo file.
Se accade deve, prima di incollare i nuovi dati con lo stesso codice, eliminare in "Cons Pianificate" le righe che contengono quel valore in A (il foglio lavora fino a riga 1000).

Le righe del secondo file nel foglio "Cons Pianificate" sono in ordine sparso
(perché una volta importate, le nuove righe vengono riordinate insieme a quelle già presenti con parametri diversi dal codice di colonna A).



>L'indirizzamento dei fogli in modi diversi credo sia dovuto al fatto che accorpo codici registrati a codici scritti nel forum per adattarli al mio scopo.
Grazie del consiglio. Studio le tipologie che hai detto.
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi Anthony47 » 11/11/15 22:51

Allora prova inserendo questo blocco nella posizione indicata
Codice: Seleziona tutto
End If          'ESISTENTE
'=== Inizio Aggiunte
If Cnt > 0 Then
    Do
        myMatch = Application.Match(Range("A2").Value, ThisWorkbook.Sheets(SummaSh).Range("A:A"), 0)
        If Not IsError(myMatch) Then
            ThisWorkbook.Sheets(SummaSh).Cells(myMatch, "A").EntireRow.Delete
        Else
            Exit Do
        End If
    Loop
End If
'== Fine Aggiunte
LastA = Cells(Rows.Count, 1).End(xlUp).Row    'ESISTENTE
'etc etc

Ma ho come la sensazione che ste cose facevano parte anche di uno degli ultimi lavori...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 21/11/15 16:48

Sì Anthony, in questo caso come ti dicevo sto adattando una tua vecchia macro.
Grazie, funziona e ho quasi terminato il lavoro (oltre 40 moduli).

Solo a volte però il codice mi dà errore qui:
yNext = ThisWorkbook.Sheets(SummaSh).Cells(Rows.Count, 1).End(xlUp).Row + 1

Errore di Runtime 1004
Errore definito dall'applicazione o dall'oggetto.

È strano perchè non ho capito da cosa deriva.
Se io genero il file Excel dal gestionale e faccio partire la macro (che è su un altro file excel), alle volte mi presenta questo errore, alle volte no.

Hai idea di cosa lo generi?

riporto il codice
Codice: Seleziona tutto
Sub Riporta_Viaggio()
'
'porta i numeri viaggio e num spedizione in foglio cons pianificate
'
Dim LastA As Long, Last1 As Long, SummaSh As String, Cnt As Long, Rispo
Dim dayWkb As String, yNext As Long
'
SummaSh = "Cons Pianificate"           '<<< Il foglio del file Annuale su cui fare la somma
'
Application.ScreenUpdating = False
    Sheets("Foglio2").Select
dayWkb = ActiveWorkbook.Name
Sheets(2).Activate
Cnt = Application.WorksheetFunction.CountIf(ThisWorkbook.Sheets(SummaSh).Range("A:A"), Range("A2").Value)
If Cnt > 0 Then 'controlla se il codice è già presente in A:A
    Rispo = MsgBox("Il numero di Viaggio è già presente in Cons Pianificate " & _
    vbCrLf & "Vuoi sostituire i dati presenti (Si /No)?", vbYesNo)
    If Rispo <> vbYes Then Exit Sub
End If
If Cnt > 0 Then 'se il codice è già presente in A:A elimina le righe che lo contengono
    Do
        myMatch = Application.Match(Range("A2").Value, ThisWorkbook.Sheets(SummaSh).Range("A:A"), 0)
        If Not IsError(myMatch) Then
            ThisWorkbook.Sheets(SummaSh).Cells(myMatch, "A").EntireRow.Delete
        Else
            Exit Do
        End If
    Loop
End If
LastA = Cells(Rows.Count, 1).End(xlUp).Row
Last1 = Cells(1, Columns.Count).End(xlToLeft).Column

yNext = ThisWorkbook.Sheets(SummaSh).Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A2").Resize(LastA - 1, Last1).Copy ThisWorkbook.Sheets(SummaSh).Cells(yNext, 1)

Windows("ELENCO CONSEGNE.xls").Activate         'elimina righe vuote in cons pianificate
    Sheets("Cons Pianificate").Select
    Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$B$31").AutoFilter Field:=1, Criteria1:="="
    Rows("2:1000").Select
    Selection.Delete Shift:=xlUp
    Selection.AutoFilter
    Application.ScreenUpdating = True
    Range("A2").Select
'
End Sub
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58

Re: Dividere su fogli diversi i dati di un elenco

Postdi Anthony47 » 21/11/15 19:24

E' possibile che ci sia incostistenza tra Rows.Count e il limite di righe in un eventuale file aperto in modalita' compatibilita'.
Se sei sicuro che avrai sempre meno di 65000 righe allora modifica quella riga in
Codice: Seleziona tutto
yNext = ThisWorkbook.Sheets(SummaSh).Cells(65000, 1).End(xlUp).Row + 1

Se invece hai dei dubbi dobbiamo approfondire come e quando usi la macro.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Dividere su fogli diversi i dati di un elenco

Postdi christianghz » 11/12/15 09:40

corretto Anthony!
Risolto!
christianghz
Utente Senior
 
Post: 114
Iscritto il: 03/02/14 17:58


Torna a Applicazioni Office Windows


Topic correlati a "Dividere su fogli diversi i dati di un elenco":


Chi c’è in linea

Visitano il forum: Nessuno e 57 ospiti