[VB EXCEL] erreur la méthode 'Range'...

Hey_you Messages postés 2 Statut Membre -  
thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux compter le nombre de lignes de mon tableau, à chaque modification d'une feuille du classeur.
Lorsque je lance sur Excel 2007, la ligne 2 plante avec l'erreur suivante "La méthode 'Range' de l'objet '_Worksheet' a échoué". Par contre, je ne rencontre pas ce problème sur Excel 2003.

1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

2. nbcell = ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion.Rows.Count
....
End Sub

Sauriez-vous d'où vient le problème?

Merci d'avance pour votre aide.

4 réponses

  1. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    Si c'est pour compter le nombre de lignes, j'utiliserai plutôt l'instruction :

    nb_lignes = ActiveSheet.Usedrange.Rows.Count
    0
  2. Hey_you Messages postés 2 Statut Membre
     
    Mmm. Non ça ne change pas grand chose.
    Là maintenant je rencontre le même problème mais plus loin (ligne 12).
    De plus, certaines lignes de mon tableau sont quadrillées, avec ta soluce, sont comptées même les lignes vides mais qui sont quadrillées. Je ne veux compter que les lignes non vide.

    1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    2. nbcell = ThisWorkbook.ActiveSheet.UsedRange.Rows.Count

    3. If nbcell > 3 Then
    4. For k = 4 To nbcell
    5. MyD = "D" & k
    6. MyE = "E" & k
    7. MyF = "F" & k

    8. j = k
    9. trait = False
    10. entree = 0
    11. sortie = 0

    12. If IsNumeric(ThisWorkbook.ActiveSheet.Range(MyD).Value) Then
    13. sortie = ThisWorkbook.ActiveSheet.Range(MyD).Value
    14. trait = True
    15. End If
    16. If IsNumeric(ThisWorkbook.ActiveSheet.Range(MyE).Value) Then
    17. entree = ThisWorkbook.ActiveSheet.Range(MyE).Value
    18. trait = True
    19. End If
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    1°) Pourquoi ne pas se servir des données "gratuites" ?; Voir Sh
    2°) Usedrange.Rows.Count foncionne sous Xl2000
    mais sur le 2007 c'est le nombre de ligne non vide qui est renseigné (mais pas a partir de 1.
    Ex: données dans D4,D5
    en 2000 NbCell = 6
    en 2007 NbCell = 2
    Je ne sais pas ce que tu fais avec les résultats, ta macro n'est pas complète mais cet exemple fonctionne sur Xl 2000 et 2007
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) 
    Dim sortie, trait As Boolean, Lig As Long, Entree 
        With Sh 
        For Lig = 4 To .Range("A1").SpecialCells(xlCellTypeLastCell).Row 
            If IsNumeric(.Cells(Lig, "D")) And .Cells(Lig, "D") <> "" Then 
                'Traitement ... 
                sortie = .Cells(Lig, "D").Value 
                trait = True 
            Else 
                sortie = 0: trait = False: Entree = 0 
            End If 
            If IsNumeric(.Cells(Lig, "E")) And .Cells(Lig, "E") Then 
                'Traitement ... 
                sortie = .Cells(Lig, "E").Value 
                trait = True 
            Else 
                sortie = 0: trait = False: Entree = 0 
            End If 
        Next Lig 
        End With 
    End Sub

    A+

    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  4. thev Messages postés 2010 Date d'inscription   Statut Membre Dernière intervention   723
     
    
    nblig_vides = 0
    On Error Resume Next
    nblig_vides = ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Rows.Count
    On Error GoTo 0
    
    nb_lignes_remplies  = ActiveSheet.UsedRange.Rows.Count - nblig_vides 
    
    0