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
 

Lone-wolf

XLDnaute Barbatruc
Bonjour babalouche

VB:
For c = 2 To UsedRange.Rows.Count
If Cells(c, Col) <> "" Then
cels = Application.WorksheetFunction.CountA(Cells(c, Col))
End If
Next c
 
Dernière édition:

babalouche

XLDnaute Nouveau
Merci d'une réponse aussi vite mais à la ligne du if j'obtiens une erreur 1004 la méthode 'cells' de l'objet'_global' a échoué
 

babalouche

XLDnaute Nouveau
bonjour dranreb mais cette formule c'est pour compter le nombre de ligne totale ?
Dans mon tableau on peut avoir des lignes sans valeur mais après avoir une valeur
 

Lone-wolf

XLDnaute Barbatruc
Re babalouche, bonjour Dranreb :)


VB:
Dim plage As Range, x&

  x = Range("a" & Rows.Count).End(xlUp).Row
  Set plage = Range("a2:e" & x)    ' À modifier
  cels = WorksheetFunction.CountA(plage)
 
Dernière édition:

babalouche

XLDnaute Nouveau
Merci de ta réponse lone-wolf mais à la fin cels aura la valeur du nombre de données mais du tableau entier ou que d'une colonne ?
 

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:

babalouche

XLDnaute Nouveau
C'est quoi le code avant et après votre ligne ?
J'obtiens une erreur 13 incompatibilité de type en mettant NbCelRens as double
 

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
 

babalouche

XLDnaute Nouveau
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
    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)
    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)
        End If
    Next Col
End Sub
Avec l'aide de Dranreb j'avais obtenu ce code pour ma macro à faire les graphiques où une colonne apparaissait pour un graphique et maintenant la modification du type de graphique entraîne plus de légendes précises sauf pour le premier graphique plus de titre et j'ai des problèmes encore avec le compteur de données qui marche pas toujours bien pour faire le type de graphique. J'ai à chaque graphique les données précedentes et les données de la nouvelle colonne je comprends pas
 

Discussions similaires


Haut Bas