Condividi:        

Creare/aggiornare grafico con numero di serie variabile

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

Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 09:14

Ciao a tutti/e,

navigando in questo forum ho visto post molto interessanti e persone molto più preparate di me in VBA per excel che ho appena iniziato a studiare. Spero pertanto di poter apprendere e condividere informazioni. Dopo questa breve presentazione :) vi espongo il problema in cui mi sto imbattendo e dal quale non riesco a venirne a capo:

Premetto che utilizzo excel 2003; ho una tabella:

ColonnaB
|
v
___________Cod 1____Cod 2____Cod 3___Cod 4
Prodotto1____1
Prodotto2_____________2________________4
Prodotto3______________________3
Prodotto4_____________3

dalla quale devo creare un grafico (di tipo "istogramma a pila"), in un altro foglio chiamato "Vedi qui"; Le condizioni sono:

- ad ogni riga corrisponde una serie
- il numero delle righe può aumentare o diminuire
- il nome di ciascuna serie deve essere composto dalla parola "Serie" seguito dal contenuto della cella corrsipondente nella Colonna B (ad esempio la prima serie si chiamerà: Serie Prodotto 1)

Infine vorrei che venisse applicata l'etichetta del valore come sotto:

Ho trovato in internet qualcosa di simile ma non mi ha aiutato più di tanto. Come potete vedere ho inserito un pò di variabili (forse troppe) ma che mi aiuterebbero a comprendere la gestione di un grafico.

Ringrazio sin da subito tutti coloro che vorranno intervenire.
Ciao ;)

PS: Non ho potuto allegare il file ed immagini perchè mi sono da poco iscritto!
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Sponsor
 

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 21/05/12 10:51

Ciao GreenDays e benvenuto nel forum,
per ora ti mando questa parte di codice che aggiunge una serie al grafico.
Intanto elaboro una versione in cui come prima cosa verifica il numero di serie già presenti ed eventualmente elimina quelle in eccesso.
Codice: Seleziona tutto
Sub AggiungiSerie()
   
    Dim nuovoY As String
    Dim nomeSerie As String
    Dim nuovoN As String
    Sheets("Vedi qui").Select
    attuale = ActiveChart.SeriesCollection.Count
    nomeSerie = Range("Foglio1!A" & attuale + 3).Value
    nuovoY = "=Foglio1!R" & attuale + 3 & "c2:R" & attuale + 3 & "c5"
    nuovoN = "Serie " & nomeSerie
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(attuale + 1).Values = nuovoY
    ActiveChart.SeriesCollection(attuale + 1).Name = nuovoN

End Sub
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 11:12

wallace&gromit ha scritto:Ciao GreenDays e benvenuto nel forum,


Ciao wallace&gromit ti ringrazio per il benvenuto e per la risposta; ho iniziato a scrivere anch'io qualcosa ma senza alcun risultato :oops:

wallace&gromit ha scritto:Intanto elaboro una versione in cui come prima cosa verifica il numero di serie già presenti ed eventualmente elimina quelle in eccesso.


Nell'attesa di ricevere tue ulteriori indicazioni, ti pongo subito una domanda: oltre ad eliminare quelle in eccesso, dovrebbe aggiornare anche i valori delle rimanenti!

Spero di essere chiaro, perchè purtroppo il caso è talmente complicato che a volte solo graficamente ci si riesce ad esprimere al meglio.

Grazie ancora per tutto il supporto che mi potrai fornire :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 11:26

Provo ad inserire qualche dettaglio in più :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 11:28

ho una tabella tipo questa:

http://uploading.com/files/mb1bee6m/Cre ... afico.xls/

dalla quale devo creare un grafico ( in un altro foglio chiamato "Vedi qui") tipo questo:

Immagine

Le condizioni sono quelle sopra indicate:

- ad ogni riga corrisponde una serie
- il numero delle righe può aumentare o diminuire
- il nome di ciascuna serie deve essere composto dalla parola "Serie" seguito dal contenuto della cella corrsipondente nella colonna B (ad esempio la prima serie si chiamerà: Serie Prodotto 1)

Infine vorrei che venisse applicata l'etichetta del valore come sotto:

Immagine

Spero di aver fornito dettagli utili
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 21/05/12 13:05

Ecco qui, cancellando i dati precedenti diventa anche più facile il controllo delle nuove serie (semplicemente questo codice cancella tutto il grafico e poi lo riscrive con i dati che trova sul foglio1).
Prova e fammi sapere.
Codice: Seleziona tutto
Sub AggiornaSerie()

    Sheets("Vedi qui").Select
   
    For totale = 1 To ActiveChart.SeriesCollection.Count
    ActiveChart.SeriesCollection(1).Delete
    Next totale
       
    C = Range("Foglio1!B2").End(xlDown).Row
   
    For Dati = 1 To C - 1
   
    attuale = ActiveChart.SeriesCollection.Count
    nomeSerie = Range("Foglio1!B" & attuale + 2).Value
    nuovoY = "=Foglio1!R" & attuale + 2 & "c2:R" & attuale + 2 & "c6"
    nuovoN = "Serie " & nomeSerie
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(attuale + 1).Values = nuovoY
    ActiveChart.SeriesCollection(attuale + 1).Name = nuovoN
    ActiveChart.SeriesCollection(attuale + 1).ApplyDataLabels AutoText:=True, ShowValue:=True
   
    Next Dati
   
End Sub


P.S. il foglio con il grafico deve chiamarsi "Vedi qui" e deve già esistere, altrimenti la macro segnala un errore.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 13:43

Perdonami, ma non ho capito se i codici si utilizzano entrambi oppure solo l'ultimo! Ti ringrazio per il tuo prezioso supporto :!: :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 21/05/12 14:06

l'ultimo codice sostituisce il precedente e fa tutto il lavoro.
Chiedi pure sempre quando vuoi, poi magari subentra qualche "guru" del forum con una soluzione migliore.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 14:08

Ciao wallace&gromit, buon pomeriggio,

ho creato il grafico in un foglio denominato "Vedi qui";
ho creato un modulo con la tua macro:
Codice: Seleziona tutto
Sub AggiornaSerie()


E pare che tutto funzioni! :) :)

Adesso mi studio un pò il tuo codice e molto probabilmente ti porrò delle domande; come ti dicevo sono alle primissime armi... :-?

Mille grazie per il puntuale, tempestivo e prezioso riscontro!
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 14:27

Ancora grazie! Ti segnalo subito un errore della suddetta macro che cerco di descriverti tramite l'utilizzo delle immagini.
Il file con la macro implementata è questo:

http://uploading.com/files/7m27e2ff/Riproviamo1.xls/

Prima di cliccare sul bottome abbinato alla macro la situazione del foglio: "Vedi qui" è la seguente:

Immagine
Figura 1

poi appena clicco sul bottone per avviare la macro

Immagine
Figura 2

come vedi:

- l'asse delle x non ha più le etichette della Figura 1
- viene fuori un valore 0 :-?
- gli istogrammi pare che siano stati traslati di una unità

:cry: Mi potresti dare una dritta?

Ciao e grazie mille
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 14:39

Per quanto riguarda le etichette dell'asse X potrei risolvere inserendo questa

Codice: Seleziona tutto
ActiveChart.SeriesCollection(attuale + 1).XValues = "=Foglio1!R1C3:R1C6"


prima di

Codice: Seleziona tutto
ActiveChart.SeriesCollection(attuale + 1).Values = nuovoY
ActiveChart.SeriesCollection(attuale + 1).Name = nuovoN
ActiveChart.SeriesCollection(attuale + 1).ApplyDataLabels AutoText:=True, ShowValue:=True
Next Dati
End Sub


Ma la traslazione degli istogrammi verso sinistra? :undecided:
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 14:41

:oops: pardon verso destra
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 21/05/12 14:53

ecco risolto:
il primo problema (dello sfasamento) era dovuto ad un'indicazione errata nel range da considerare (ho modificato un "c2" in "c3")
il secondo problema nasce dal fatto che veniva cancellato il riferimento all'asse x, ora l'ho introdotto. Ecco qui il risultato:
Codice: Seleziona tutto
    Sub AggiornaSerie()

        Sheets("Vedi qui").Select
       
        For totale = 1 To ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection(1).Delete
        Next totale
           
        C = Range("Foglio1!B2").End(xlDown).Row
       
        For Dati = 1 To C - 1
       
        attuale = ActiveChart.SeriesCollection.Count
        nomeSerie = Range("Foglio1!B" & attuale + 2).Value
        nuovoY = "=Foglio1!R" & attuale + 2 & "c3:R" & attuale + 2 & "c6"
        nuovoN = "Serie " & nomeSerie
        ActiveChart.SeriesCollection.NewSeries
         ActiveChart.SeriesCollection(attuale + 1).XValues = "=Foglio1!R1C3:R1C6"
         ActiveChart.SeriesCollection(attuale + 1).Values = nuovoY
        ActiveChart.SeriesCollection(attuale + 1).Name = nuovoN
        ActiveChart.SeriesCollection(attuale + 1).ApplyDataLabels AutoText:=True, ShowValue:=True
       
        Next Dati
       
    End Sub
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 15:12

Confermo che il codice funziona! Ma ti chiedo un pò di pazienza nel darmi alcune indicazioni inerente al codice utilizzato, che non mi è totalmente estraneo (e questo mi fa ben sperare visto che sono agli inizi) ma avrei bisogno di qualche chiarimento. Adesso lo studio e poi ti riscrivo! Nel frattempo ti ringrazio per il tempo, per il codice e la pazienza dedicatami. Ciao :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 21/05/12 15:47

Le mie domande in merito al codice sopra sono (scriverò prima la parte di codice in questione e poi la/e domanda/e):

Codice: Seleziona tutto
For totale = 1 To ActiveChart.SeriesCollection.Count
ActiveChart.SeriesCollection(1).Delete
Next totale

1) non capisco la parola "totale" in quanto non è una variabile dichiarata e poi fino ad ora ho visto i seguenti cicli for:
Istruzione For...Next
Istruzione For Each...Next
1.a) questa istruzione trova tutte le serie presenti e le cancella?
___________________________________________________________________________________________________

Codice: Seleziona tutto
C = Range("Foglio1!B2").End(xlDown).Row
For Dati = 1 To C - 1

2) C è uguale all'ultima cella occupata nella colonna B a partire dalla riga 2. Io scriverei
Codice: Seleziona tutto
For Dati = 1 To C
proprio per considerare tutti i valori, quindi non mi so spiegare il
Codice: Seleziona tutto
To C - 1

___________________________________________________________________________________________________

Codice: Seleziona tutto
attuale = ActiveChart.SeriesCollection.Count

3) che tipo di variabile è "attuale" visto che conta le serie presenti nel grafico?
___________________________________________________________________________________________________

Codice: Seleziona tutto
nomeSerie = Range("Foglio1!B" & attuale + 2).Value
nuovoY = "=Foglio1!R" & attuale + 2 & "c3:R" & attuale + 2 & "c6"
nuovoN = "Serie " & nomeSerie

4) Qui sono completamente al buio! :-?
___________________________________________________________________________________________________

Codice: Seleziona tutto
ActiveChart.SeriesCollection(attuale + 1)

5) Perchè "attuale +1"?
___________________________________________________________________________________________________

Infine
ti chiedo conferma sul tipo di variabili considerate:
Codice: Seleziona tutto
Dim nuovoY As String
Dim nomeSerie As String
Dim nuovoN As String
attuale As ???????  :-?


Ti pregherei di non considerare le presenti domande qualora fossero tante e non avessi tempo a sufficienza da dedicarmi. Mi rendo conto che ti sto chiedendo una vera e propria lezione di VBA :oops:

Ad ogni modo grazie per tutto :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 21/05/12 16:08

premettendo che anche io mi sto facendo le ossa, non sono ancora (se mai lo sarò) ai livelli degli animatori del forum, si può capire che nel mio codice c'è qualche imprecisione: le variabili non le ho dichiarate tutte (vediamo dopo di che tipo sono).
Ti rispondo ai vari punti:
1) totale è una variabile integer, effettivamente toglie ogni volta la serie 1 dal grafico con un ciclo for... next (sicuramente si può risolvere meglio con una qualche istruzione che cancelli tutto e basta).

2) C conta la riga, ma i dati non iniziano nella prima riga, per questo tolgo la differenza (migliorabile anche qui... ma non come dici tu)

3) attuale è di nuovo una mia variabile integer non dichiarata. Conta il numero di serie nel grafico e mi serve per sapere a quale cella fare riferimento quando aggiungo una nuova serie (dopo ogni aggiunta attuale aumenta di 1 e va a prendere la riga successiva - parte da + 2 per lo stesso motivo di C: i valori non iniziano nella prima riga)

4) con questo codice eseguo appunto l'operazione: vado a vedere nella cella giusta Foglio1!Bx il nome della serie e lo inserisco con l'aggiunta del testo "serie ". Per il range dei valori uso il tipo di riferimento R1C1 (perchè? mah, ripensandoci è perchè l'ho ripreso da una macro esistente che avevo fatto così!!!) e lo costruisco inserendo i testi fissi necessari e il numero di riga calcolato con attuale + 2

5) qui "attuale" mi serve per definire una nuova serie nel grafico e non per il numero di riga dei valori, quindi ogni volta aggiungo una serie con +1.

Spero di essere stato chiaro, altrimenti chiedi pure.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 05/07/12 20:25

wallace&gromit ha scritto:..................altrimenti chiedi pure.


Buona sera a tutti/e, wallace&gromit :)

spero di non approfittare della tua pazienza (wallace&gromit ), ma avrei bisogno di un riscontro in merito al codice che tanto gentilmente molti giorni fa scrivesti, risolvendo un problema che mi ero posto da neofita in VBA.

Vengo al dunque: in pratica, riprendendo il codice ed utilizzando in nuovo foglio, questo non funziona! :cry:

Immagino che ti starai chiedendo perchè non utilizzare il file su cui abbiamo lavorato in passato! :?: Beh, per diverse circostanze che non sto qui a spiegare per non rischiare di essere prolisso ho dovuto adattare il codice ad un nuovo file, cambiando:

- il nome del foglio che conterrà il grafico
- i range delle serie ecc
.

Allego il file di riferimento

http://uploading.com/files/get/bdm5639e/Prova.xls

Mille grazie per quello che potrai fare (wallace&gromit ) e qualora ci fosse qualcun'altro disponibile a fornirmi il proprio supporto, inutile dire che gli/le sarei molto grato.

Ciao :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi wallace&gromit » 06/07/12 10:56

Ciao GreenDays,
ho riscontrato due errori nel codice che mi hai mandato:
il primo è che nell'istruzione For totale = hai inserito 15 invece di 1 (idem per la riga sottostante), devi rimettere 1.

il secondo è semplicemente il riferimento al foglio, che deve essere aggiornato (invece di "Foglio11" inserisci "Inizio" in tutte le posizioni in cui appare).

Così a me funziona.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 08/07/12 09:36

Buongiorno a tutti/e, wallace&gromit :!:

La macro funziona! grazie mille per il puntuale e prezioso supporto!

Ciao e buona domenica :!:
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Re: Creare/aggiornare grafico con numero di serie variabile

Postdi GreenDays » 17/07/12 17:56

Buonasera a tutti/e, wallace&gromit

perdona il disturbo :oops: ma se provassi a spostare la tabella in un'altra parte di foglio la macro non funziona :( ; penso che sia legato ai riferimenti inseriti nella macro, e sinceramente ho provato ad interpretarli cambiandoli, ma senza alcun risultato. :-?

Potresti darmi una mano? Ecco il file di riferimento

http://uploading.com/files/get/5ecc91f8/Prova.xls

Mille grazie anticipatamente!

Ciao e buona serata :)
Utilizzo Microsoft Excel 2003
GreenDays
Utente Junior
 
Post: 29
Iscritto il: 21/05/12 08:25

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Creare/aggiornare grafico con numero di serie variabile":


Chi c’è in linea

Visitano il forum: Gianca532011 e 39 ospiti