Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel] Macro gestione e controllo di una tabella

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

[Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 11/05/11 10:20

Salve, è la prima volta che scrivo qui, mi chiamo Gabriele.

Ho un problema particolare e mi è stato consigliato di risolvere tramite excel, programma fantastico ma che purtroppo conosco ben poco.

Premessa:
Utilizzo due software (A e B) che si scambiano dati tramite un file.dat esportato da A ed importato in B.

Il file, aprendolo con notepad, è di questo tipo:
Codice: Seleziona tutto
1111111112222222233333444444444444444555555555566666666666666   7777777   88888888
1111111112222222233333444444444444444555555555566666666666666   7777777   88888888
1111111112222222233333444444444444444555555555566666666666666   7777777   88888888
1111111112222222233333444444444444444555555555566666666666666   7777777   88888888


Il problema è che questo file contiene errori non previsti in B (generati da chi manda i dati aggiornati ad A), tipo lunghezza errata, campi vuoti ecc.

Un esempio:
Codice: Seleziona tutto
1111111112222222233333444444444444444555555555566666666666666   7777777   88888888
111111111              33333444444444444444555555555566666666666666   7777777   88888888
111111111   2222222233333444444444444444555555555566666666666666   7777777   88888888
1111112222222233333444444444444444555555555566666666666666   7777777   88888888

B, incontrando errori, blocca l'import di tutto il file. Mi "basta" aprire il file dat, correggere manualmente i dati (sono una ventina di casi in 2500 righe) per far andare a buon fine l'import. Lungo e macchinoso per me, un delirio per gli altri che ci lavorano e non sono molto veloci.

Ad aggravare il tutto, B, una volta importato, cancella il file.dat. Conseguentemente, il nuovo file.dat esportato il giorno dopo da A, contenente i nuovi dati (e potenzialmente nuovi errori) ricrea anche i precedenti errori. Oggi sono 20, domani 21, dopodomani 22 ecc...

Il mio obiettivo è far passare i dati da una serie di macro per poi ricreare un file.dat corretto.

Devo:
- Separare i dati in celle distinte ed applicargli controlli.
- Correggere le celle che non rispettano quei parametri.
- Esportare il nuovo file.
- Lavorare/correggere solo sulle nuove righe.

Come già detto precedentemente, fino a tre giorni fa non conoscevo neanche l'esistenza delle macro, ma prima di scrivere ho letto tante casistiche/domande/risposte qui sul forum.

Sono riuscito a creare una macro che mi importa i dati sul foglio in celle separate prendendo un esempio trovato qui sul forum, ed adattandolo alle mie esigenze. In maniera un po empirica, dopo qualche prova, ho capito il funzionamento di alcune meccaniche.

Le mie domande sono:
- Sto seguendo la strada corretta per risolvere il problema?
- Può un utente non esperto riuscire a creare qualcosa del genere?

Se entrambe le risposte saranno affermative, spero di poter essere aiutato a creare qualcosa di davvero utile per me ed i miei colleghi.

Grazie anticipatamente.
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Sponsor
 

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Avatar3 » 13/05/11 20:58

Il tuo non è un problema semplice da risolvere perché richiede un'analisi approfondita dei dati origine e dei dati definitivi (nella loro struttura)
esempio
tu vuoi che il file B si presenti come è nel tuo primo esempio?

Quindi occorre sapere la lunghezza della prima stringa è sempre di 61 caratteri (da 111...a6666)?
tra la prima stringa di 61 caratteri e la seconda c'è solo uno spazio o più di uno?
la seconda stringa è sempre di 7 caratteri
Idem per l'ottava stringa

Ma ripeto occorre oltre che un'ottima analisi anche un bel programma che "sistemi" e normalizzi il file
Io mi rivolgerei alla ditta che ha rilasciato il software e chiederei loro di eliminare questa anomalia

ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 14/05/11 09:37

Ciao e grazie per la risposta. Rispondo in ordine:

1 - Si, il secondo file deve essere uguale al primo. La struttura che ho creato prima è similare ma non identica, era un esempio; c'è da dire che comunque non cambia mai.
La struttura precisamente è questa : (traccio la prima riga)

Codice: Seleziona tutto
1111111111112222222222222333334444444444444444444444444444444444444444555

1=12
2=13
3=5
4=40
5=3

Tra il 5 ed il 6 ci sono 5 spazi.

Codice: Seleziona tutto
6666666677788888888888           +999999999999999999


6=8
7=3
8=11
Tra l'8 ed il nove 11spazi.
Infine il simbolo "+" seguito da 9=18

Il due codici sono su un'unica riga (troppo grande, l'ho divisa qui).

Il formato di uscita deve essere identico, e come detto prima questa struttura è fissa e non cambia mai.

Ho creato un piccolo file che legge dal file catalogo.dat e inserisce i vari campi in celle separate. Quelle vuote vengono riempite di rosso, quelle che rispettano la lunghezza impostata di verde.

I problemi al momento:

1: inserendo il comando outfile = "C:\catalogo.dat" e/o registrando una macro dove salvo(con nome) il file in ".dat", mi crea il file ma non rispettandomi la struttura diventando di questo tipo (esempio non preciso) con spazi fra le colonne:

Codice: Seleziona tutto
1111 2222 3333 4444 5555


Come si impostano questi paramentri nel formato di uscita?

2: Posso creare in qualche modo una macro/funzione che riempa in automatico le celle vuote? Una specie di completamento automatico che metta degli zero per arrivare alla lunghezza prestabilita?

2 - So che il problema è piuttosto complicato, al momento sto seguendo questa strada. Non riuscendo nell'impresa, mi affiderò a qualche programmatore pagandolo. Purtroppo ho contattato tante volte le varie software horse ricevendo solo picche.
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Avatar3 » 14/05/11 10:08

Ma tutte le righe hanno la stessa quantità di numeri 1, 2, 3, 4... 9 elencati da te?
In pratica il file ha n righe uguali?
Se è così non capisco a cosa serva ma una macro diventa molto più semplice

Ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: [Excel] Macro gestione e controllo di una tabella

Postdi ricky53 » 14/05/11 15:06

Ciao,
deduco che tutti gli "1111111", "222222222", "3333333333333" rappresentino dei dati (con valori diversi) che tu hai semplificati con i numeri.

Comuqnue mi unisco ad Avatr nel chiedere chiarimenti e ... se possibile in file di esempio, con pochi dati ma esaustivi (ossia con le righe errate oltre che quelle corrette).
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 16/05/11 09:15

Scusate il ritardo ma posso rispondere solo dall'uffico.

Si, le righe sono tutte uguali.
Si, quei valori (111, 222, 333) corrispondono a dei campi contenenti stringhe.

Ecco un estratto del file. La riga 1 è corretta, la 2 e la 3 sono errate (nella due manca il campo 2 che rapprensenta il codice a barre, nella 3 la lunghezza è errata, c'è uno spazio tra il campo 4 e 5 che fa aumentare la lunghezza della riga di un carattere) e la 4 è corretta.

La correzione in questo caso è:
Riga 1: ok
Riga 2: Inserire una stringa di 13 caratteri nel campo 2
Riga 3: Correggere la lughezza eliminando lo spazio
Riga 4: ok
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 16/05/11 09:16

Ecco il link: (avevo la limitazione dei 3 post)

https://rapidshare.com/files/3827498117 ... sempio.dat
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Avatar3 » 16/05/11 10:25

Quali caratteri vanno inseriti nel campo 2? Possono essere tutti zeri?

Come dicevo non è una cosa semplice ma non impossibile

ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 16/05/11 15:50

Il campo 2 è il campo del codice a barre. Su questo tipo di errore fortunatamente ho pochi casi (l'ho inserito per fare un esempio) metterlo a zero mi darebbe problemi perchè non possono esistere due articoli con lo stesso codice, diciamo che riguardo il campo due per ora lasciamolo così perchè come dicevo prima, non mi da tante noie. Diversamente mi capita il campo 3 vuoto piuttosto spesso. Li metterli tutti a zero potrebbe essere una soluzione.


Gli errori frequenti, comunque, riguardano la lunghezza della riga errata. Risolvere questa cosa mi velocizzerebbe il lavoro del 50%.

Grazie per le risposte, sei molto gentile :)
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Avatar3 » 16/05/11 17:10

Considerando l'ultimo esempio riportato questa macro soddisfa l'esigenza
ma penso bisogna intervenire ulteriormente per "normalizzare" altre eccezioni

Codice: Seleziona tutto
Public Perc As String
Sub NormalizzaF()
Perc = "C:\Temp\"
FileI = "catalogoesempio.dat"
FileO = "catalogoN.dat"
If Dir(Perc & FileO) <> "" Then Kill Perc & FileO
Open Perc & FileI For Input As #1
    Do Until EOF(1)
        Line Input #1, Riga
        If Len(Trim(Riga)) = 132 Then GoTo Scrivi
Controllo:
        If Mid(Riga, 71, 1) = " " Then
            Riga = Mid(Riga, 1, 70) & Mid(Riga, 72, Len(Riga) - 71)
            GoTo Controllo
        End If

Scrivi:
        Open Perc & FileO For Append As #2
            Print #2, Riga
        Close #2
    Loop
Close #1
End Sub



In Perc inserirai il tuo percorso (io ho usato C:\Temp)
e in FileI (File Input) il nome effettivo del tuo file (ho usato il nome del file da te inviato)
Avrai nello stesso percorso (Perc) un file denominato CatalogoN.dat (che potrai cambiare inserendo un altro nome a FileO: File Output)

Ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Gabrielza » 17/05/11 10:48

Sei un grande :) provato simulando lo stesso errore e funziona.

Cerco di tradurre il codice per vedere se ho capito bene... Hai creato due funzioni, controllo e scrivi. La prima controlla che il carattere 71 sia " ", facendo shiftare verso sinistra il resto del testo (continua a farlo finchè ci sono spazi). Se il carattere 71 è diverso da " " allora si passa all'altra funzione che crea il secondo file. Dico bene?

Se si, per le altre casistiche, mi basterebbe creare tante funzioni "controllo" una per ogni caso?


Ho capito quello che hai creato o sto sparando a caso?
Gabrielza
Newbie
 
Post: 6
Iscritto il: 11/05/11 09:34

Re: [Excel] Macro gestione e controllo di una tabella

Postdi Avatar3 » 17/05/11 14:46

Più o meno è così
innanzitutto controlla se la stringa senza spazi finali è di 132 caratteri (il trim sulla stringa toglie gli spazi inizio e fine)
se così scrive
se, invece, non è così entra in "gioco" il loop del carattere 71 che deve essere un numero se non lo è toglie lo spazio e ricontrolla...
Come controllo mi sono fermato a questa condizione ma potrebbe essere necessario verificare la stessa cosa al carattere 114 dove dovrebbe esserci il segno "+" se non lo è bisogna creare un loop simile al precedente (personalmente sposterei la posizione di "Controllo:" ancora prima del controllo della lunghezza che deve essere appunto 132 se non lo è
e verifica che 71 è un carattere (non spazio) deve controllare che a 114 ci sia il segno "+" se non lo è deve togliere uno spazio e ricominciare.

se riesci da solo, ok
altrimenti posta ancora
ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Macro gestione e controllo di una tabella":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti

cron