Ignorer les cellules vides

cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 - 27 juin 2008 à 17:07
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008 - 28 juin 2008 à 18:28
Bonjour à tous,

Je travaille sous Excel et je commence à m'arracher les cheveux...
Voilà mon soucis:

J'ai crée une macro qui trace un graphique tout simple à partir de données (des valeurs chiffrées ordinaires) qui sont entrées sur une ligne (A13 jusqu'à P13).
J'ai aussi demandé dans ma macro qu'un courbe de tendance soit tracée.
Mes problèmes:

1- Comment puis je lui dire de ne pas tracer cette courbe de tendance si les dernières cellules sont vides? En effet, si par exemple les cellules M13 à P13 ne contiennent aucune valeurs cela fausse la courbe de tendance (qui est une polynomiale).  Dépendament du degrès choisi celle ci fait un pic vers le haut ou vers le bas...ce qui fausse pas mal le résultat!

2- Si par hasard la cellule B13 (au milieu des autres) ne contient aucune valeur, comment faire pour que lors du tracage du graph, cette cellule vide soit ignorée?

Merci d'avance à tous.

Pafacile

12 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2008 à 17:35
Salut,

dans ton cas tu n'auras pas d'autre choix que de creer un tableau de donnés intermediaire que tu vas creer en prenant soin d'enlever toute les cellules vide.
Cela peu se faire avec du VBA si tu ne veux pas le faire a la main

A+
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
27 juin 2008 à 17:47
Bonjour Bigfish-le vrai

Merci.
Ok pour le code, en fait j'avais commencé mais il me sort des erreurs et je ne suis pas assez bonne pour les corriger.

Je sais coder en C++ mais en VBA, je ne m'y retrouve pas au niveau des structures

Je suppose que je dois parcourir le tableau actuel abvec une boucle for et introduire un if else... je suis un peu perdue.

Pourrais tu, toi ou un autre, m'indiquer une structure.. j'ai cherché sur le net mais ca marche po!

Merci encore,

Pafacile
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2008 à 17:55
...
cela me parait plus compliqué que de me donner le code que tu as deja commencer. cela me permetra aussi de connaitre la position et la taille de ton tableau source.

A+
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
27 juin 2008 à 18:36
Comment puis-joindre mon fichier?

pafacile
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2008 à 18:54
...
tu ne peux pas. Fait juste un copier coller de la partie qui nous interesses
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
27 juin 2008 à 19:57
Sub Macro3()
'
' Macro3 Macro
' Macro enregistrée le 2008-06-26 par marhad
'


  
   
   
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("DONNEES").Range("A12:O13"), PlotBy _
        :=xlRows
        Application.DisplayAlerts = False
    If WsExist("Nx 10 coups") Then
        Sheets("Nx 10 coups").Delete
    End If
    Application.DisplayAlerts = True
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Nx 10 coups"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Qualité de l'anti-reflet"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    ActiveChart.PlotArea.Select
    With Selection.Border
        .ColorIndex = 16
        .Weight = xlThin
        .LineStyle = xlContinuous
    End With
    Selection.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=2
    With Selection
        .Fill.Visible = True
        .Fill.ForeColor.SchemeColor = 3
        .Fill.BackColor.SchemeColor = 4
    End With
   
   
   
    Dim I As Integer
    For I = 1 To 255
    If Cells(13, I) = "" Then


    Else
        ActiveChart.SeriesCollection(1).Select
        ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlPolynomial, Order:=3 _
        , Forward:=0, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
        False).Select
    End If
    Next I
   
   
   


End Sub




Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Sheets(Nom).Index
End Function
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
27 juin 2008 à 19:57
Merci encore de t'interesser à mon problème...

pafacile
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
27 juin 2008 à 20:12
...
encore une petite precision dans ton tableau on peut trouver une cellules vide par-ci par-la ou sera systematiquement une colonne entiere ou une ligne entiere ?

Effectivement... pafacile !
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
27 juin 2008 à 20:21
En fait ce n'est qu'une grande ligne de données... Mais, en effet, il se peut que certaines cellules soient vides, que ce soit au milieu des données ou à la fin de celles ci....
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
28 juin 2008 à 06:02
...
finalement j' ai peut etre bien fait de temporiser un peu, car il me semblait qu'une propriete pour ce type de cas existait. Je te propose donc une autre solution(en bleu dans le code)

Sub Macro3()
'
' Macro3 Macro
' Macro enregistrée le 2008-06-26 par marhad
'

    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("DONNEES").Range("A12:O13"), PlotBy _
        :=xlRows
        Application.DisplayAlerts = False
    If WsExist("Nx 10 coups") Then
        Sheets("Nx 10 coups").Delete
    End If
    Application.DisplayAlerts = True
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Nx 10 coups"
    With ActiveChart
        .DisplayBlanksAs = xlInterpolated
        .HasTitle = True
        .ChartTitle.Characters.Text = "Qualité de l'anti-reflet"
        .Axes(xlCategory, xlPrimary).HasTitle = False
        .Axes(xlValue, xlPrimary).HasTitle = False
    End With
    ActiveChart.PlotArea.Select
    With Selection.Border
        .ColorIndex = 16
        .Weight = xlThin
        .LineStyle = xlContinuous
    End With
    Selection.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=2
    With Selection
        .Fill.Visible = True
        .Fill.ForeColor.SchemeColor = 3
        .Fill.BackColor.SchemeColor = 4
    End With
   
   
   
    Dim I As Integer
    For I = 1 To 255
    If Cells(13, I) = "" Then

    Else
        ActiveChart.SeriesCollection(1).Select
        ActiveChart.SeriesCollection(1).Trendlines.Add(Type:=xlPolynomial, Order:=3 _
        , Forward:=0, Backward:=0, DisplayEquation:=False, DisplayRSquared:= _
        False).Select
    End If
    Next I
   
End Sub

trois constantes possible pour cette propriete : xlNotPlotted, xlInterpolated, or xlZero

Si cela ne te convient pas revient et on regardera une solution plus classique.

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
28 juin 2008 à 06:31
...
ah oui, je viens de faire un petit tour sur CS et du coup j' ai remarque que tu n'as pas postee dans le bon theme.
Pour le VBA c'est par ici :

Thèmes / Visual Basic 6 / Langages dérivés / VBA

A+
0
cs_pafacile Messages postés 30 Date d'inscription vendredi 27 juin 2008 Statut Membre Dernière intervention 22 juillet 2008
28 juin 2008 à 18:28
Merci de ton aide.
J'essaie et je te donne des nouvelles.

À bientôt,

Pafacile
0
Rejoignez-nous