IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Mise a jour automatique graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Mise a jour automatique graphique
    Bonjour,
    Je debute un peu en VB avec excel et j'ai quelques problemes...

    Voila j'ai créé un Tableau Dynamique Croisé mise a jour depuis une feuille excel..
    Le probleme étant que mon graphique et generé a partir de ce TDC.
    + une autre partie des informations qui sont calculées...

    Hors des que je met a jour les données pour le TCD, la plage de donnée source n'est plus valide et je ne sais pas comment faire pour la modifier automatiquement sans avoir a les redefinir a chaque fois ...

    vous pouvez voir mon fichier xls ici : http://tatouine666.free.fr/vb/test.xls

    Merci de l'aide que vous pourriez m'apporter...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Je n'ai pas regardé le fichier joint.

    Pour pouvoir utiliser un tcd avec une plage qui "grandit" en fonction des saisies, il n'y a pas besoin de VBA...

    Tu peux nommer une plage en utilisant la fonction DECALER et lier ton tcd à la plage.

    Par exemple, si tes données commencent en A1, tu peux nommer une plage Données et dans la référence de cette plage nommée, saisir
    [code]=decaler($a$1;0;0;nbval($a:$a);nbval($1:$1))
    Attention: Ce n'est pas du VBA, mais de l'excel. Pour créer une plage nommée qui utilise une fonction, va dans le menu Insertion/Noms/Définir.
    Ainsi, ta plage nommée grandira avec tes données.

    A la création du TCD, comme plage source, tu saisiras =données et ton tcd évoluera à l'instat de ta plage source.

    Ok?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    je ne sais pas si c'est moi qui me suis mal exprimé ou le fait que je ne comprend pas trop trop la reponse mais

    En fait mon TCD est deja crée et valide
    ce TCD ce met a jour avec une autre feuille excel
    or cette feuille excel et souvent modifier (+ ou - de données)
    donc mon TCD contient plus ou moin de données

    Ce que j'aimerai c'est qu'un graphique que j'ai creer a coté ce mette a jour
    sachant qu'en plus des 2 colones contenue dans le TCD d autre a coté s'ajoutent tel que : moyenne et d autre encore ...

    j'ai reussi a faire marcher grace a un bouton que je crée donc voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    cel = "A9" 'cellule ou commence mon TCD
    'je regarde le nombre de valeur du TCD
    DerniereLigne = Range(cel).CurrentRegion.End(xlDown).Row
     
     
        'je selectionne le Graph
        ActiveSheet.ChartObjects("Graphique 7").Activate
     
    'je mets a jour les differentes valeurs en fonction du nombre de valeur
        ActiveChart.SeriesCollection(1).Select
        ActiveChart.SeriesCollection(1).Values = "='BB Project Duration'!R9C4:R" & DerniereLigne & "C4"
        ActiveChart.SeriesCollection(2).Select
        ActiveChart.SeriesCollection(2).Values = "='BB Project Duration'!R9C5:R" & DerniereLigne & "C5"
        ActiveChart.SeriesCollection(3).Select
        ActiveChart.SeriesCollection(3).Values = "='BB Project Duration'!R9C8:R" & DerniereLigne & "C8"
     
     
    MsgBox ("Graphique mis a jour")

    je sais pas s'il y a quelque chose de plus "propre" ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 128
    Points : 55 940
    Points
    55 940
    Billets dans le blog
    131
    Par défaut
    Si personne ne l'a fait, je me pencherai plus en détails sur ton problème tout à l'heure...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    voila j'ai fait une petite mise a jour du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    cel = "A9"
    DerniereLigne = Range(cel).CurrentRegion.End(xlDown).Row
     
        ActiveSheet.ChartObjects("Graphique 7").Activate
     
     
    ActiveChart.SeriesCollection("DMAIC Duration").Select
    ActiveChart.SeriesCollection("DMAIC Duration").Values = "='BB Duration'!R36C4:R" & DerniereLigne & "C4"
     
    ActiveChart.SeriesCollection("Average Duration").Select
    ActiveChart.SeriesCollection("Average Duration").Values = "='BB Duration'!R36C5:R" & DerniereLigne & "C5"
     
    ActiveChart.SeriesCollection("UCL").Select
    ActiveChart.SeriesCollection("UCL").Values = "='BB Duration'!R36C8:R" & DerniereLigne & "C8"
     
     
    ActiveChart.SeriesCollection("LCL").Select
    ActiveChart.SeriesCollection("LCL").Values = "='BB Duration'!R36C9:R" & DerniereLigne & "C9"
     
    MsgBox ("Graphique mis a jour")
    le hic c'est quand dans 1 colone il n'y a pas de valeur ...
    vue qu'il fait un select sur quelques chose qu'i n'existe pas il plante ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Voila j'ai un peu resolu mon probleme a la "barbare" ....

    voila ce que j'ai fait
    Creer un module dans lequel j'ai ajouté la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Function cellule_tout_vide(Plage As Range) As Boolean
    Dim vCellule As Object
    cellule_tout_vide = True
     
    For Each vCellule In Plage
        If vCellule <> "" Then
        cellule_tout_vide = False
        End If
    Next
    End Function
     
     
     
    Function Refraichir_Graph_BB()
     
    cel = "A36"
     
    DerniereLigne = Range(cel).CurrentRegion.End(xlDown).Row
     
    ActiveWorkbook.Worksheets("BB duration").Select
    Range("A1").Select
        ActiveSheet.ChartObjects("Graphique 7").Activate
     
     
     
     
    If cellule_tout_vide(Range("d36:d" & DerniereLigne & "")) = False Then
    ActiveChart.SeriesCollection("DMAIC Duration").Select
    ActiveChart.SeriesCollection("DMAIC Duration").Values = "='BB Duration'!R36C4:R" & DerniereLigne & "C4"
    End If
     
     
    If cellule_tout_vide(Range("e20:e" & DerniereLigne & "")) = False Then
    ActiveChart.SeriesCollection("Average Duration").Select
    ActiveChart.SeriesCollection("Average Duration").Values = "='BB Duration'!R36C5:R" & DerniereLigne & "C5"
    End If
     
     
    If cellule_tout_vide(Range("h20:h" & DerniereLigne & "")) = False Then
    ActiveChart.SeriesCollection("UCL").Select
    ActiveChart.SeriesCollection("UCL").Values = "='BB Duration'!R36C8:R" & DerniereLigne & "C8"
    End If
     
    If cellule_tout_vide(Range("K20:K" & DerniereLigne & "")) = False Then
    ActiveChart.SeriesCollection("Target").Select
    ActiveChart.SeriesCollection("Target").Values = "='BB Duration'!R36C11:R" & DerniereLigne & "C11"
    End If
     
    If cellule_tout_vide(Range("i20:i" & DerniereLigne & "")) = False Then
    ActiveChart.SeriesCollection("LCL").Select
    ActiveChart.SeriesCollection("LCL").Values = "='BB Duration'!R36C9:R" & DerniereLigne & "C9"
    End If
     
     
     
        ActiveChart.SeriesCollection(1).XValues = "='BB Duration'!R36C3:R" & DerniereLigne & "C3"
        ActiveChart.SeriesCollection(2).XValues = "='BB Duration'!R36C3:R" & DerniereLigne & "C3"
        ActiveChart.SeriesCollection(3).XValues = "='BB Duration'!R36C3:R" & DerniereLigne & "C3"
        ActiveChart.SeriesCollection(4).XValues = "='BB Duration'!R36C3:R" & DerniereLigne & "C3"
     
     
    End Function


    J'ai mainteant un autre petit probleme ...
    lorsque depuis la feuille ou ce trouve le graphique j'execute la fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CommandButton1_Click()
     
    Refraichir_Graph_BB
    MsgBox ("Graphique mis a jour")
    Range("A1").Select
    End Sub
    Cela marche tres bien

    mais si j'execute d'une autre feuille en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton2_Click()
    'ActiveWorkbook.RefreshAll
     
    Refraichir_Graph_BB
    MsgBox ("Graphique mis a jour")
    Range("A1").Select
    End Sub

    il me met 1 erreur dans le module 1 sur la fonction : cellule_tout_vide
    a la ligne
    avec une erreur de type :
    Erreur d'execution '13' :
    Incompatibilité de type

    je vois pas pourquoi .. sachant que si je lance cette fonction dans la feuille d'origine du graph cela marche mais si je l appel depuis 1 autre feuille non ...

  7. #7
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    je pense qu'il te renvoie cette erreur car tu te trouve sur une feuille ne contenant qu'un graphique, donc pas de cellule ...

  8. #8
    Membre habitué
    Inscrit en
    Mai 2002
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 163
    Points : 173
    Points
    173
    Par défaut
    dans ton appel de fonction,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cellule_tout_vide(Range("d36:d" & DerniereLigne & "")) = False Then
    tu devrai spécifié le nom ou le numéro de la feuille, du style

    worksheets(1).range (1 ou x pour le numéro ...)
    ou
    wokrsheets("le nom de la feuille").range ...

Discussions similaires

  1. Mise a jour automatique sur excel?
    Par fredieuric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2006, 13h41
  2. mise a jour automatique table
    Par loady dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 08/09/2006, 12h26
  3. Mise a jour automatiques sous win xp
    Par remi77 dans le forum Windows XP
    Réponses: 7
    Dernier message: 02/06/2006, 11h14
  4. probleme de mise a jour automatique de windowd XP
    Par blandinais dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/12/2005, 00h39
  5. Réponses: 15
    Dernier message: 30/06/2005, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo