Istogrammi e intervalli variabili

  • Istogrammi e intervalli variabili di Elena 20
    Ciao a tutti e complimenti per il bellissimo sito.
    ho predisposto in un foglio excel un istogramma per rappresentare i successivi risultati di un’elaborazione.
    il mio problema consiste nel fatto che l’intervallo dati origine sui cui si basa l’istogramma è, parzialmente, variabile e non so in questo caso come impostare il codice vba. mi spiego con un esempio.
    il primo estremo dell’intervallo (che è sempre fisso) è costituito dalla cella a1. il secondo estremo è situato nella colonna b (fissa) ed in un numero di riga (variabile) contenuto nella cella f1.
    quindi, a seconda del contenuto della cella f1, l’intervallo dei dati origine avrà un’estensione più o meno ampia . in altri termini se in f1 c’è ad. esempio il numero 8, l’intervallo da considerare per l’istogramma sarà a1:b8. ora, ciò che cerco è un codice vba che mi consenta di tracciare un istogramma basato su un intervallo dati origine definito dal contenuto di f1.
    ringrazio sin d’ora chiunque voglia aiutarmi.-- elena

    Ciao elena di Big ronnie
    Vedi se questa riga di codice ti và bene.sicuramente dovrai adattarla alle tue esigenze.
     
    ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Worksheets(1).Range("f1")), PlotBy _
            :=xlColumns

    di Elena20
    Ciao ronnie e grazie per la risposta. non ho capito bene come devo utilizzare la tua riga di codice.
    ti spiego comunque ciò che ho fatto per provarla. dimmi poi se va bene.
    sul foglio1 di una cartella excel ho inserito numeri progressivi da 1 a 10 nell’intervallo a1:a10 poi altri numeri nell’intervallo b1:b10. nella cella f1 ho inserito il numero 3.
    ciò fatto, ho registrato una macro da tastiera (macro1) per l’inserimento nel foglio1 di un istogramma con dati origine ricavati dall’intervallo a1:b10.
    riandando poi a vedere il codice della macro1, ho modificato la parte con “activechart.setsourcedata…ecc.” sostituendo ad essa il codice che mi hai inviato.
    purtroppo rilanciando la macro ottengo un errore run-time ‘1004’ mentre mi aspettavo un istogramma tracciato sui dati origine contenuti esclusivamente in a1:b3. puoi dirmi cosa sbaglio in questa procedura? ciao -- elena

    di Big ronnie
    Ciao elena, ho riprodotto il tuo esempio ed ho ricavato questo codice,provalo stando molto attenta ai riferimenti(tipo il nome del foglio).un consiglio che posso darti è nei momenti di difficoltà usa il registratore di macro.ciao
     
    Sub Grafico()
        Range("A1:B10").Select
        Charts.Add
        ActiveChart.ChartType = xl3DColumnClustered
        ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Sheets("foglio1").Range("f1")), PlotBy _
            :=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio1"
    End Sub
    

    di Elena20
    Funziona, ronnie!!!
    una chiarificazione. nell'applicazione per la quale sto utilizzando l'istogramma, il grafico è, per così dire, "residente" a tempo pieno nel foglio, nel senso che non devo rilanciarlo ad ogni nuova elaborazione. mi sto chiedendo se sia possibile fare lo stesso anche con il tuo codice. mi spiego. e' possibile avere stabilmente nel foglio un grafico che oltre a riportare i risultati delle elaborazioni (colonna b) come già avviene, tenga conto (tramite la cella f1) dell'intervallo su cui deve basarsi, ed il tutto senza bisogno di essere rilanciato di volta in volta?
    un grosso ringraziamento per l'aiuto che già mi hai dato. --elena

    Automazione grafico di Big ronnie
    Ciao elena,se ho ben capito vuoi che al variare di "f1" il grafico si aggiornasse automaticamente.ti mando del codice(che sfrutta una idea di luca del 30/08 esecuzione automatica macro)vedi se ti và bene.
     
    Copia la macro nell'editor di foglio1:
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Intersect(Target, Range("f1")) Is Nothing Then
      Exit Sub
    End If
    Grafico ' il nome della macro da lanciare
    End Sub
    
    Copia la macro in un modulo:
    
    Sub Grafico()
    'Con questa riga elimino ogni volta il vecchio grafico.
    Worksheets(1).ChartObjects.Delete
        Range("A1:B10").Select
        Charts.Add
        ActiveChart.ChartType = xl3DColumnClustered
        ActiveChart.SetSourceData Source:=Sheets("Foglio1").Range("A1" & ":" & "B" & Sheets("foglio1").Range("f1")), PlotBy _
            :=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Foglio1"
    End Sub
    

    di Elena20
    Grazie, ronnie, per il codice che mi hai mandato. nella sezione scambio files ti invio alcuni commenti. elena--

    Istogrammi e intervalli variabili di Ricky53
    Per aggiornare il grafico (avendo inserito la formula conta.numeri in "f1") quando modifichi un valore nel range b1.b10 occorre che nella macro "worksheet_change" presente nel foglio1 tu sostituisca il range da "f1" con "b1:b10" altrimenti non viene rilevato nessun cambiamento e non viene eseguita la macro "nuovo_grafico".

    prova e vedrai che il grafico si aggiorna.

    in alternativa banale, quando sei posizionata sulla cella "f1", puoi premere il tasto "f2" e poi "invio".
    ciao da ricky53

    di Elena 20
    Grazie ricky per il suggerimento ed ancora un ringraziamento a big ronnie! --elena20