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 :

IsEmpty ne fonctionne pas sur une ligne ou plage de cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    AKM
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : AKM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut IsEmpty ne fonctionne pas sur une ligne ou plage de cellule
    Bonjour à tous,

    Je voudrai tester si une ligne est vide. Le but étant d'écrire dans la première ligne vide.
    J'ai commencer par m'entraîner sur une cellule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub LIGNEVIDE()
     
    Dim H As Boolean
     
    H = IsEmpty(RANGE("A1"))
     
    If H = True Then GoTo LINE3
     
    GoTo Line4:
     
    LINE3:
    MsgBox ("TOP")
     
    Line4:
     
    End Sub

    Ca fonctionne, pas de soucis.
    En revanche si je cherche sur un groupe de cellule Range ("A11") ou sur une ligne Rows(1). Et bien le test ne fonctionne pas. Je n'ai pas de message d'erreur, mais qu'une des cellules soient pleine ou non, je ne parvient jamais à mon Goto line3.

    Si l'un d'entre vous peut m'aider, ce sera super.

    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
    12 936
    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 : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    IsEmpty sert à savoir si une variable est initialisée.
    Pour tester si une plage ne contient rien utilise plutôt la fonction CountA (renvoie le nombre de cellules remplies dans une plage)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rng As Range
    Set rng = Range("A2:C2")
    Debug.Print Application.WorksheetFunction.CountA(rng)

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    GoTo obsolète depuis presque vingt ans, à oublier ‼
    Sinon c'est le genre de demande dont la réponse se trouve en dix secondes via

    Exemple en utilisant une fonction de feuille de calculs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsRowEmpty(V) As Boolean
             IsRowEmpty = Application.CountA(Rows(V)) = 0
    End Function

  4. #4
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    bonjour,

    Il manque déjà un end if. La macro ne devrait pas fonctionner sans le end if

    après pour trouver la première ligne vide je vous conseille plutôt ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub Testligne()
     
     
        Dim LigFin As Long
        Dim LigDeb As Long
        Dim lig As Long
     
     
        'Recherche de la der lig utilisée en col 1
        LigFin = Sheets("APPRO MARCY").Cells(Rows.Count, 1).End(xlUp).Row
        'Affichage provisoire
        MsgBox "Repérage de la dernière ligne: " & LigFin
     
        LigDeb = 1
     
     
        For lig = LigDeb To LigFin
       'le code
        Next lig
     
     
    End Sub

  5. #5
    Membre à l'essai
    Homme Profil pro
    AKM
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : AKM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    IsEmpty sert à savoir si une variable est initialisée.
    Pour tester si une plage ne contient rien utilise plutôt la fonction CountA (renvoie le nombre de cellules remplies dans une plage)
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim rng As Range
    Set rng = Range("A2:C2")
    Debug.Print Application.WorksheetFunction.CountA(rng)
    Merci de ta réponse.
    Je ne connaissais pas cette fonction.
    Par contre j'ai réussi à compter les cellules vide avec CountBlank.

    Citation Envoyé par Marc-L Voir le message

    Bonjour, bonjour,

    GoTo obsolète depuis presque vingt ans, à oublier ‼
    Sinon c'est le genre de demande dont la réponse se trouve en dix secondes via

    Exemple en utilisant une fonction de feuille de calculs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsRowEmpty(V) As Boolean
             IsRowEmpty = Application.CountA(Rows(V)) = 0
    End Function
    Je te remercie de ta réponse.
    Je sais que Goto n'est pas utilisé par les pro, personnellement je ne sais pas le remplacer. Mais je suis certain qu'il est aisément remplaçable en utilisant la bonne méthode. Mais laquelle...

    C'est sympa d'avoir mis un exemple, mais je ne vois pas du tout comment il fonctionne...

    Citation Envoyé par bboy-eazy Voir le message
    bonjour,

    Il manque déjà un end if. La macro ne devrait pas fonctionner sans le end if

    après pour trouver la première ligne vide je vous conseille plutôt ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub Testligne()
     
     
        Dim LigFin As Long
        Dim LigDeb As Long
        Dim lig As Long
     
     
        'Recherche de la der lig utilisée en col 1
        LigFin = Sheets("APPRO MARCY").Cells(Rows.Count, 1).End(xlUp).Row
        'Affichage provisoire
        MsgBox "Repérage de la dernière ligne: " & LigFin
     
        LigDeb = 1
     
     
        For lig = LigDeb To LigFin
       'le code
        Next lig
     
     
    End Sub
    Merci de ton aide.
    Cela se rapproche de ce que je voudrai faire, trouver la première ligne vide, en revanche le résultat est étrange. Je vais faire des essais avant de revenir vers toi.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    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 : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par contre j'ai réussi à compter les cellules vide avec CountBlank.
    Effectivement la fonction CountBlank compte les cellules vides cependant comme son équivalent Excel NB.VIDE elle compte comme vide une cellule contenant une formule qui renvoie une chaîne vide. C'est la raison pour laquelle je ne l'ai pas proposée dans ma réponse.
    Je m'explique
    Si dans la plage de cellules E2:E11 tu as une formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(SOMME(A2:D2)<I1;"A commander";"")
    La formule NBVAL (équivalent de CountA) avec comme argumentE2:E11 va renvoyer 10 (10 cellules remplies) en revanche la formule NB.VIDE ne va pas te renvoyer 0 comme on pourrait le supposer mais simplement va compter le nombre de cellules dont la formule SI aura renvoyé la chaîne vide.
    Donc la formule CountBlank est à éviter si le but est par exemple de supprimer les lignes.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 936
    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 : 12 936
    Points : 28 932
    Points
    28 932
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme le fait très justement remarquer Marc
    GoTo obsolète depuis presque vingt ans, à oublier ‼
    Je dirais même depuis plus de trente ans. Dès la naissance du BASIC on nommait les programmes utilisant les Goto comme des programmes "spaghetti"
    J'ai vu un jour un programmeur (pourtant diplomé) à quatre pattes essayant de s'y retrouver dans ses Goto.
    Je sais que Goto n'est pas utilisé par les pro, personnellement je ne sais pas le remplacer. Mais je suis certain qu'il est aisément remplaçable en utilisant la bonne méthode. Mais laquelle...
    Il y a plusieurs méthodes comme par exemple utiliser des procédures indépendantes (Sub ou Function), If Then Else, Select Case, les instructions Exit Sub, Exit For, etc...
    Par exemple ton code aurait pu s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub LIGNEVIDE()
      Dim H As Boolean
      H = IsEmpty(Range("A1"))
      If H = True Then MsgBox ("Top")
    End Sub
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub LIGNEVIDE()
      Dim H As Boolean
      H = IsEmpty(Range("A1"))
      If H = False Then Exit Sub
      ' 
      ' Autres instructions
      '
    End Sub
    Ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub LIGNEVIDE()
      Dim H As Boolean
      H = IsEmpty(Range("A1"))
      If H = True Then
          MsgBox ("Top")
        Else
           ' Autres instructions
       End If
    End Sub
    Etc....

  8. #8
    Membre à l'essai
    Homme Profil pro
    AKM
    Inscrit en
    Février 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : AKM
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    Merci à tous les trois.

    Je suis parvenu à faire ce que je voulais (du moins à être sur le bon chemin) grâce à votre aide. Et surtout j'ai eu une leçon de méthodologie.

    Merci encore et bonne journée.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/11/2008, 10h27
  2. Mon code ne tient pas sur une ligne
    Par supertoms dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/04/2008, 17h35
  3. un control JS qui ne fonctionne pas sur une FORM
    Par redabadache3 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 03/12/2007, 15h43
  4. Deploiement incomplet: application ne fonctionne pas sur une autre machine
    Par Jeannot dans le forum Installation, Déploiement et Sécurité
    Réponses: 4
    Dernier message: 21/11/2007, 18h49
  5. Fonction DISTINCT ne fonctionne pas sur une date
    Par cramouille dans le forum Access
    Réponses: 5
    Dernier message: 25/10/2006, 15h42

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