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 :

Question sur formule :=SI(ET(ESTVIDE [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut Question sur formule :=SI(ET(ESTVIDE
    Bonjour,

    J’aurais besoin de vos conseils concernant la formule =SI(ET(ESTVIDE

    En effet j’ai inséré dans mon tableau une fonction qui permet de vérifier si une plage de cellules est vide.

    Ainsi, j'ai mis dans la cellule AEC la formule suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ET(ESTVIDE(AEH3);ESTVIDE(AEI3);ESTVIDE(AEJ3);ESTVIDE(AEK3);ESTVIDE(AEL3);ESTVIDE(AEM3);ESTVIDE(AEN3);ESTVIDE(AEO3);ESTVIDE(AEP3);ESTVIDE(AEQ3);ESTVIDE(AER3);ESTVIDE(AES3);ESTVIDE(AET3);ESTVIDE(AEU3);ESTVIDE(AEV3);ESTVIDE(AEW3);ESTVIDE(AEX3));"X";"")
    Ce qui me met donc une X si elles sont bien vides, sinon rien.

    Est-il possible de simplifier cette formule ?

    D’autre part, il m’arrive que lorsque je rajoute des lignes, cette formule saute parfois, donc je me demandais si l’on pouvait la remplacer en mettant un code vba dans la feuille ?

    Merci d’avance pour votre aide.

  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,
    Est-il possible de simplifier cette formule ?
    Je pense que oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.VIDE(AEH3:AEX3);"X";"")
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBVAL(AEH3:AEX3);"";"X")
    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 du Club
    Inscrit en
    Avril 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 9
    Par défaut
    Merci Philippe pour ta rapide réponse.

    J'ai essayé tes 2 codes, et c'est le 2ème qui fonctionne !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBVAL(AEH3:AEX3);"";"X")
    Ca va me simplifier grandement la tâche.

    Si vous avez une idée sur une version en vba je suis toujours intéressée

  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,
    J'ai essayé tes 2 codes, et c'est le 2ème qui fonctionne !!
    Effectivement, j'ai répondu un peu vite.
    Pour la première formule, il fallait vérifier que toutes les cellules étaient vides (17 dans ce cas-ci)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.VIDE(AEH3:AEX3)=17;"x";"")
    Pour renvoyer le nombre de cellules d'une façon dynamique et pas par constante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.VIDE(AEH3:AEX3)=COLONNES(AEH3:AEX3);"x";"")
    Attention qu'il y a une petite différence entre NB.VIDE et NBVAL
    Si dans une des cellules de la plage mise en argument (ici AEH3:AEX3), il y a une formule, NB.VIDE, NBVAL la considère comme remplie. Sauf si cette formule renvoie une chaîne vide comme par exemple.
    Dans ce cas précis si la condition est fausse, la formule renverra donc une chaîne vide dans la cellule et NB.VIDE la considère alors comme vide alors que NBVAL la considère comme remplie.

    Si vous avez une idée sur une version en vba je suis toujours intéressée
    Voici un exemple de procédure VBA qui écrit "X" dans la cellule AEF3 de la feuille nommée [Feuil1] si la plage AEH3:AEX3 de cette même feuille est vide ou une chaîne vide dans le cas contraire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
     Dim sht As Worksheet
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     With sht
     .Range("AEF3") = IIf(Application.WorksheetFunction.CountA(.Range("AEH3:AEX3")), "", "X")
     End With
    End Sub
    S'il faut faire une boucle sur plusieurs lignes par exemple de la ligne 2 à la ligne 100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub t()
     Dim sht As Worksheet, r As Long
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     For r = 2 To 100
      With sht
      .Range("AEF" & r) = IIf(Application.WorksheetFunction.CountA(.Range("AEH" & r & ":AEX" & r)), "", "X")
      End With
     Next
    End Sub
    Autre scénario, on souhaite placer la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NBVAL(AEH2:AEX2);"";"X")
    dans la plage AEF2:AEF100
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t()
     Dim sht As Worksheet, myFormula As String
     myFormula = "=IF(COUNTA(AEH2:AEX2),"""",""X"")"
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     sht.Range("AEF2:AEF100") = myFormula
    End Sub
    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
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonjour Philipe,

    C'est un très bon rappel pour moi sur les nuances entre NB.VIDE, NBVAL.

    J'ajoutes qu'en VBA, il est préférable (c'est ma pensée) de s'affranchir de ces fonctions dans la plupart des cas.
    Les Propriétés de l'objet global SpecialCells sont déjà disponibles en mémoire pour répondre à ces besoins.

    Sans doute devras tu aussi lui expliquer dans tes explications limpides, les pièges possibles avec xlCellTypeBlanks

  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
    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 Ousmane,
    C'est vrai qu'au moment de rédiger les multiples possibilités de compter les cellules vides ou plutôt non vides, j'ai complètement oublié la propriété SpecialCells avec comme argument la constante xlCellTypeBlanks.
    Il y a aussi la formule BDNBVAL mais qui ne convient pas à son cas particulier et puis SOMMEPROD pourquoi pas mais cela devient un peu lourd.
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2011, 17h55
  2. Question sur petite formule
    Par nicolav dans le forum Excel
    Réponses: 5
    Dernier message: 16/07/2009, 23h01
  3. question sur la formulation d'une requete
    Par moha_alnif dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/05/2009, 14h32
  4. Question sur un élément d'une formule
    Par Tigris94 dans le forum Formules
    Réponses: 1
    Dernier message: 06/05/2009, 13h36
  5. Réponses: 2
    Dernier message: 31/08/2007, 11h33

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