XL 2010 Graphique ajustable aux données

grisouille

XLDnaute Nouveau
Bonjour à tous,

Suite à ma demande précédente de mercredi dernier, je voudrais établir un graphique s'ajustant automatiquement suite au remplissage du tableau de la Feuil2.
J'ai fait un exemple de ce que je veux sur la feuil2 mais en définissant moi-même la plage.
En rajoutant des colonnes avec des valeurs (col F), je désirerai qu'elles apparaissent automatiquement dans le graph..
Je pense à des formules (genre decaler) mais je n'y arrive pas.
Merci
 

Pièces jointes

  • Classeur1 (2).xlsx
    16.9 KB · Affichages: 70

grisouille

XLDnaute Nouveau
Bonjour,

Merci à jp14, mais je rajoute des valeurs horizontalement (sur la feuil2 :col F, col G etc...) lorsque je remplis mon tableau de la feuil1 et non pas verticalement au delà de la ligne 14 (feuil2) dans mon exemple.

Je ne comprends pas la solution de Gardien de Phare.
 

cathodique

XLDnaute Barbatruc
Bonjour,

J'ai effectué pas mal de recherches pour arriver à ce résultat. J'espère qu'il répond à tes attentes mais sans tes formules.

Tu trouveras une macro qui rapatrie les données de la feuille1 vers la feuille2 suivant la disposition initiale de ton fichier.

Le code s’exécute quand tu actives la feuil2, ce qui revient à mettre à jour cette dernière si tu ajoutes ou supprimes des données de la source (feuil1) et du coup le graphe.

Pour le graphe, il faut utiliser pour les séries une plage dynamique définie avec la fonction "DECALER".
 

Pièces jointes

  • grisouille.xlsm
    26.5 KB · Affichages: 37

cathodique

XLDnaute Barbatruc
En fouinant, j'ai trouvé un code de Boisgontier que j'ai adapté à ton cas.

Normalement c'est super rapide.
VB:
Sub ItemsPourUnCode()
    Set d1 = CreateObject("Scripting.Dictionary")

    With Feuil1
        a = .Range("C1:D" & .Range("A65365").End(xlUp).Row)
        j = 0
        For i = LBound(a) To UBound(a)
            If Not d1.exists(a(i, 1)) Then j = j + 1: d1(a(i, 1)) = j
        Next i
        Dim Tbl(): ReDim Tbl(1 To d1.Count, 1 To 5)
        Set d2 = CreateObject("Scripting.Dictionary")
        For i = LBound(a) To UBound(a)
            d2(a(i, 1)) = d2(a(i, 1)) + 1
            Tbl(d1(a(i, 1)), 1) = a(i, 1)
            Tbl(d1(a(i, 1)), d2(a(i, 1)) + 1) = a(i, 2)
        Next
    End With

    With Feuil2
        .Cells.Clear
        .[A1].Resize(d1.Count, 5) = Tbl

        'complète ligne en-tete
        DerCol = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column    'donne n° dernière colonne non vide
        If DerCol <> 1 Then
            For i = 1 To DerCol - 1
                .Cells(1, i + 1) = i
            Next i
        End If
    End With
End Sub
NB: ce code plante si on dépasse 5 colonne. J'ai ouvert une discussion pour trouver une solution.

Je te joins ton fichier avec le code ci-dessus corrigé gracieusement par Laetitia90. Le code ne plante plus pour dépassement de colonne. J'ai rajouté les feuilles 3 et 4 juste pour faire des tests que tu peux supprimer.
 

Pièces jointes

  • grisouille_v2.xlsm
    34.6 KB · Affichages: 42
Dernière édition:

Discussions similaires

Réponses
2
Affichages
292

Statistiques des forums

Discussions
311 725
Messages
2 081 939
Membres
101 844
dernier inscrit
pktla