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 :

Nombre de cellules dans une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut Nombre de cellules dans une ligne
    Bonjour
    J'aimerai compter le nombre de cellules non vides dans une ligne
    J'ai écris le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Plage As Range, n As Integer
    For Each Plage In ActiveSheet.Range("A:Z").Rows("1")
        If Plage.Value <> "" Then
            n = n + 1
        Else
            n = n
        End If
    Next Plage
    MsgBox n
    Mais j'ai un message d'erreur d'incompatibilité de type sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If Plage.Value <> "" Then
    une idée?
    Thank's

  2. #2
    Invité
    Invité(e)
    Par défaut
    Le code correct est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Public Sub Compter()
     
      Dim Plage As Range, n As Integer
     
      For Each Plage In ActiveSheet.Range("A1:Z1")
        If Plage.Value <> "" Then n = n + 1
      Next Plage
      MsgBox n
     
    End Sub
    Mais il est plus simple d'utiliser (et plus efficace):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub CompterBis()
     
      Dim n As Integer
      n = Application.WorksheetFunction.CountA(Range("A1:Z1"))
      MsgBox n
     
    End Sub

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut nombre de cellules non vides
    Bonjour Kutoh, Bonjour le forum

    Sans VBA, la fonction NBVAL fera très bien l'affaire

    Sinon en VBA

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountA(Sheets(1).Range("A1:Z1"))

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Il faudrait que tu écrives :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Plage In ActiveSheet.Range("A:Z").Rows("1").Cells
    mais il est plus simple d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Plage In ActiveSheet.Range("A1:Z1")
    et pour t'éviter de faire une boucle, tu peux utiliser l'équivalent de la fonction Excel NBVAL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = Application.CountA(ActiveSheet.Range("A1:Z1"))

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour Daniel,

    Télescopage en chaîne.
    Pour appeler une fonction Excel, je ne saisis pas très bien la différence entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountA
    et

    En vois-tu une?

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut thank's for all of you
    Ah merci. Parfois tu te demandes comment ça n'a pa pu te venir à l'esprit.
    La solution à mon problème est le code de vcottineau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Dim Plage As Range, n As Integer
     
      For Each Plage In ActiveSheet.Range("A1:Z1")
        If Plage.Value <> "" Then n = n + 1
      Next Plage
      MsgBox n
    Mais en complément, à quoi sert la fonction suivante?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountA(Sheets(1).Range("A1:Z1"))
    Surement à compter le nombre de celulle dans la plage défiie si je ne me trompe pas.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Télescopage en chaîne.
    Pour appeler une fonction Excel, je ne saisis pas très bien la différence entre

    WorksheetFunction.CountA

    et

    Application.CountA

    En vois-tu une?
    Ça influence la manière dont les erreurs sont gérées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Dim Res As Variant
      Res = Application.WorksheetFunction.VLookup(...)
      If Err.Number = 0 Then
      Else
      End If
     
      Dim Res As Variant
      Res = Application.VLookup(...)
      If IsError(Res) = False Then
      Else
      End If

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    Mais en complément, à quoi sert la fonction suivante?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountA(Sheets(1).Range("A1:Z1"))
    Surement à compter le nombre de celulle dans la plage défiie si je ne me trompe pas.
    Sers-toi de l'aide en selectionnant CountA et en appuyant sur F1, on ne le répêtera jamais assez.

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Mais en complément, à quoi sert la fonction suivante?
    Elle donne exactement le même résultat que la boucle que tu as créée. Elle correspond à la fonction 'NBVAL()' en français dans Excel.

    C'est une fonction native et il est préférable de l'utiliser.

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    L'unique intérêt de "Worksheetfunction" est de "prompter" les paramètres de la fonction. Ça provoque également parfois un bug avec "Match", "VLookUp" etc. Et en plus, c'est long à taper. Donc je ne m'en sers jamais.

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

Discussions similaires

  1. [AC-2000] Création d'une requête pour compter le nombre de ok dans une ligne
    Par yassine06 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2010, 17h10
  2. comptage du nombre d'éléments dans une ligne
    Par ayoubnour dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2009, 14h57
  3. Réponses: 0
    Dernier message: 17/02/2009, 17h13
  4. compter le nombre de mot dans une ligne fichier sous shell
    Par ninsekh dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 18/12/2008, 18h54
  5. nombre de cellule dans une colonne excel
    Par mahboub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/11/2006, 00h00

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