IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme avec .count [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Probleme avec .count
    Chères amies, chers amis du forum

    Comme d'habitude j'utilise ce bout de code pour compter le nombre de ligne et de colonne d'un range:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim Nrow as long
    dim Ncol as long
     
    Nrow = Range(.Cells(4, 1), Cells(4, 1).End(xlDown)).Count + 1
    Ncol = Range(.Cells(4, 1), Cells(4, 1).End(xlToRight)).Count + 1
    Cependant systématiquement il manque 3 ligne. Alors je pourrais faire + 4 mais j’aimerais comprendre car cela peux s’aggraver ou ce modifier.

    Merci

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La propriété Count de l'objet Range, compte le nombre de cellules d'une plage
    Donc imaginons que tu aies une plage de A1:M10 et que tu remplaces, la propriété Count par Address comme l'exemple ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Print Range(.Cells(4, 1), Cells(4, 1).End(xlDown)).Address
    Debug.Print Range(.Cells(4, 1), Cells(4, 1).End(xlToRight)).Address
    La première ligne va afficher $A$4:$A$10 et la seconde $A$4:$M$4
    Ce qui avec la propriété Count donnerait 7 et 13
    Or si j'ai bien compris, tu souhaites connaître le nombre de lignes et de colonnes de cette plage.
    Alors et même si dans ce cas précis le résultat est le même, il serait préférable d'utiliser les propriétés Count des collections Rows et Columns
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Nrow = Range(.Cells(4, 1), Cells(4, 1).End(xlDown)).Rows.Count
      Ncol = Range(.Cells(4, 1), Cells(4, 1).End(xlToRight)).Columns.Count
    Maintenant, il y a un autre soucis dans ton code. Tu as fait précéder par un point l'objet Cells(4, 1), cela sous-entends donc que tu as imbriqué tes lignes dans un bloc With dont l'objet de référence est le Parent de l'objet Range soit au moins la feuille. Les autres objets de ta ligne eux ne sont pas précédé d'un point ce qui peut amener un renvoi d'erreur si la feuille active n'est pas celle de la plage de référence.
    La syntaxe exacte devrait donc être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     Dim Nrow As Long, Ncol As Long
     With Worksheets("db")
      Nrow = .Range(.Cells(4, 1), .Cells(4, 1).End(xlDown)).Rows.Count
      Ncol = .Range(.Cells(4, 1), .Cells(4, 1).End(xlToRight)).Columns.Count
     End With
     Debug.Print Nrow & " - " & Ncol
    End Sub
    Si le résultat escompté n'est pas ce que tu souhaites, il faudrait expliquer ce que tu attends
    [EDIT]
    Par exemple si tu souhaites avoir le n° de la dernière ligne de la plage A4:M10 calculée à partir de A4, la ligne de code imbriquée dans le bloc With sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      LastRow = .Cells(4, 1).End(xlDown).Row
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    Or si j'ai bien compris, tu souhaites connaître le nombre de lignes et de colonnes de cette plage.
    C'est tout a fais sa, mais je viens de comprendre mon erreur, je recupere le nombre de ligne et de colonne pour sélectionner un range:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With Worksheets("db")
      Nrow = .Range(.Cells(4, 1), .Cells(4, 1).End(xlDown)).Rows.Count
      Ncol = .Range(.Cells(4, 1), .Cells(4, 1).End(xlToRight)).Columns.Count
     
     .Range(.Cells(4, 1), .Cells(Nrow, Ncol)).Select
     End With
    Mais forcement, la cellule de coordonnées Nrow Ncol n'est pas la bonne...car avec ce code l'origine est la cellule A1 et non la A4.

    Alors pour sélectionner la plage j'ai essayé sa , sa marche mais bon je suis pas sure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Range(.Range("A4", .Range("A4").End(xlToRight)), .Range("A4", .Range("A4").End(xlDown))).Select

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais forcement, la cellule de coordonnées Nrow Ncol n'est pas la bonne...car avec ce code l'origine est la cellule A1 et non la A4.
    Absolument pas, tu peux constater que la cellule de référence est bien .Cells(4, 1) soit A4
    La formule que tu as affiché sélectionne la plage de cellules à partir de la cellule A4 jusqu'à la dernière ligne et la dernière colonne. Si c'est cela que tu voulais, c'est correct.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Nrow = Worksheets("db").UsedRange.Rows.Count - 3
    Ncol = Worksheets("db").UsedRange.Columns.Count

  6. #6
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Absolument pas, tu peux constater que la cellule de référence est bien .Cells(4, 1) soit A4
    La formule que tu as affiché sélectionne la plage de cellules à partir de la cellule A4 jusqu'à la dernière ligne et la dernière colonne. Si c'est cela que tu voulais, c'est correct.
    Merci, je comprend pas alors pour quoi il ne selectionne pas les trois derniere ligne du range alors que count me renvoi le bon resultat.

  7. #7
    Invité
    Invité(e)
    Par défaut
    tous est relatif,
    si les ligne de 1 à 4 sont vide alors UsedRange te retourne ton tableau;
    si les ligne de 1 à 4 ne sont pas vide alors UsedRange te retourne ton tableau + les ligne de 1 à 4;

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,


    la propriété .count te donne le nombre de ligne ou de colonne appartenant à ta plage ...

    ensuite tu utilise la forme ... cependant tu définit mal ton "Cell2" ... pour déterminer la colonne et la ligne de Cell2 tu oublie d'ajouter au nombre de lignes ou colonnes trouvées la position initiale ....

    à méditer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Probleme avec Count Distinct
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/10/2012, 11h37
  2. Probleme avec Count et In
    Par Overstone dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2010, 09h44
  3. Probleme avec count(*)
    Par Le Marlou dans le forum Hibernate
    Réponses: 4
    Dernier message: 26/01/2010, 19h12
  4. [CR?]Probleme avec "Count"
    Par dilalex dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 10/03/2008, 10h09
  5. Probleme avec COUNT() contenant une condition
    Par smarties dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/07/2007, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo