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 :

[Excel VBA]fonction dans une cellule qui modifie une autre cellule


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Bonjour,

    Dans une cellule de mon classeur, je voudrais insérer une fonction qui masque (ou pas) des lignes de mon classeur. C'est possible ?

    Pour l'instant, j'ai essayé ceci :
    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
    19
     
    '
    ' Affiche ou masque les lignes dont on donne l'adresse
    '
    Function afficherLignes(strPlage As String, ByVal nAfficher As Integer)
      Dim bAfficher As Boolean
      If (nAfficher = 1) Then
        bAfficher = True
      Else
        bAfficher = False
      End If
      Dim plage As Range
      Set plage = Range(strPlage)
     
      plage.EntireRow.Hidden = bAfficher:rem ne fonctionne pas
     
      Range("Y19").FormulaR1C1 = "test":rem ne fonctionne pas non plus
     
    End Function
    Et dans une cellule de mon classeur j'écris donc la formule "=afficherLignes("A10:A12";0)". Et ça ne fonctionne pas...

    Vous auriez une idée pour masquer des lignes dans un classeur en fonction de la valeur saisie dans une cellule (sans utiliser de timer) ?

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Non, tu ne peux pas de cette manière. Un fonction n'est pas une macro. Elle ne peut te retourner qu'un résultat. La seule formule possible dans ta cellule est "=afficherLignes(paramètres)" si dans ta fonction tu effectues un traitement se terminant par "afficherLignes= RésultatDuTraitement"
    A côté de ça, désolé mais je ne vois pas comment traiter ton pb

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par Tu
    Vous auriez une idée pour masquer des lignes dans un classeur en fonction de la valeur saisie dans une cellule
    Si c'est une cellule spécifique (adresse connue) si, j'ai une idée.
    Tu dis
    A+

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ouskel'n'or
    Si c'est une cellule spécifique (adresse connue) si, j'ai une idée.
    Tu dis
    A+
    Oui, c'est des lignes spécifiques à masquer...

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour faire ça, tu peux utiliser la macro Worksheet_SelectionChange de la feuille de calculs. Quand la valeur est changée dans la/les cellule(s) de ton choix, tu masques les lignes voulues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.address = "$A$2" then
       'Ton code
    endif
    End sub
    Si plusieurs de tes celules sont concernées, tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select case Target.address
        Case "$A$2"
             'ton code
        Case "$B$10"
        'etc
    End select
    L'inconvénient, si les cellules modifiées le sont par soft, c'est que tu devras les sélectionner dans le code (Select) Enfin je crois, tu vérifies
    A+

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    J'ai utilisé l'évènement "_Change" au lieu de "_SelectionChange".

    J'ai un appel à chaque fois que le contenu d'une cellule change.

    C'est parfait, merci encore.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/12/2011, 17h00
  2. Réponses: 7
    Dernier message: 21/03/2011, 13h36
  3. Réponses: 0
    Dernier message: 04/08/2010, 14h02
  4. Réponses: 27
    Dernier message: 03/01/2008, 11h07
  5. Modifier une colonne qui possède une contrainte DEFAUT
    Par David.V dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/01/2007, 11h35

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