VBA déclaration d'intervalle

Bonjour,

j'ai un tableau de données groupé et une macro lié à celui ci. Cependant, je n'arrive pas à déclarer des intervalle de données dans ma macro avec la fonction range.

Set table =Activesheet.range("A1:C6")

Quand je l'écris de cette façon ma macro s'applique bien sur ces données mais par contre si j'écris

Set table =Activesheet.range("A1:C6, A8:C12") cela ne fonctionne que sur le premier intervalle (A1:C6) mais pas sur le deuxième.

Je suis débutante en VBA et je n'arrive pas à trouver comment je peux faire. J'aurais environ 15 intervalles de données à déclarer et pas forcément de la même taille.

Merci d'avance pour vos réponses

Cordialement

Julie

Bonjour Julie et

Le problème c'est qu'on ne sait pas ce que tu vas faire ensuite de cette "plage" ... si tu écris

Table.Interior.ColorIndex = 3

juste après ton Set Table= ... il y a bien une plage correspondant à ton affectation qui est colorée.

Il faut donc que tu nous en dises un peu plus (... voire même que tu joignes un fichier qui illustre la situation, avec ton code complet et quelques explications sur ce que tu cherches à faire)

Bonjour,

Lorsque la fonction Range associe des plages discontinues, il faut utiliser une boucle de ce type pour récupérer l'ensemble des plages :

    Dim Table As Range, plage As Range

    Set Table = ActiveSheet.Range("A1:C6, A8:C12")
    For Each plage In Table.Areas
        plage.Interior.ColorIndex = 3
    Next plage

Bonjour,

Merci de votre aide.

Le code est le suivant en fait le but de cette macro est de coloré mon graphique en fonction des valeurs. C'est au niveau de la fonction set table que ça pêche et en étant débutante c'est pas évident pour moi.

Sub colorisation()

Dim graph As ChartObject

Dim table As Range

Set table = ActiveSheet.Range("A1:C4")

With ActiveChart.SeriesCollection(1)

.Interior.Color = RGB(0, 255, 0)

End With

Application.ScreenUpdating = False

For Each graph In ActiveSheet.ChartObjects

For i = 1 To table.Rows.Count

If table.Cells(i, 2).Value > 0.037 Then

graph.Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = 3

End If

Next i

Next graph

Application.ScreenUpdating = True

End Sub

Bonsoir,

Je pense que ce code devrait mieux convenir. Cela dit, sans fichier, ce ne peut être qu'une indication.

Sub colorisation()

    Dim graphe As ChartObject
    Dim tb()

    With ActiveChart.SeriesCollection(1)
        .MarkerForegroundColor= RGB(0, 255, 0)
    End With

    Application.ScreenUpdating = False
    For Each graphe In ActiveSheet.ChartObjects
        With graphe.Chart.SeriesCollection(1)
            tb = .Values
            For i = 1 To UBound(tb)
                If tb(i) > 0.037 Then
                    .Points(i).MarkerForegroundColorIndex = 3
                End If
            Next i
        End With
    Next graphe
    Application.ScreenUpdating = True

End Sub

Puisque vous êtes débutante, apprenez à indenter votre code, ce qui le rendra beaucoup plus lisible par tous et au niveau des posts utilisez la balise "</>".

Bonjour,

Je vous joins le fichier cela sera peut être plus parlant pour vous, hier soir je n'y avais pas accès.

36test-ok.xlsm (26.33 Ko)

Je vous remercie pour votre aide.

Bonjour à tous,

petit soucis :

capture d ecran 113

Après avoir corrigé le problème ci-dessus, essaie néanmoins de remplacer

For i = 1 To table.Rows.Count

par

for each cell in table

exemple

Sub test()

Dim table As Range
Set table = ActiveSheet.Range("A1:C6, A8:C12")

For Each cell In table
Debug.Print cell.Address
Next

End Sub
capture d ecran 114

Bonjour,

Merci de votre réponse.

Cela ne fonctionne pas :/.

En fait mon problème c'est que je n'arrive pas à appliquer la macro sur une suite d'intervalle de données. Dans mon exemple, j'aimerais que cela fonctionne à la fois sur l'intervalle A1:C5 et A6:C10. Dans mon fichier que je remets ci dessous nous voyons que la couleur rouge ne s'applique que sur le premier intervalle.

Merci

8test-ok.xlsm (20.60 Ko)

Cela fonctionne chez moi avec Set table = ActiveSheet.Range("A1:C5, A6:C10")

J'ai du virer le début de la macro car c'est elle qui me donnait l'erreur ! dû à ceci ActiveChart.SeriesCollection(1) ...

Sub colorisation()

Dim graph As ChartObject
Dim table As Range
Set table = ActiveSheet.Range("A1:C5, A6:C10")

Application.ScreenUpdating = False
For Each graph In ActiveSheet.ChartObjects
For i = 1 To table.Rows.Count
If table.Cells(i, 2).Value > 0.037 Then
graph.Chart.SeriesCollection(1).Points(i).Interior.ColorIndex = 3
End If
Next i
Next graph
Application.ScreenUpdating = True

End Sub
12test-ok.xlsm (20.36 Ko)

bonjour à tous

ai-je compris que tu mets en couleurs un indicateur ?

rouge si NOK, vert si OK

sans VBA

créer une colonne Vert

=SI(tavaleurestOK;tavaleur;0)

et une Rouge

=SI(tavaleurestNOK;0;tavaleur)

c'est tout

tu traces ensuite un graphique empilé et tu mets définitivement en couleur chaque série

c'est en effet plus simple ! et pérenne ... sans VBA !

re

Steelson,

quand on pense VBA c'est qu'on n'a pas posé la bonne question

VBA c'est le petit couteau pointu qui sert à tout

mais Excel fournit une boîte à outils digne de la NASA. Ouvrons la boîte !

le petit couteau ne sert plus qu'à couper le saucisson entre copains.

on voit que les excellien(ne)s posent un titre "VBA déclaration d'intervalle" au lieu de "je veux faire un indicateur". Choisir l'outil a priori est une erreur grave !

il faut toujours demander quel est le BUT.

Bonjour,

Merci pour vos réponses. Je voulais passer par le VBA car je n'ai pas la possibilité d'ajouter une colonne vert et rouge comme JMD expliquait. Effectivement je suis d'accord que c'est beaucoup plus simple comme ceci.

Je vais voir pour faire autrement. Merci quand même

Bonjour,

A priori, ce code fonctionne :

Sub colorisation()

    Dim graphe As ChartObject
    Dim tb()

    Application.ScreenUpdating = False
    For Each graphe In ActiveSheet.ChartObjects
        With graphe.Chart.SeriesCollection(1)
            .Interior.Color = RGB(0, 255, 0)
            tb = .Values
            For i = 1 To UBound(tb)
                If tb(i) > 0.037 Then
                    .Points(i).Interior.ColorIndex = 3
                End If
            Next i
        End With
    Next graphe
    Application.ScreenUpdating = True

End Sub

Bonjour,

Merciiiiiiiiiiiiiiiiiiiiiiiii infiniment c'est top !!!

Rechercher des sujets similaires à "vba declaration intervalle"