Ignorer les cellules vides

Signaler
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008
-
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008
-
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

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
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+
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

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
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
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+
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

Comment puis-joindre mon fichier?

pafacile
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
tu ne peux pas. Fait juste un copier coller de la partie qui nous interesses
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

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
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

Merci encore de t'interesser à mon problème...

pafacile
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
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 !
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

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....
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
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+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...
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+
Messages postés
30
Date d'inscription
vendredi 27 juin 2008
Statut
Membre
Dernière intervention
22 juillet 2008

Merci de ton aide.
J'essaie et je te donne des nouvelles.

À bientôt,

Pafacile