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 :

Macro pour masquer des lignes vides sur plusieurs feuillés.


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Macro pour masquer des lignes vides sur plusieurs feuillés.
    Bonjour,
    je souhaite masquer des lignes vides (de A41 à A43) dans plusieurs feuillés en même temps à l'ouverture de mon fichier et si possible en auto-contrôle permanent (lorsque la ligne est vide elle se cache et lorsqu'elle est remplie elle réapparaisse).
    Pour l'instant j'ai fait ce code qui fonctionne, mais uniquement sur le feuillé actif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_Open()
    Range("A41:A43").Select
    For Each o In Selection
    If o.Value = "" Then
    o.EntireRow.Hidden = True
    Else
    o.EntireRow.Hidden = False
    End If
    Next
    End Sub
    En vous remerciant d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Je pense que la méthode que tu utilises va toujours masquer les lignes puisque la dernière cellule vérifiée sera la dernière, qui est vide.
    J'opterais pour quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Application.WorksheetFunction.CountA(Rows(41)) = 0 Then Rows(41).Hidden = True
    Qu'en est-il s'il y a des valeurs en ligne 41 et pas en 42 et/ou 43 ?
    Est-ce que tu masques seulement la/les lignes vides ou les 3 ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Pour simplifier ma demande je vous mets à disposition deux fichiers.
    Le fichier "Date" me sert pour modifier la date sur plusieurs fichiers d'un coup, je l'ouvre en premier et je mets la date souhaitée.
    Le fichier "Base identité" s'ouvre en deuxième, la macro se lance à l'ouverture et modifie les lignes 41 à 43 en fonction des lignes vide ou non, mais seul le feuillet actif est concerné, j'aimerais que ça fonctionne sur tous.
    Dans le futur je vais avoir bien 30 fichiers "base identité" qui vont comporter entre 1 et 6 feuillets.

    Merci de votre aide.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Sh as worksheet
    For each Sh in Activeworkbook  'boucle toutes les feuilles
       'Faire l'action souhaitée
    Next
    autre méthode si on ne veut pas toucher TOUTES les feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim I as long, Tablo as Variant
    Tablo = Array("Feuil1", "Feuil2", "Feuil3")
    For i = 0 to UBound(Tablo)
       'Faire l'action souhaitée
    Next

  5. #5
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je n'arrive pas à faire fonctionner ce code, Erreur 438 Propriété ou méthode non gérée par cet objet, avec For Each Sh In ActiveWorkbook en jaune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
    Dim Sh As Worksheet
    For Each Sh In ActiveWorkbook
    Range("A41:A43").Select
    For Each o In Selection
    If o.Value = "" Then
    o.EntireRow.Hidden = True
    Else
    o.EntireRow.Hidden = False
    End If
    Next
    Next
    End Sub
    J'aurais toujours besoin que ce soit sur toutes les feuilles car c'est pour adapter les lignes en fonction du nombre de jour dans le mois.
    Merci quand même pour le deuxième code.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Désolé, j'ai oublié le Worksheets...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each Sh In ActiveWorkbook.Worksheets
       Sh.Range("A41:A43").Select

  7. #7
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Encore un petit soucis...
    J'ai fait des recherches et essayé différentes manipulations mais rien à faire.
    Ligne Sh.Range("A41:A43").Select en jaune
    Erreur d'éxécution '1004'; La méthode Select de la classe Range a échoue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Workbook_Open()
    Dim Sh As Worksheet
    For Each Sh In ActiveWorkbook.Worksheets
       Sh.Range("A41:A43").Select
    For Each o In Selection
    If o.Value = "" Then
    o.EntireRow.Hidden = True
    Else
    o.EntireRow.Hidden = False
    End If
    Next
    Next Sh
    End Sub

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Il est toujours préférable de ne pas utiliser les Select/Selection.
    Y aller directement avec les objets (Range, Cells,...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_Open()
        Dim Sh As Worksheet
        For Each Sh In ActiveWorkbook.Worksheets
           If Application.WorksheetFunction.CountA(Sh.Rows(41)) = 0 Then Sh.Rows(41).Hidden = True Else Sh.Rows(41).Hidden = False
           If Application.WorksheetFunction.CountA(Sh.Rows(42)) = 0 Then Sh.Rows(42).Hidden = True Else Sh.Rows(42).Hidden = False
           If Application.WorksheetFunction.CountA(Sh.Rows(43)) = 0 Then Sh.Rows(43).Hidden = True Else Sh.Rows(43).Hidden = False
        Next Sh
    End Sub

  9. #9
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    La macro ne fonctionne pas car les lignes ne sont pas égal à 0 à cause des formules dans les cellules des lignes 41 à 43 (=SI(B40<FIN.MOIS(S16;0);B40+1;"").
    Alors j'ai remplacé par ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     If Application.WorksheetFunction.CountA(Sh.Rows(41)) = "" Then Sh.Rows(41).Hidden = True Else Sh.Rows(41).Hidden = False
     If Application.WorksheetFunction.CountA(Sh.Rows(42)) = "" Then Sh.Rows(42).Hidden = True Else Sh.Rows(42).Hidden = False
     If Application.WorksheetFunction.CountA(Sh.Rows(43)) = "" Then Sh.Rows(43).Hidden = True Else Sh.Rows(43).Hidden = False
    Le problème c'est que ça m'affiche une "erreur d'exécution '13' incompatibilité de type" et "If Application.WorksheetFunction.CountA(Sh.Rows(41)) = "" Then" en jaune.
    J'ai fait quelque recherche pour arranger ça seul mais je n'y arrive pas.
    Je ne comprend pas la commande CountA est compatible avec les "" normalement.

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    CountA = NBVAL, donc attends un chiffre, pas une chaîne de caractères...
    Donc, s'il y a des formules, ma méthode ne pourra pas fonctionner

    Peut-être essayer comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Cell as range
    Dim Vide as boolean
     
    Vide = True
    For each cell in rows(41).Cells
       if cell.value<>"" then
          vide = false
          Exit for
       endif
    Next 
    If vide then Rows(41).hidden = true

  11. #11
    Candidat au Club
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Electrotechnicien
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    La dernière macro n'a eu aucun effet mais je garde l'idée pour une prochaine utilisation.
    Avec un peu de recherche et d'aide j'ai écris cette macro en utilisant une partie de mon ancienne, ça fonctionne bien.
    Je pense l'amélioré quand j'aurai atteint un meilleur niveau.
    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
    Private Sub Workbook_Open()
        Dim Nb As Integer, NumOnglet As Integer
        Nb = Sheets.Count
        For NumOnglet = 1 To Nb
            Sheets(NumOnglet).Activate
     
    Range("A41:A43").Select
        For Each o In Selection
          If o.Value = "" Then o.EntireRow.Hidden = True   Else   o.EntireRow.Hidden = False
          End If
     
    Next
    Next NumOnglet
    Sheets(1).Activate
    End Sub
    Merci beaucoup pour votre aide et de m'avoir donné un peu de votre temps.
    Bonne continuation.

  12. #12
    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
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    heu....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("A41:A43").Select
        For Each o In Selection
          o.EntireRow.Hidden = o.Value =""   
        
    Next

  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
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    ou encore plus simple

    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
    Sheets(1).Range("A41:A43").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
    End Sub

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/12/2012, 22h04
  2. Macro pour grouper des lignes sur une plage qui peut varier
    Par RichRich59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2011, 14h04
  3. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 10h43
  4. Masquer des lignes vides
    Par gg9595 dans le forum Webi
    Réponses: 11
    Dernier message: 28/06/2007, 13h03
  5. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 09h21

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