problème pour compter le nombre de cellules non vides

babalouche

XLDnaute Nouveau
Bonjour le forum,
j'ai deux fichiers excel l'un contenant la macro et l'autre un tableau variable où je souhaiterais faire des graphiques avec. Pour cette partie on m'a déjà aidé pour les problèmes que j'ai eu sauf que j'aimerais mettre des conditions sur les graphiques (type de graphe principalement). Le type de graphe se ferait selon le nombre de données dans une même colonne mais je n'arrive pas à avoir cette valeur là.
En gras c'est ma boucle pour savoir le nombre de données par colonne.
voici mon code :

Option Explicit
Sub Workbook_Open()
Dim Wbk As Workbook, Cht As Chart, RngTit As Range, RngDon As Range, _
ColDate As Long, Col As Long, Sér As Series, ligne As Double, cels As Double, c As Double
For Each Wbk In Application.Workbooks
If Wbk.Name <> ThisWorkbook.Name Then Exit For
Next Wbk
Set RngDon = Wbk.Worksheets(1).UsedRange
For ColDate = 1 To RngDon.Columns.Count
If IsDate(RngDon(2, ColDate).Value) Then Exit For
Next ColDate
If ColDate > RngDon.Columns.Count Then
ColDate = 1
End If
Set RngTit = RngDon.Rows(1)
Set RngDon = RngDon.Rows(2).Resize(RngDon.Rows.Count - 1)
Wbk.Worksheets(1).Activate
ligne = Application.WorksheetFunction.CountA(Columns(1))
For Col = 1 To RngTit.Columns.Count
If Col <> ColDate Then
Set Cht = Wbk.Charts.Add
Set Sér = Cht.SeriesCollection.NewSeries
Sér.Name = RngTit.Columns(Col)
Sér.XValues = RngDon.Columns(ColDate)
Sér.Values = RngDon.Columns(Col)
cels = O
For c = 2 To ligne
If Cells(c, Col) <> "" Then
cels = cels + 1
End If
Next c

If cels > 10 Then
Cht.ChartType = xlLine
End If
If cels > 6 Then
Cht.ChartType = xlPie
End If
End If
Next Col
End Sub
 

Dranreb

XLDnaute Barbatruc
D'accord. Essayez :
VB:
NbCelRens = NbCelRens + RngDon.Rows.Count - RngDon.Columns(Col).SpecialCells(xlCellTypeBlanks)

Edition: ou bien oui, plus simplement :
VB:
NbCelRens = NbCelRens + WorksheetFunction.CountA(RngDon.Columns(Col))

Edition2: Mais non, je ne me rappelle jamais qu'il n'y a qu'une série par graphique. Pourquoi ne faites vous pas tout simplement un
Select Case WorksheetFunction.CountA(RngDon.Columns(Col)) ?
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

Tu as bien mis Cells(c, Col) et tu dis "En gras c'est ma boucle pour savoir le nombre de données par colonne". Je suppose qu'il y a plusieurs colonnes. Donc ma macro, comme tu peux le voir, va de la colonne A à la colonne E. À toi d'adapter la plage.

Et si il y a des cellules vides

VB:
Dim plage As Range, cel As Range, x&

x = Range("a" & Rows.Count).End(xlUp).Row
Set plage = Range("a2:e" & x)       'À modifier

For each cel in plage
if cel <> vbnullstring Then cels = WorksheetFunction.CountA(plage)
Next cel
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Vous devriez nous rendre plus lisibles les bout de code que vous reproduisez. Utilisez la commande Insérer, Code.
Ce qu'il vous faut à la fin c'est ça je crois :
VB:
   Select Case WorksheetFunction.CountA(RngDon.Columns(Col))
      Case Is > 10: Cht.ChartType = xlLine
      Case Is > 6: Cht.ChartType = xlPie
      End Select
   Next Col
End Sub
 

babalouche

XLDnaute Nouveau
merci bien déjà j'ai quand même quelques problèmes par rapport aux légendes des graphes et le titre qui n'est plus là et que je doit avoir un camembert quand j'ai entre 6 et 10 données et au dessus de 10 une courbe sinon des histogrammes donc pour eux pas besoin de modifier
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 902
Membres
101 834
dernier inscrit
Jeremy06510