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 :

Range comprenant 1 cellule sur 2 pour valeurs d'un graphique [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2014
    Messages : 41
    Par défaut Range comprenant 1 cellule sur 2 pour valeurs d'un graphique
    Bonjour à tous,

    Je débute toujours sous VBA et je suis confronté à un nouveau problème.

    Voilà, j'ai une feuille avec des data mises à jours automatiquement et j'aimerai afficher un graphe qui prenne en compte toutes les data. La solution la plus simple que j'ai réussi à coder est la supression du tableau précédemment existant et la création d'un nouveau prenant en compte les anciennes data plus celles ajoutées dernièrement, ce qui donne quelque chose comme ça:


    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
    Sub reporting4()
    Dim DerColonne As Integer
    Dim c As ChartObject
    
    Sheets("Reporting").ChartObjects("Graphique 1").Delete
    
    Set c = Sheets("Reporting").ChartObjects.Add(180, 215, 520, 200)
    DerColonne = Range("IV2").End(xlToLeft).Column
    c.Name = "Graphique 1"
    
    With c.Chart
        .SetSourceData Source:=Range(Cells(15, 3), Cells(15, DerColonne))
        .SeriesCollection(1).XValues = Range(Cells(2, 3), Cells(2, DerColonne))
        .Legend.Delete
        .Axes(xlValue).MaximumScale = 35
        .SeriesCollection.NewSeries
        .SeriesCollection(2).Values = _
            "=Reporting!$C$47,Reporting!$E$47,Reporting!$G$47"    
        .SeriesCollection(2).ChartType = xlLineMarkersStacked
        .SeriesCollection(1).ApplyDataLabels
        .SeriesCollection(2).ApplyDataLabels
    End With
    
    End Sub
    Or comme vous le voyez, la ligne en rouge ne prend pas en compte les modifications et à juste titre car je ne sais pas comment définir le range pour qu'il prenne une cellule sur deux d'une ligne connue.

    Je sais que je commence à la cellule C47 puis E47 puis G47 ... jusqu'à Range("IV47").End(xlToLeft).Column

    Est ce que vous avez une solution pour que je puisse définir ce range? J'ai lu sur d'autre forums que certains utilisaient la fonction DECALER mais je n'ai pas compris comment l'appliquer sur ce problème.

    Merci par avance,
    YanBos

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Une solution est de définir "SeriesCollection(2).Values" en utilisant la notation RC ou LC pour une version française.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim CollectVal As String
    Dim i As Integer
      CollectVal = "="
      For i = 3 To 255 Step 2 '  Colonnes C à IV
        CollectVal = CollectVal & "Reporting!L47C" & i
        If i < 255 Then CollectVal = CollectVal & ","
      Next i
    Mais cela risque de coincer à cause de la longueur de la chaine de caractère.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut une solution
    Bonjour
    la solution dans ton cas serait peut etre de te servir de variables tableau claqués sur une plage en syndant les non desirées

    exemple
    ca devrait être un truc du genre mais pas testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim tablo1,tablo2,e,i
    tablo1=range("A1:A100")
    le tablo2 fera normalement la moitie donc 50
    redim tablo2(ubound(tablo1)/2)
    for e = 0 to lbound (tablo1)-1step2
    i=i+1
    tablo2(i)=tablo1(e)
    next
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2014
    Messages : 41
    Par défaut
    Hello à tous,

    Après une bonne heure et demie passée dessus, je suis rendu au point où j'essaye n'importe quoi en espérant un miracle... et plus j'essaye, moins je comprends!

    En fait un des trucs que je n'arrive pas à comprendre est que le code suivant me renvoie 1 alors que dans mon esprit il devrait me renvoyer 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim tablo1()
    tablo1 = Range("C47:N47")
    MsgBox UBound(tablo1)
    J'ai essayé également ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim tablo1()
    For i = 1 To Range("IV47").End(xlToLeft).Column
    tablo1(i) = Cells(47, i + 2)
    Next i
    Mais je tombe direct sur une erreur "Out of Range". J'ai essayé avec des Option Base 0 et Option Base 1, même combat.

    Quant à la première option, jai passé moins de temps dessus mais j'avais un problème au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .SeriesCollection(2).Values = CollectVal

    J'imagine que je suis en train de passer à côté de qqch de basique mais je n'ai vraiment plus aucune idée.

    Merci par avance,
    YanBos

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2014
    Messages : 41
    Par défaut Eurêka
    Il suffisait que je poste pour trouver la réponse...

    En fait mon tableau tablo est à 2 dimensions...
    Ce qui fait que le code gagnant est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    tablo1 = Range("C47:N47")
    MsgBox UBound(tablo1, 2)
     
    ReDim tablo2(UBound(tablo1, 2) / 2)
    MsgBox UBound(tablo2)
     
    For i = 1 To UBound(tablo2)
        tablo2(i) = tablo1(1, e)
        e = e + 2
    Next i
    Merci bien pour votre aide, je coche le sujet comme résolu mais si vous avez des infos concernant la 1ère méthode je suis preneur.

    Bonne soirée,
    YanBos

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Progamme VBA pour remplissage de cellule en couleur pour valeur famille de 1000 a 9000
    Par gabigabou dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/05/2014, 14h26
  2. Macro pour recherche valeur dans plage de cellules sur 2 colonnes.
    Par bipol51430 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/05/2014, 10h43
  3. [XL-2010] Sélection cellules non vides pour création d'un graphique
    Par seboboch dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/11/2011, 16h12
  4. [Excel] Affichage d'une cellule ayant pour valeur 0
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2006, 10h38

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