Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Formato data america nell'importazione da CSV

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

Formato data america nell'importazione da CSV

Postdi BG66 » 18/06/21 17:16

Ciao a tutti.
Ritorno dopo un pò di tempo. :oops:
In pratica nel file COVID-19 VFL8MINUS.xlsm il pulsante importa dati mi prende i dati da un secondo file ELEDIP.csv
ma nell'importazione le date di nascita non mantengono il formato data corretto.
Nel CSV d'esempio: il sig. SCRIVIMI ANTONIO è nato il 07/10/1988 ma ottengo 10/07/1988.
Codice: Seleziona tutto
Sub EstraiDati()
    Dim FileDiPartenza As Workbook
    Dim FoglioDiPartenza As Worksheet
    Dim PrimaColonnaDellaTabellaDiPartenza As Range
    Dim FoglioDiArrivo As Worksheet
    Dim PrimaColonnaDellaTabelladiArrivo As Range
    Dim StatoDiSicurezza As MsoAutomationSecurity
    Dim cella As Range

righe = Cells(Rows.Count, 1).End(xlUp).Row
For I = righe To 3 Step -1 'ex 1
Cells(I, 1).Select
If Selection.Value <> "" Then Selection.EntireRow.ClearContents
Next I
   
    StatoDiSicurezza = Application.AutomationSecurity
    Application.AutomationSecurity = msoAutomationSecurityForceDisable
    Set FileDiPartenza = Workbooks.Open("U:\MAIN_MENU\Safety Factory\6_Tools&Utility(TeU)\TeU_Anagrafica" & "/ELEDIP.csv") 'ex ThisWorkbook.Path &
    Application.AutomationSecurity = StatoDiSicurezza

    Dim uRiga As Long
    Dim fg As Integer
    For fg = 1 To 1
        If fg = 1 Then Set FoglioDiPartenza = FileDiPartenza.Worksheets("ELEDIP")
        'If fg = 2 Then Set FoglioDiPartenza = FileDiPartenza.Worksheets("anagrafica (2)")

    With FoglioDiPartenza
        Set PrimaColonnaDellaTabellaDiPartenza = .Range(.Cells(2, 1).Address, .Cells(.Rows.Count, 1).End(xlUp).Address) 'ex .Range(.Cells(2, 1)
    End With

     
    With Foglio2
        Set PrimaColonnaDellaTabelladiArrivo = .Range(.Cells(2, 1).Address, .Cells(.Rows.Count, 1).End(xlUp).Address)
    End With
    For Each cella In PrimaColonnaDellaTabellaDiPartenza

     
        If Not LCase(cella.Offset(0, 14).Value) = "no" Then

            With PrimaColonnaDellaTabelladiArrivo
                With .Cells(.Rows.Count).Offset(1)
                    .Value = cella.Offset(0, 5).Value 'cognome
                    .Offset(0, 1).Value = cella.Offset(0, 6).Value 'nome
                    .Offset(0, 2).Value = cella.Offset(0, 15).Value 'data di nascita 'ex (0, 14)
                    .Offset(0, 3).Value = cella.Offset(0, 7).Value 'CF
                    .Offset(0, 4).Value = cella.Offset(0, 18).Value 'Sesso (0, 17)
                    .Offset(0, 5).Value = Trim(Mid(cella.Offset(0, 22).Value, 14)) ' Stabilimento (usato trim per spazi vuoti nel testo)(0, 21)
                    .Offset(0, 6).Value = cella.Offset(0, 5).Value & " " & cella.Offset(0, 6).Value
                    '.Offset(0, 6).Value = cella.Offset(0, 14).Value
                End With
               
            End With
         
            With Foglio2
                Set PrimaColonnaDellaTabelladiArrivo = .Range(.Cells(1, 1).Address, .Cells(.Rows.Count, 1).End(xlUp).Address)
            End With
        End If
    Next

Next fg
     
   
    Application.DisplayAlerts = False
        FileDiPartenza.Close savechanges:=0
    Application.DisplayAlerts = True
   
    Call Metti_Bordi
    Call OrdineAlfabetico

Grazie per l'aiuto.
Gene
STAY SAFE

https://www.dropbox.com/s/hhq0q1w4t8qrnkl/DataCSV.rar?dl=0
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 265
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Formato data america nell'importazione da CSV

Postdi Anthony47 » 18/06/21 22:10

Bentornato...
Il mio suggerimento e' che abbandoni l'approccio usato dalla Sub EstraiDati (aprire il file csv e poi copiare le colonne di interesse) e passi a "importare" nel file COVID-19 VFL8MINUS.xlsm il contenuto di ELEDIP.csv:
-Menu /Dati /(Carica dati esterni) Da Testo;
-nel wizard di importazione guidata potrai scegliere il formato "campi Delimitati", importa da riga 2, quale e' il carattere di delimitazione campi; poi per ogni campo potrai sceglierne il formato (es Generale, oppure Data ggmmaaaa) oppure puoi marcarlo come "da non importare"
Il problema e' che la sequenza dei campi sul file excel non si accoppia con quella del csv (in particolare per quanto riguarda CF e data di nascita (sul csv sono in sequenza inversa); ma penso che nella tua anagrafica puoi benissimo invertire i campi.

Ricorda che l'importazione di dati esterni crea nel file una query; quando cambia il contenuto del file ELEDIP.csv ti bastera' selezionare una cella dell'area importata, tasto dx, scegli Aggiorna e i dati saranno aggiornati automaticamente.
Se mentre esegui la procedura di "Aggiorna" avrai a disposizione il codice che potrai arricchire con altre operazioni; ad esempio Call Metti_Bordi / Call OrdineAlfabetico che vedo nella tua Sub EstraiDati (e altre cose che non ho visto)

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

Re: Formato data america nell'importazione da CSV

Postdi BG66 » 19/06/21 07:31

Ciao Anthony,
..dopo mesi mi accorgo di una data sballata e devo imparare un nuovo sistema... aveva proprio ragione il grande Eduardo De Filippo!!
Alcuni dubbi.
Seguito le tue indicazioni e vorrei sistemare due cose:
1) Il settaggio dimensione colonne automatico mi crea questa situazione (vedi in particolare la colonna Sesso che quasi sparisce essendo composta da una sola lettera (M o F)
2)Nel campo stabilimento mi prende l'intera dicitura mentre nella macro precedente avevo "sezionato" in questo modo:
Codice: Seleziona tutto
.Offset(0, 5).Value = Trim(Mid(cella.Offset(0, 22).Value, 14)) ' Stabilimento (usato trim per spazi vuoti nel testo)(0, 21)

Immagine

Mentre in merito all'ultimo pezzo del tuo scritto:
Anthony47 ha scritto:Ricorda che l'importazione di dati esterni crea nel file una query; quando cambia il contenuto del file ELEDIP.csv ti bastera' selezionare una cella dell'area importata, tasto dx, scegli Aggiorna e i dati saranno aggiornati automaticamente.
Se mentre esegui la procedura di "Aggiorna" avrai a disposizione il codice che potrai arricchire con altre operazioni; ad esempio Call Metti_Bordi / Call OrdineAlfabetico che vedo nella tua Sub EstraiDati (e altre cose che non ho visto)

Non ho capito come muovermi per attivare le due call o comunque ottenere il risultato:
Codice: Seleziona tutto
Sub Metti_Bordi()
Dim uRG As Long
uRG = Sheets("AnagraficaFull").Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("AnagraficaFull").Range("A3:G" & uRG).Borders
   .LineStyle = xlContinuous
   .ColorIndex = 0
   .Weight = xlThin
End With
End Sub

Sub OrdineAlfabetico()
    With ActiveSheet
        uR = .Cells(Rows.Count, 1).End(xlUp).Row
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("A2:A" & uR), Order:=xlAscending
    End With
    With ActiveSheet.Sort
        .SetRange Range("A2:H" & uR)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Grazie come al solito per l'aiuto.
PS 1: Ma, dal punto di vista meramente formativo... nella macro Sub EstraiDati() non c'è modo di dirgli... dammi la data in questo formato...???
PS 2: Anche quest'anno non mi hai convocato per la vendemmia!!!

Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 265
Iscritto il: 20/08/16 07:44

Re: Formato data america nell'importazione da CSV

Postdi Anthony47 » 19/06/21 12:25

Non conosco nessun sistema affidabile per aprire con vba un file CSV e controllarne il formato dei suoi campi.

Volendo rimanere sull' approccio "importazione dati" devi quindi lavorare sul set di dati importato per modificarlo come piace a te.
Ad esempio, puoi eliminare da colonna F la parte STABILIMENTO con l'istruzione Replace:
Codice: Seleziona tutto
    Columns("F:F").Replace What:="STABILIMENTO ", Replacement:="", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
(ottenuta col registratore di macro)

Per la larghezza colonne, ti bastera' fare un autofit dopo l'importazione:
Codice: Seleziona tutto
    Columns("A:G").EntireColumn.AutoFit
(ottenuta col registratore di macro)

Oppure modifichi le "Proprietà" della tabella eliminando il ridimensionamento automatico: tasto dx sulla tabella, scegli Proprietà intervallo dati, togli la spunta a Adatta larghezza colonne.

Quanto al discorso dell'accodare le altre procedure: comincia col trovare il codice che esegue la query:
Codice: Seleziona tutto
    Range("A3").QueryTable.Refresh BackgroundQuery:=False
(indovinato: ottenuta col registratore di macro)

A questo punto costruisci la macro complessiva:
Codice: Seleziona tutto
Sub NuovaImportaDati()
    Range("A3").QueryTable.Refresh BackgroundQuery:=False
    Columns("F:F").Replace What:="STABILIMENTO ", Replacement:="", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
    Columns("A:G").EntireColumn.AutoFit
   
    Call Metti_Bordi
    Call OrdineAlfabetico
   
End Sub


Quanto alla vendemmia, quelle che abbiamo raccolto adesso sono ciliegie, non e' uva; lo capisci perche' "anche quest'anno" non ti ho chiamato :D ?

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

Re: Formato data america nell'importazione da CSV

Postdi BG66 » 19/06/21 16:48

Ciao Anthony,
ho agganciato la nuova macro "NuovaImportaDati" al vecchio tasto IMPORTA DATI e pensavo di aver seguito correttamente tutte le tue indicazioni ma il debug non è dello stesso avviso:
Immagine

https://www.dropbox.com/scl/fi/wy1l5qkpbjcly75dvl28o/COVID-19-VFL8MINUS_V1.xlsm?dl=0&rlkey=vzfnxude88ug10pna1s5okgxr

.... e comunque se il punto 6 non è stato ancora sviluppato ( https://ricette.giallozafferano.it/Ciliegie-sotto-grappa.html) ....posso dare un contributo operativo di spessore !! ;)
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 265
Iscritto il: 20/08/16 07:44

Re: Formato data america nell'importazione da CSV

Postdi Marius44 » 19/06/21 18:20

Ciao
Ho modificato così e funziona
Codice: Seleziona tutto
    Columns("F:F").Replace "STABILIMENTO ", ""


Attento che hai una riga in più rispetto all'ultima riga della colonna A

Ciao,
Mario
Marius44
Utente Senior
 
Post: 567
Iscritto il: 07/09/15 22:00

Re: Formato data america nell'importazione da CSV

Postdi Anthony47 » 19/06/21 19:25

Grazie Mario per la correzione; io comunque lascerei i parametri fino a MatchCase, così non si rischia di eliminare anche il titolo della colonna:
Codice: Seleziona tutto
    Columns("F:F").Replace What:="STABILIMENTO ", Replacement:="", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=True


Il parametro non accettato da Office 2010 e' l'ultimo dell'istruzione da me suggerita (FormulaVersion:=xlReplaceFormula2), perche' il codice e' stato registrato su versione successiva

Ciao a tutti!
Avatar utente
Anthony47
Moderatore
 
Post: 17830
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formato data america nell'importazione da CSV

Postdi BG66 » 19/06/21 20:57

[RISOLTO]
Grazie ad entrambi ....come al solito!!

Mi porto avanti augurando a tutti una serena e riposante estate .

Alla prossima.
Gene
STAY SAFE
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 265
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Formato data america nell'importazione da CSV":


Chi c’è in linea

Visitano il forum: Nessuno e 37 ospiti

cron