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 :

Code VBA pour cacher des lignes


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Points : 4
    Points
    4
    Par défaut Code VBA pour cacher des lignes
    Bonjour,

    Je cherche un code VBA faisant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si la cellule W2 de la Feuil1 affiche le texte "N.A.", alors les lignes 32 à 34 de la Feuil2 doivent être cachées. Si la cellule n'affiche pas "N.A." les lignes doivent être visibles
    Seul problème, la cellule W2 contient une fonction INDEX et ne fait qu'afficher le texte d'une autre cellule, mais elle ne contient pas de texte elle-même (si ce n'est le code de la fonction). C'est pour cela que mes essais jusqu'à maintenant ont été vains. Car s'il est vrai que la cellule W2 peut visuellement afficher N.A., Excel analyse uniquement son contenu réel, c'est-à-dire le code de la fonction, et ce code ne contient pas de N.A.

    Je ne sais pas si c'est envisageable mais le code pourrait donc faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si la cellule qui est pointée par la cellule W2 contient N.A., alors les lignes 32 à 34 de la Feuil2 doivent être cachées.
    Avez-vous une idée de ce qu'il faut faire et comment le faire ? (je ne sais malheureusement pas écrire en VBA).

    Votre aide me serait très précieuse car je suis perdu et désespéré.

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    la propriété .Text de la cellule te donnera le résultat de la formule "affichée dans la cellule", y compris si c'est une erreur

    .Formula te donnera la formule

    .Value te donnera la valeurs évaluée de la formule ... si la formule est en erreur, alors .Value plantera ... et dans ce cas on teste plutôt un IsError(MaCellule.Value)

  3. #3
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci !

    J'ai adapté le code suivant qu'un forumeur m'avait donné en utilisant la propriété "Target.Text". Il permet de supprimer des lignes quand une certaine cellule contient "N.A.". Problème : même en utilisant "Text" (au lieu de Value), ça marche seulement si la cellule contient réellement N.A. mais pas si elle ne fait que l'afficher. Est-ce que vous avez une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim lig As Integer
        Dim col As Integer
        lig = Target.Row
        col = Target.Column
        If Target.Row = 2 And Target.Column = 31 And Target.Text = "N.A." Then
            For i = 38 To 36 Step -1
                Sheets("Feuil2").Cells(lig + i, col - 27).Delete shift:=xlUp
            Next i
        End If
    End Sub
    D'autre part, je cherche aussi à modifier ce code pour faire en sorte qu'il ne supprime pas les lignes mais qu'il les cache simplement. Et de telle sorte aussi qu'il fasse réapparaitre les lignes pour tout texte différent de N.A. Est-ce possible ?


    Merci beaucoup pour votre aide

  4. #4
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai essayé de changer le "Delete" en "Rowheight". Quand il y a un N.A. l'idée serait que la ligne se réduise à zéro, ce qui donc la cacherait. Mais mon code ne marche pas, est-ce que vous voyez le problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim lig As Integer
        Dim col As Integer
        lig = Target.Row
        col = Target.Column
        If Target.Row = 32 And Target.Column = 2 And Target.Text = "N.A." Then
            For i = 2 To 0 Step -1
                Sheets("2_Print").Cells(lig + i, col + 2).Selection.RowHeight = 0
            Next i
        End If
    End Sub

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu nous montrer un exemple de formule ?

    parce que là, on ne sait toujours pas si tu parles du #N/A! (une vraie erreur) ou d'un texte "N.A." (un texte conditionné dans la formule), ce qui n'est absolument pas la même chose

  6. #6
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Voici la formule d'une des cellules qui est susceptible d'afficher parfois N.A.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =+SI(INDEX(Tableau_Postes;'Feuil1'!$C$10;S1)<>0;INDEX(Tableau_Postes;'Feuil1'!$C$10;S1);"")
    Le code que j'ai mis dans mon post précédent n'arrive pas à lire le N.A. affiché, il prend en compte seulement le texte écrit dans cette formule. Si ce n'est pas possible de contourner ce problème, il devrait aussi y avoir la possibilité de créer une étape supplémentaire : on copie la cellule contenant la formule dans une autre cellule, et à ce moment seul son texte affiché serait repris.

    Merci pour votre aide

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    donc ce "N.A" est bien la valeur qui existe dans les autres cellules, et on ne parle pas d'une erreur #N/A! ?


    au passage, puisque Excel 2016, utilises SIERREUR() c'est plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =+SIERREUR(INDEX(Tableau_Postes;'Feuil1'!$C$10;S1);"")


    je maintiens :

    - si "N.A." rapatrié depuis une autre cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCellule.Text = "N.A."
    si tu es certain que c'est la valeur exact, sinon il faut utiliser Instr() pour vérifier que ta cellule contient au moins cette chaine ... voir l'opérateur Like (mais moins rapide)

    - si "#N/A!" car résulte d'une erreur de formule (ne doit plus arriver avec SIERREUR())
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IsError(MaCellule.Value)

    tout autre comportement que celui attendu avec mes deux propositions, signifie que tu as mal expliqué le problème, ou que tu ne maîtrise pas le comportement de ton classeur

  8. #8
    Candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2017
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2017
    Messages : 25
    Points : 4
    Points
    4
    Par défaut
    Merci pour votre réponse

    En effet ce n'est pas une erreur, le N.A. est un texte que j'entre moi-même dans une cellule et qui est repris dans la cellule qui comporte la formule INDEX.

    Le code que vous avez écrit ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaCellule.Text = "N.A."
    Ne s'agit-il pas déjà de ce que j'ai écrit dans mon code plus haut ?

    Même avec le ".Text" ça ne fonctionne pas sur mon classeur. Par contre, dès que je supprime la formule de la cellule et que j'écrit N.A. en "texte brut" si je puis dire, là ça marche. Donc le problème vient bien du fait que ce code ne sait pas lire le N.A. affiché.

    PS: Je précise qu'effectivement je débute sur excel et je suis bien loin de tout maîtriser, d'où ma demande d'aide.

    Merci beaucoup pour votre aide.

  9. #9
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Je ne suis pas non plus un expert de l'ultime connaissance absolue

    mais pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub toto()
    MsgBox "La Cellule Active contient pour valeur : " & ActiveCell.Text
    End Sub
    Nom : dvp_3.png
Affichages : 173
Taille : 20,3 Ko

Discussions similaires

  1. Ligne de Code VBA pour actualiser des données sous PPT
    Par harald78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/10/2016, 09h27
  2. [Toutes versions] Macro ou code VBA pour effacer des caracteres et aller a la ligne dans un meme cellule
    Par ghisunit dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2012, 15h29
  3. [XL-2007] Code VBA pour supprimer des lignes sous condition - problème
    Par PeaceMaker dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/06/2011, 09h09
  4. [XL-2003] Code VBA pour fusion des Dossiers
    Par em_bengue dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/04/2009, 00h03
  5. [VBA-E optimisation code] ameliorer la méthode pour cacher des lignes
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 09h53

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