Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel]-VBA-macro per aggiornamento di una dashboard

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]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 01:24

Mi puoi inserire nel prossimo in un messaggio, ma marcandolo come "Code", il file testo che corrisponde al file csv? non vorrei stare a ricrearmene uno.
Vorrei inoltre che provassi a formattare la colonna F col formato gg-mmm-aaaa (es 25-Mar-2011) e riallegassi lo screenshot.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Sponsor
 

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 11:11

se formatto la colonna del .csv come gg-mmm-aaaa va alla grande.

Non so se è possibile, ma si potrebbe importare il .csv effettuando il cambio di formattazione sulle colonne con data, poi salvare le modifiche e completare l'importazione?
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Flash30005 » 11/11/11 12:11

Ho aggiunto la riga che formatta le colonne F,G,H sul .csv prima di incollare
prova questa macro
Codice: Seleziona tutto
Sub ScegliFile()
Worksheets("2").Select
NomeFile = ThisWorkbook.Name
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Filters.Clear
.Filters.Add "All files", "*.*"
.Filters.Add "File Csv", "*.csv", 1
.Show
If .SelectedItems.Count = 0 Then
MsgBox ("Nessuna voce selezionata, procedura annullata")
GoTo Esci
End If
For I = 1 To .SelectedItems.Count
FullNome = .SelectedItems(I)

    Workbooks.Open Filename:=FullNome
    Columns("A:A").Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), TrailingMinusNumbers:=True
    Columns("J:J").Select
    Selection.Delete Shift:=xlToLeft
    Columns("H:H").Select
    Selection.Delete Shift:=xlToLeft
    Columns("F:H").NumberFormat = "dd/mmmm/yyyy"
    Columns("A:I").Select
    Selection.Copy
    Windows(NomeFile).Activate
    Range("A1").Select
    ActiveSheet.Paste
    Range("A2").Select
    Ncsv = Mid(FullNome, InStrRev(FullNome, "\") + 1, Len(FullNome))
    Application.DisplayAlerts = False
    Workbooks(Ncsv).Close SaveChanges:=False
    Application.DisplayAlerts = True
Next I
End With
Esci:
End Sub

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 13:32

Flash grazie per la risposta,

c'è un problema, la macro che hai scritto tu mi cambia il formato, ma non sul .csv bensì sul file excel e di conseguenza non va bene.

Ciao
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 14:47

La tua macro consente una selezione multipla (piu' file csv); tutti vengono "lavorati", ma solo l' ultimo rimane sul tuo foglio. Suggerisco di disabilitare la selezione multipla ed eliminare il ciclo For I = 1 To .SelectedItems.Count /Next I

Comunque la mia proposta e' che il file csv venga "importato", non aperto e poi copiato.

Questo corrisponde a sostituire tutto il ciclo For I = 1 To .SelectedItems.Count /Next I con:
Codice: Seleziona tutto
    GoTo Esci   'ESISTENTE
    End If           'ESISTENTE
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & .SelectedItems(1), Destination:=Range("A1"))
        .Name = "tracktrace_A-11-09-2011"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 4, 4, 9, 4, 9, 1)   '4=mmGGaa, 9=skip
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End With     'ESISTENTE

Inoltre, come detto, e' opportuno modificare questa:
Codice: Seleziona tutto
    .AllowMultiSelect = False    'INVECE CHE = True


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 15:05

Anthony47 ha scritto:La tua macro consente una selezione multipla (piu' file csv); tutti vengono "lavorati", ma solo l' ultimo rimane sul tuo foglio. Suggerisco di disabilitare la selezione multipla ed eliminare il ciclo For I = 1 To .SelectedItems.Count /Next I

Comunque la mia proposta e' che il file csv venga "importato", non aperto e poi copiato.

Questo corrisponde a sostituire tutto il ciclo For I = 1 To .SelectedItems.Count /Next I con:
Codice: Seleziona tutto
    GoTo Esci   'ESISTENTE
    End If           'ESISTENTE
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & .SelectedItems(1), Destination:=Range("A1"))
        .Name = "tracktrace_A-11-09-2011" <<< perchè qui resta indicato quel file tracktrace?
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 4, 4, 9, 4, 9, 1)   '4=mmGGaa, 9=skip <<< se volessi usare lo std gg-mmm-aaaa come devo modificare?
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End With     'ESISTENTE

Inoltre, come detto, e' opportuno modificare questa:
Codice: Seleziona tutto
    .AllowMultiSelect = False    'INVECE CHE = True


Ciao


Sto provando se funziona,

grazie mille
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 15:11

Sto provando se funziona :?: :?:
:evil: :evil:

:D
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Flash30005 » 11/11/11 15:12

Zip87 aveva qualche dubbio!!! :lol:
Io già l'ho messa in cascina ;)
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 15:13

Hai letto i commenti miei nel tuo codice?

Ciao
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 15:28

Hai letto i commenti miei nel tuo codice?

Se nascondi le tue domande nellle cose che dico io non le vedro' mai...

Quel nome non e' di grande utilita', corrisponde al nome file che ho utilizzato in partenza; puoi sostituirlo con
Codice: Seleziona tutto
        .Name = "pippo"


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 15:30

Scusami

Codice: Seleziona tutto
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 4, 4, 9, 4, 9, 1)   '4=mmGGaa, 9=skip


<<< se volessi usare lo std gg-mmm-aaaa come devo modificare?
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 15:36

Ma in quella fase tu stai descrivendo il formato del testo di input; se vuoi formattare l' importato devi lavorare sul foglio ricevente; cioe' selezioni la colonna importata e formatti a piacere. La nuova importazione non modifichera' questa formattazione.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 15:45

Ma in quella fase tu stai descrivendo il formato del testo di input; se vuoi formattare l' importato devi lavorare sul foglio ricevente; cioe' selezioni la colonna importata e formatti a piacere. La nuova importazione non modifichera' questa formattazione.


Vuoi dire che aggiungo una riga di codice che mi formatta la colonna a piacere?

Dopo la modifica di Anthony queste due macro fanno un pò i cavoli loro, tradotto non funzionano più bene.

Codice: Seleziona tutto
Sub CompilaTabella()
Worksheets("tabella_codifica").PivotTables("Tabella_pivot1").PivotCache.Refresh

Application.ScreenUpdating = False
Application.Calculation = xlManual

UR1 = Worksheets("tabella_codifica").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("tabella_codifica").Columns("D:F").Clear
Worksheets("tabella_codifica").Range("D1").FormulaR1C1 = "Colonna1"
Worksheets("tabella_codifica").Range("E1").FormulaR1C1 = "Colonna2"
Worksheets("tabella_codifica").Range("F1").FormulaR1C1 = "Colonna3"
Dim Np As Integer

For RR1 = 2 To UR1
    Worksheets("tabella_codifica").Range("D" & RR1).Value = Worksheets("tabella_codifica").Range("A" & RR1).Value
    Worksheets("tabella_codifica").Range("E" & RR1).Value = Worksheets("tabella_codifica").Range("B" & RR1).Value
    Np = Val(Worksheets("tabella_codifica").Range("B" & RR1))
    M_Np = ""
    Select Case Np
    Case Is < 10
    M_Np = "d"
    Case Is < 50
    M_Np = "c"
    Case Is < 100
    M_Np = "b"
    Case Else
    M_Np = "a"
    End Select
    Worksheets("tabella_codifica").Range("F" & RR1).Value = M_Np

Next RR1
ActiveWorkbook.Names.Add Name:="Colonna1", RefersToR1C1:="='1'!R1C4:R" & UR1 & "C6"

UR2 = Worksheets("dashboard").Range("U" & Rows.Count).End(xlUp).Row
For RR2 = 2 To UR2
    Pallet = Worksheets("dashboard").Range("D" & RR2).Value
    For RR1 = 2 To UR1
        If Worksheets("tabella_codifica").Range("D" & RR1).Value = Pallet Then Worksheets("dashboard").Range("U" & RR2).Value = Worksheets("tabella_codifica").Range("F" & RR1).Value
    Next RR1
Next RR2
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub


Codice: Seleziona tutto
Sub preparazione()
Application.ScreenUpdating = False
Application.Calculation = xlManual

Worksheets("preparazione").Columns("A:B").Clear
UR1 = Worksheets("dashboard").Range("C" & Rows.Count).End(xlUp).Row
For RR1 = 1 To UR1
Worksheets("preparazione").Range("A" & RR1).Value = Worksheets("dashboard").Range("C" & RR1).Value
Worksheets("preparazione").Range("B" & RR1).Value = Worksheets("dashboard").Range("D" & RR1).Value
Next RR1
Worksheets("preparazione").Range("A:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Worksheets("preparazione").Range("A:B").RemoveDuplicates Columns:=2, Header:=xlYes
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 15:57

Non trovo nessuna relazione tra quanto fa la macro che ho contribuito a modificare e le elaborazioni che fanno queste altre macro.
Devi quindi debuggare il codice per capire dove nasce il conflitto; capito quello si capira' anche dove intervenire.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Anthony47 » 11/11/11 16:24

Dimenticavo il suggerimento piu' ovvio: se quel codice non risolve niente e crea problemi la cosa piu' semplice e' di eliminarlo.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Flash30005 » 11/11/11 17:03

Per formattare una o più colonne con formato data esteso...
nel foglio ricevente puoi usare
Codice: Seleziona tutto
Columns("F").NumberFormat = "dd/mmmm/yyyy"

per la colonna F
oppure
Codice: Seleziona tutto
Columns("F:H").NumberFormat = "dd/mmmm/yyyy"

per più colonne (da F a H)

La seuqenza macro,a mio parere, deve essere
1) ScegliFile (importi il Csv)
2) CompilaTabella (Compila il folgio "1")

Ho provato così e funziona tutto
per quanto concerne la macro "preparazione" non saprei cosa dovrebbe fare anche perché nel file non esistono quei fogli

Ciao

P.s. Leggi i commenti di Anthony qui sopra.
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 17:56

Per la formattazione sembra andare tutto bene. Adesso nasce il problema che ho indicato prima.

La macro "compilatabella" non ha le stesse righe della pivot al suo fianco e non capisco quale sia il motivo :aaah
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 18:27

zip 87 ha scritto:Per la formattazione sembra andare tutto bene. Adesso nasce il problema che ho indicato prima.

La macro "compilatabella" non ha le stesse righe della pivot al suo fianco e non capisco quale sia il motivo :aaah


Forse è necessario inserire :

Codice: Seleziona tutto
Application.Calculate
???
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi zip 87 » 11/11/11 22:39

ho capito dove si pone il problema

Codice: Seleziona tutto
Private Sub Workbook_Open()

Worksheets("dashboard").Visible = True
Worksheets("tabella_codifica").Visible = True
Worksheets("preparazione").Visible = True
Modulo1.ScegliFile
Modulo1.CompilaTabella
Modulo1.preparazione
ActiveWorkbook.RefreshAll
Worksheets("dashboard").Visible = False
Worksheets("tabella_codifica").Visible = False
Worksheets("preparazione").Visible = False


End Sub



ossia nella macro di apertura del workbook.In particolare nel comando
Codice: Seleziona tutto
ActiveWorkbook.RefreshAll


A questo punto, perchè???Come le aggiorno quella 30 di pivot? Una riga vb ogni foglio?
zip 87
Utente Junior
 
Post: 52
Iscritto il: 04/11/11 10:17

Re: [Excel]-VBA-macro per aggiornamento di una dashboard

Postdi Flash30005 » 11/11/11 23:24

Non saprei
ma se devi aggiornare 30 o più fogli crei un ciclo for... next
esempio:
Codice: Seleziona tutto
For FF = 1 to worksheets.cont
If Sheets(FF).name <> "FoglioDaEscludere"  then
' Aggiornamento Pivot di ogni foglio
end if
next FF


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel]-VBA-macro per aggiornamento di una dashboard":


Chi c’è in linea

Visitano il forum: eliorimnap e 14 ospiti