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 :

Vérifier si plusieurs cellules de la ligne active ne sont pas vides [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut Vérifier si plusieurs cellules de la ligne active ne sont pas vides
    Bonjour,
    Je souhaite vérifier si plusieurs cellules (colonnes A, B, C et D) de la ligne active ne sont pas vides.
    J'ai essayé ce code qui, je le sais, est erroné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.EntireRow.Cells(1, 4).Value <> ""
    Pouvez-vous m'éclairer?
    Merci.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une solution

    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
    Dim rg As Range
    Dim str As String
     
    For Each rg In Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)
        If rg.Value <> "" Then
            If str = "" Then
                str = "Non vides : "
            Else
                str = str & ", "
            End If
            str = str & rg.Address
        End If
    Next
     
    MsgBox IIf(str = "", "Toutes les cellules sont vide", str)

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function EstVide(Rng As Range) As Boolean
     
    EstVide = Application.CountA(Rng) < Rng.Count
    End Function
    Teste A11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Test()
     
    If EstVide(Range("A1:D1")) Then MsgBox "Certaines cellules vides"
    End Sub
    A adapter

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Hello Mercatog,

    Je savais bien qu'il devait y avoir plus court

    Par contre, je crois qu'il manque une instruction a cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EstVide = Application.WorksheetFunction.CountA(Rng) < Rng.Count

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour jfontaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CountA(Rng)
    est aussi valable.

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    eh ben, si en plus il y a des instructions cachées

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Merci de votre aide précieuse.

    Je dois cependant avouer que le résultat attendu n'est pas au rendez-vous.
    En effet, voici le code comme je l'ai repris suivant vos indications. Aurais-je commis des erreurs ou des oublis?

    Code la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)) Then
    MsgBox "Une des cellules A à D de la ligne active n'est pas vide"
    Else
    MsgBox "Toutes les cellules A à D de la ligne active sont vides"
    End If
    Code la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function EstVide(Rng As Range) As Boolean
    EstVide = Application.WorksheetFunction.CountA(Rng) < Rng.Count
    End Function
    Merci de votre examen.

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    La fonction EstVide est vrai si au moins une cellule est vide et fausse si toutes les cellules sont pleines.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)) Then
        MsgBox "Une des cellules A à D de la ligne active n'est pas vide"
    Else
        MsgBox "Toutes les cellules A à D de la ligne sont pleines"
    End If

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Merci pour la réponse. Cependant, même si les colonnes A à D sont vides, le résultat du IF est vérifié alors que je devrais arriver au Else.
    Le résultat n'est donc pas correct.
    Quelqu'un pourrait-il effectuer l'essai?

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu as certainement des formules dans tes cellules.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Non, Je n'ai pas de formule.
    Pour être tout à fait certain, j'ai lancé la macro dans une feuille vierge. Résultat identique...

  12. #12
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu regardé la logique?

    Si au moins une cellule est vide alors:
    1, 2, 3 ou 4 cellule(s) est (sont) vide(s)
    Sinon:
    toutes les cellules sont pleines.


    Pour expliquer ton souci, est ce que tu cherche une fonction qui te donne 3 résultats:

    1. Toutes les cellules sont vides
    2. Au moins une cellule est vide et non toutes
    3. Aucune cellule n'est vide

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu!!...
    bonjour a tous

    mercatog
    je viens d'essayer ta fonction et effectivement ca ne fonctionne pas

    les cellule toute vide j'ai le message

    "Une des cellules A à D de la ligne active n'est pas vide"
    a regarder la macro ca devrais fonctionner pourtant
    EDIT:
    comme ca ca marche!!!!
    le numero de la ligne doit etre déclarée avant
    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
     
    Sub recherche()
    dim i as long
     
    i = ActiveCell.Row
     
    If EstVide(Range("A" & i & ":D" & i)) Then
    MsgBox "Une des cellules A à D de la ligne active n'est pas vide"
    Else
    MsgBox "Toutes les cellules A à D de la ligne active sont vides"
    End If
    End Sub
    Function EstVide(Rng As Range) As Boolean
    EstVide = Application.WorksheetFunction.CountA(Rng) ' < Rng.Count
    End Function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row))
    le activecell.row ne soit pas pris en compte puisque le "estvide nous sort de la macro enfin je pense que c'est ca mais je n'en suis pas sur

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    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
    oui en fait cette fonction EstVide est Vrai si au moins une des cellules n'est pas pleine et est fausse si toutes les cellules sont pleines.


    il faudrait modifier la fonction Estvide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function EstVide(Rng As Range) As Boolean
     
    EstVide = Application.CountA(Rng) = 0
    End Function
    et pour l'utilisation en gardant le même sens d'équation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)) Then
        MsgBox "Au moins une des cellules n'est pas vide"
    Else
        MsgBox "Toutes les cellules sont vides"
    End If

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    Function EstVide(Rng As Range) As Boolean
     
    EstVide = Application.WorksheetFunction.CountA(Rng) < Rng.Count
    End Function
     
     
    'Pour tester
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If EstVide(Range("A" & Target.Row & ":D" & Target.Row)) Then
        MsgBox "Une des cellules A à D de la ligne active EST vide"
    Else
        MsgBox "Toutes les cellules A à D de la ligne sont PLEINES"
    End If
    End Sub
    Lisez bien les msgbox dans chaque cas de figure.
    La logique est là; maintenant il suffit d'expliciter logiquement le besoin.

    Bon regardez le post 3, vous aurez la réponse.
    Le résultat final dépends de l'adaptation

    [EDIT]! Exact Bbil (désolé pas rafraichi)

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re

    mercatog on c'est croisé regarde ma derniere réponse

    en determinant avant le row de la ligne ca fonctionne

    je sais ca n'a aucune logique mais pourtant ca fonctionne si ce n'est ce que je suspecte et precisé dans ma derniere reponse

    apres encore des essai il semblerai que ca soit la limite inferieur qui cré l'erreur
    "< rng.count"

    celle la fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub recherche()
    If EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)) Then
    MsgBox "au moins Une des cellules A à D de la ligne active n'est pas vide"
    Else
    MsgBox "Toutes les cellules A à D de la ligne active sont vides"
    End If
    End Sub
    Function EstVide(Rng As Range) As Boolean
    EstVide = Application.WorksheetFunction.CountA(Rng) 'en elevant ca:'< Rng.Count
    End Function

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    @Patrick
    Bbil à répondu au cas où la recherche: toutes les cellules sont vides ou au moins une cellule est pleine (par analogie à la première proposition: toutes les cellules pleines ou au moins une cellule est encore vide)

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 85
    Par défaut
    Merci Patrick
    Merci à tous,

    La méthode de Patrick fonctionne correctement.

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ca n'est pas ma methode c'est celle que mercatog a suggéré

    je n'est fait qu' enlever la limite inferieur

    allez juste pour le fun


    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
     
    Dim nb_celule_pleine As Long
    Dim nb_cellule_vide As Long
     
    'verifier si cellue vide ou pas dans une plage
    Sub recherche()
        If EstVide(Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row)) Then
            MsgBox "il y a " & nb_celule_pleine & " cellules de remplies  et " & nb_cellule_vide & " cellules de vides"
     
        Else
            MsgBox "Toutes les cellules A à D de la ligne active sont vides"
        End If
    End Sub
    Function EstVide(Rng As Range) As Boolean
        EstVide = Application.WorksheetFunction.CountA(Rng)    'en elevant ca:'< Rng.Count
        nb_celule_pleine = Application.WorksheetFunction.CountA(Rng)
        nb_cellule_vide = Rng.Cells.Count - nb_celule_pleine
    End Function
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [XL-2010] macro pour supprimer lignes qui ne sont pas en gras
    Par lovely2604 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/11/2014, 21h02
  2. Ouverture d'un formulaire si plusieurs cellules d'une ligne ont été modifiées
    Par sabine_toulouse dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 10/02/2014, 16h20
  3. Coloriser deux cellules de la ligne active d'un DbGrid
    Par karinya dans le forum Composants VCL
    Réponses: 1
    Dernier message: 01/09/2010, 10h03
  4. UNION ? des lignes qui ne sont pas prises...
    Par fred23195 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/12/2005, 15h50

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