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 :

Forcer VBA à compter les cellules masquées [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut Forcer VBA à compter les cellules masquées
    Bonjour à tous.

    Dans un classeur, je souhaite masquer des lignes de reserve (inutile pour l'utilisateur, donc).
    Je définis une plage (Range) ,afin de calculer des effectifs, avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    LigneRoulementDebut = k + 1                                           '+1 pour avoir le décalage d'une ligne (pour récupérer la bonne plage de donnée, sans l'index)
    LigneRoulementFin = LigneRoulementDebut + 14                   '+14 pour avoir le service / l'équipe complet
    Je pense que le +14 pose problème:
    1. Lorsque j'affiche les lignes
      VBA me compte bien 14 lignes
    2. Lorsque je masque les lignes
      VBA me compte 8 lignes(Donc, les lignes masquées sont soustraites)


    Avez-vous une solutions simple à mettre en oeuvre?
    Y a t'il une astuce pour que VBA puisse compter quand même avec les lignes cachées?

    d'avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Le problème n'est pas tant le 1 + 1 mais la boucle et la plage de cellules pris en compte!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Bonjour Rdurupt.

    merci pour ta réponse.

    Un debug.print de mon Range me renvoie bien la bonne plage:

    Lorsque les ligne sont masquées:
    Lorsque les lignes sont visibles:
    .

    Je vais chercher ailleurs.

    Sinon, je vais faire ça de manière brutale:
    afficher les lignes avant le calcul
    calculer
    masquer les lignes.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LigneRoulementDebut=avtivesheet.udsedrange.rows.count -letitre -lignesuperflues
    LigneRoulementFin = LigneRoulementDebut +( 14 *LigneRoulementDebut)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Re-bonjour.

    Comme je n'ai pas joint le fichier, je comprends la difficulté à pouvoir me donner une réponse en cohérence avec ce que je veux !

    Si je comprends le but de la manoeuvre (dimensionner de manière "dynamique" ma plage),
    je ne comprends pas la mise en oeuvre.

    En fait, la plage que je définie avec les cellules LigneRoulementDebut et LigneRoulementFin ne sont pas identiques, et dépendent de conditions (notamment en fonction de l'index au dessus de ma selection)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LigneRoulementDebut=activesheet.usedrange.rows.count -letitre -lignesuperflues
    LigneRoulementFin = LigneRoulementDebut +( 14 *LigneRoulementDebut).

    LigneRoulementDebut=activesheet.usedrange.rows.count -letitre -lignesuperflues
    -letitre
    je soustrait la ligne de mon titre?
    En fait, il ne s'agit pas vraiment d'une ligne de titre, mais OK pour moi (c'est comme mon k+1 initial, j'imagine)

    -lignesuperflues
    le problèmes, c'est que les lignes superflues ne sont pas au même endroit selon la selection!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    rdurupt:

    Merci pour tes pistes de reflexions

    Mais du coup, j'ai adapté selon mes besoins:
    les ligne que je souhaite masquer contienne en colonne B le mot RESERVE
    je les affiche pour faire mon calcul, et je les masque après!

    je force en début de code (pour le calcul) Masquer = False
    puis lorsque le calcul est terminé, j'appelle la procédure Masquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub MasquerLigne(Masquer As Boolean)
    Dim i As Integer
     
    'je masque les lignes qui contiennent "RESERVE", à l'aide d'une boucle qui va tester chaque ligne de 1 à 118
        For i = 1 To 118
            If Worksheets(modèle_roulement).Cells(i, 2) = "RESERVE" Then
            Worksheets(modèle_roulement).Rows(i).EntireRow.Hidden = Masquer
            End If
        Next
     
    End Sub

  7. #7
    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 677
    Points
    18 677
    Par défaut



    Bonjour,

    la fonction de feuille de calculs SOUS.TOTAL est capable de calculer soit sur l'ensemble soit uniquement sur le visible …

    Autre voie : une variable tableau définie sur un Range tient compte de l'ensemble, même l'invisible …


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations forums :
    Inscription : Mai 2011
    Messages : 38
    Points : 16
    Points
    16
    Par défaut
    Bonjour Marc-L

    J'avais déjà essayé de bricoler avec SUBTOTAL, mais la fonction ne convenais pas à la macro que j'avais écrite.
    Je me sert déjà d'un CountIfs (=NB.SI.ENS)


    Par contre, je regarde comment travailler avec un objet type tableau, car c'est une bonne piste pour optimiser ma macro.
    Merci pour l'idée!!

    http://silkyroad.developpez.com/vba/tableaux/

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

Discussions similaires

  1. [VBA-E] Compter les cellules fusionnées
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2017, 16h09
  2. [XL-2007] VBA - Compter les cellules non vides
    Par Monkey_D.Luffy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 18h24
  3. [VBA-E]Compter les cellules...
    Par Korleone dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/04/2006, 18h52
  4. [EXCEL][VBA] Compter les cellules non-vides
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 15h40
  5. [VBA]Compter les cellules selon leurs couleurs...
    Par ronron1978 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/01/2006, 15h27

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