+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Aggiornare campi dati di un grafico all'interno di una macro

  1. #1
    Zannando non è in linea Novello
    Post
    24

    Aggiornare campi dati di un grafico all'interno di una macro

    Salve a tutti, il mio problema oggi è che ho creato una macro per aggiornare dei dati in una tabella e ogni volta che inserisce nuovi dati li immette creando una nuova linea, questo fatto però non va d'accordo con un grafico che trae i suoi dati dalla tabella (tale tabella è posta in un foglio separato dal grafico). Sapreste dirmi se esiste un modo per evitare che il grafico escluda dalla selezione i dati inseriti nella linea neo-creata dalla macro?
    P.S. preferirei risolvere il tutto senza modificare la modalità di immissione dei dati nella tabella

    Ecco la macro

    Sub Aggiornamento()
    '
    ' Aggiornamento Macro
    '

    '
    Sheets("Timeline progressioni").Select
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Sheets("Dati colpleti").Select
    Range("Tabella5[[#All],[Colonna1]:[Colonna2]]").Select
    ActiveWorkbook.Worksheets("Dati colpleti").ListObjects("Tabella5").Sort. _
    SortFields.Clear
    ActiveWorkbook.Worksheets("Dati colpleti").ListObjects("Tabella5").Sort. _
    SortFields.Add Key:=Range("A4"), SortOn:=xlSortOnValues, Order:= _
    xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Dati colpleti").ListObjects("Tabella5").Sort
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    Range("Tabella5[[#All],[Colonna1]:[Colonna2]]").Select
    Selection.Copy
    Sheets("Timeline progressioni").Select
    Range("B1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
    Sheets("Test").Select
    Range("A1").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(EXACT('Timeline progressioni'!RC[1],'Timeline progressioni'!R[2]C[1]),0,1)"
    Range("A1").Select
    Selection.AutoFill Destination:=Range("A1:AK1"), Type:=xlFillDefault
    Range("A1:AK1").Select
    Range("AK1").Select
    ActiveWindow.ScrollColumn = 34
    ActiveWindow.ScrollColumn = 33
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 31
    ActiveWindow.ScrollColumn = 30
    ActiveWindow.ScrollColumn = 29
    ActiveWindow.ScrollColumn = 27
    ActiveWindow.ScrollColumn = 25
    ActiveWindow.ScrollColumn = 23
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 16
    ActiveWindow.ScrollColumn = 14
    ActiveWindow.ScrollColumn = 6
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 1
    Range("A1:AK1").Select
    Selection.AutoFill Destination:=Range("A1:AK2"), Type:=xlFillDefault
    Range("A1:AK2").Select
    Range("AK2").Select
    ActiveWindow.ScrollColumn = 23
    ActiveWindow.ScrollColumn = 22
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 19
    ActiveWindow.ScrollColumn = 17
    ActiveWindow.ScrollColumn = 13
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 8
    ActiveWindow.ScrollColumn = 5
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A3").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C[36])"
    If Range("A3") < 1 Then
    Sheets("Timeline progressioni").Select
    Rows("1:2").Select
    Selection.Delete Shift:=xlUp
    End If
    Sheets("Test").Select
    Cells.Select
    Selection.ClearContents
    Range("E8").Select
    Sheets("Timeline progressioni").Select
    Sheets("Timeline progressioni").Select
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Sheets("Dati colpleti").Select
    ActiveWorkbook.Worksheets("Dati colpleti").ListObjects("Tabella5").Sort. _
    SortFields.Add Key:=Range("A4"), SortOn:=xlSortOnValues, Order:= _
    xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Dati colpleti").ListObjects("Tabella5").Sort
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With
    Range("Tabella5[[#All],[Colonna39]]").Select
    Selection.Copy
    Sheets("Timeline progressioni").Select
    Range("B3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
    ActiveWindow.ScrollWorkbookTabs Sheets:=1
    ActiveWindow.ScrollWorkbookTabs Sheets:=1
    ActiveWindow.ScrollWorkbookTabs Sheets:=1
    Sheets("Dati elaborati").Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    Sheets("Timeline progressioni").Select
    Range("A3").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    End Sub

  2. #2
    PaoloTalini non è in linea Scribacchino
    Luogo
    Pontedera (PI)
    Post
    862
    Zannando:

    Il codice che hai scritto si limita a fare quanto hai progettato.
    Il grafico collegato probabilmente dovrebbe avere dei riferimenti alle celle del tipo A1:C6,
    Il riferimento del grafico rimane costante anche dopo l'aggiornamento.
    Dovresti progettare un codice che intervenga sul grafico.

    P.S.
    Per ottimizzare il codice che usi dovresti evitare l'uso del select e usare
    il Metodo Copy come da manuale.
    La lettura del manuale di Excel V.B. A e/o delle discussioni presenti nel forum
    potrebbero migliorare il tuo codice.
    P. Talini
    __________________________________________________ _______________________________________
    Tutti sanno che una cosa è impossibile da realizzare,
    finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

  3. #3
    Zannando non è in linea Novello
    Post
    24
    Grazie dei suggerimenti, in effetti avevo già modificato qualcosa, ma ve l'avevo mostrato per chiarire meglio in che modo generavo le linee. Detto ciò il mio problema è che i campi aggiunti vengono esclusi dalla selezione dei dati, per capirci se il campo era A1:C6 dopo l'aggiunta diviene (A1:C2;A4:C7)...non so se mi spiego

  4. #4
    PaoloTalini non è in linea Scribacchino
    Luogo
    Pontedera (PI)
    Post
    862
    Zannando:

    il campo era A1:C6 dopo l'aggiunta diviene (A1:C2;A4:C7)...non so se mi spiego
    Non capisco. Forse volevi dire :
    prima di aggiornare era A1:C6
    aggiornato diventa A1:C7


    La procedura inserire un nuovo rigo ma il grafico non cambia.
    Il grafico potrebbe avere riferimenti univoci.
    Quando si fa riferimento ad un intervallo il suffisso $ equivale alla definizione
    di un riferimento fisso.

    Provvedi alla modifica del riferimento dei dati d'origine del grafico.
    P.S.
    La registrazione di una macro ti potrebbe aiutare a capire.
    P. Talini
    __________________________________________________ _______________________________________
    Tutti sanno che una cosa è impossibile da realizzare,
    finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

  5. #5
    Zannando non è in linea Novello
    Post
    24
    Prima avevo provato a registrarla ma mi dava un prodotto non funzionante ora me ne da uno che mi inverte righe e colonne (ma questo non dovrebbe essere un reale problema)...se ci fosse un modo più pulito di scriverlo non sarebbe male.
    P.S. E' normale che nei campi del grafico non mi permetta di inserire campi senza $ (metto senza e me li ritrovo dopo)?

    Sub prova()
    '
    ' prova Macro
    '

    '
    Sheets("Grafico timeline progrssioni").Select
    ActiveChart.SetSourceData Source:=Sheets("Timeline progressioni").Range( _
    "A1:AZ200")
    End Sub

  6. #6
    PaoloTalini non è in linea Scribacchino
    Luogo
    Pontedera (PI)
    Post
    862
    Zannando:
    Il suffisso $ viene automaticamente aggiunto da excel.

    Non conosco il tipo di grafico che usi(per quelli che ho provato)
    sembra che l'aumento delle righe e/o delle colonne dell'intervallo dati
    generi la modifica del grafico in automatico.

    Devi verificare che il tuo codice inserisca correttamente i dati e che
    comunque tenga sempre attivo l'intervallo minimo costituito da due celle e/o due righe.
    P. Talini
    __________________________________________________ _______________________________________
    Tutti sanno che una cosa è impossibile da realizzare,
    finché arriva uno sprovveduto che non lo sa e la inventa. (Albert Einstein)

  7. #7
    Zannando non è in linea Novello
    Post
    24
    Alla fine avevo risolto così
    codice:
        Selection.End(xlDown).Select
        Selection.End(xlToRight).Select
        Dati = ActiveCell.Address
        Sheets("Grafico timeline progressioni").Select
        ActiveChart.SetSourceData Source:=Sheets("Timeline progressioni").Range("A1", Dati)
    Così potete chiudere, grazie per i suggerimenti

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi