VBAexcel Plage avec dernière colonne inconnue

The Flow -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

Lorsque je cherche à sélectionner un plage avec comme inconnue ma dernière ligne utilisée, j'utilise le code suivant.
    Dim LastRow As Long
    With ActiveSheet
    LastRow = .Cells(.Row.Count, "A").End(xlDown).Row
    End With
    Range("B29:D" & LastRow).Select


Je souhaite maintenant sélectionner une plage avec comme inconnue ma dernière colonne remplie en vue d'actualiser la source d'un graphique. L'info doit se présenter sous la forme :
ActiveChart.SetSourceData Source:=Sheets("blabla").Range(B29:X32)


Voici ma modeste tentative :
    Dim LastColumnGraph As Long
    With ActiveSheet
    LastColumnGraph = .Cells(.Columns.Count, "B").End(xlToRight).Column
    End With
    
    Sheets("blabla").Select
    ActiveSheet.ChartObjects("Graphique 5").Activate
    ActiveChart.PlotArea.Select
    ActiveChart.SetSourceData Source:=Range("B29:" & LastColumnGraph & "32"), _
        PlotBy:=xlRows
    ActiveWorkbook.Save
    ActiveSheet.ChartObjects("Graphique 5").Activate


Je serai ravis de bénéficier de votre aide :) Merci à tous ceux qui prendront la peine de m'aider !
Configuration: Windows XP
Firefox 3.5.2

6 réponses

  1. melanie1324
     
    Bonsoir,

    pour que ce code marche, choisis la ligne ou tu as toujours une donnée.
    i= 1 'valeur de ta ligne
    j=1 'valeur de ta colonne

    cells(i,j).select
    do while selection <> ""
    j=j+1
    cells(i,j).select
    loop

    'de même avec ta ligne

    cells(i,j).select
    do while selection <>""
    i=i+1
    cells(i,j).select
    loop

    ActiveChart.SetSourceData Source:=Sheets("blabla").Range(cells(1,1),cells(i,j))
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonsoir

    Le point de départ de tes données semble être B29 ? si oui

    Dim LastRow As Long, LastColumn As Long
    
        With ActiveSheet
            LastRow = .Range("B29").End(xlDown).Row
            lastcolumn = .Range("B29").End(xlToRight).Column
        End With
        
        '....début de la partie graph
         ActiveChart.SetSourceData Source:=Range(Cells(29, 2), Cells(LastRow, lastcolumn))
         '...suite de ta partie graph
    0
  3. The Flow
     
    Merci de m'avoir répondu aussi rapidement.

    J'ai testé vos deux propositions sans succès. Le déboggeur me renvoie une erreur 1004 à la ligne " ActiveChart.SetSourceData Source:=Sheets("Sources").Range(Cells(1, 1), Cells(i, j)), _
    PlotBy:=xlRows".
    Le message d'erreur indique : la méthode 'Cells' de l'objet'_Global' a échoué.

    Voici mes codes :

    Sheets("Sources").Select
    
    i = 1 'valeur de ta ligne
    j = 1 'valeur de ta colonne
    
    Cells(i, j).Select
    Do While Selection <> ""
    j = j + 1
    Cells(i, j).Select
    Loop
    
    'de même avec ta ligne
    
    Cells(i, j).Select
    Do While Selection <> ""
    i = i + 1
    Cells(i, j).Select
    Loop
    
        Sheets("CEL_HEBDO").Select
        ActiveSheet.ChartObjects("Graphique 5").Activate
        ActiveChart.PlotArea.Select
        ActiveChart.SetSourceData Source:=Sheets("Sources").Range(Cells(1, 1), Cells(i, j)), _
            PlotBy:=xlRows
        ActiveWorkbook.Save
        ActiveSheet.ChartObjects("Graphique 5").Activate
        
    End Sub


    Sub test()
    
    Dim LastRow As Long, LastColumn As Long
    
        Sheets("Sources").Select
    
        Dim LastRowGraph As Long, LastColumnGraph As Long
        With ActiveSheet
            LastRowGraph = .Range("B29").End(xlDown).Row
            LastColumnGraph = .Range("B29").End(xlToRight).Column
        End With
        
        Sheets("CEL_HEBDO").Select
        ActiveSheet.ChartObjects("Graphique 5").Activate
        ActiveChart.PlotArea.Select
        ActiveChart.SetSourceData Source:=Sheets("Source").Range(Cells(29, 2), Cells(LastRowGraph, LastColumnGraph)), _
            PlotBy:=xlRows
        ActiveWorkbook.Save
        ActiveSheet.ChartObjects("Graphique 5").Activate
    End Sub
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Dans la solution 2 tu as des orthographes différentes pour "source"...

    Si seul, le nbre de col est variable, tu n'as pas besoin de macro...

    il serait intéressant que tu mettes en PJ au format xls la feuille "source" sur cjoint.com
    https://www.cjoint.com/
    et tu colles le lien proposé dans ton message
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. The Flow
     
    Après avoir corrigé la faute, elle n'est pas à l'origine du problème.

    Alors que lorsque je tape ce code, je parviens à sélectionner la zone de mon choix (attention les cellules ont changé) :
         Sheets("Sources").Select
        Range("A5", Range("A8").End(xlToRight)).Select


    Lorsque j'essaie de l'intégrer dans mon code d'actualisation du tableau, cela génère une erreur :

        Sheets("Sources").Select
        Range("A5", Range("A8").End(xlToRight)).Select
    
    
        Sheets("CEL_HEBDO").Select
        ActiveSheet.ChartObjects("Graphique 5").Activate
        ActiveChart.PlotArea.Select
        ActiveChart.SetSourceData Source:=Sheets("Sources").Range("A5", Range("A8").End(xlToRight)), _
            PlotBy:=xlRows
        ActiveWorkbook.Save
        ActiveSheet.ChartObjects("Graphique 5").Activate
        
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    je viens d'essayer cette ligne:
    Range("A5", Range("A8").End(xlToRight)).Select
    te sélectionne uniquement A5:A8...

    Regarde la méthode SANS VBA sur ce site:
    http://boisgontierjacques.free.fr/
    0