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 :

worksheet_change - cellule vide ou non [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 86
    Points : 75
    Points
    75
    Par défaut worksheet_change - cellule vide ou non
    Bonjour,

    L'événement worksheet_change est merveilleux mais je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification.

    Est-ce que c'est faisable ?

    Merci d'avance.

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    certainement avec plus d'indices pour pouvoir t'aider

    bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Est-ce quelque chose comme ça que tu souhaites ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    If Not IsEmpty(Range("A1").Value) Then
    'Ce que tu veux si la cellules n'est pas vide
    MsgBox "Remplie!"
    Else
    'Le cas contraire
    MsgBox "Vide!"
    End If
     
    End Sub
    Bon, tu devras adapter vu que je ne l'ai fait que pour tester sur la cellule A1.

    En gros, si la cellule était vide avant la modification, tu auras une MsgBox avec marqué "Remplie!" qui apparaîtra. Dans le cas contraire, c'est "Vide!" qu'on verra.

    je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification
    Et hop, 2 actions différentes

    Bonne soirée !

    EDIT : Ok, je viens de comprendre. Tu ne veux sûrement pas la remplir pour marquer "Remplie" et la vider pour marquer "Vide"... Mon code te dit seulement quel est l'état de la cellule après changement. Toi tu veux connaître l'état AVANT changement, me trompe-je ?

    Bon, ça ne change rien au final. Je te propose donc :
    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
     
    Dim temp As Boolean
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    MsgBox temp
     
    If Not IsEmpty(Range("A1").Value) Then
    'Ce que tu veux si la cellules n'est pas vide
    MsgBox "Remplie!"
    temp = True
     
    Else
    'Le cas contraire
    MsgBox "Vide!"
    temp = False
    End If
     
    End Sub
    temp est ici une variable globale qui garde en mémoire l'état de la cellule A1 avant changement. En gros, lorsque tu modifies la cellules A1, tu as qui te donne l'état de la cellule avant et la Msgbox suivante qui te donne l'état de la cellule après.

    Enjoy !
    DeaD

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut NATOU2 et le forum
    L'événement worksheet_change est merveilleux mais je n'arrive pas à lui faire faire deux actions différentes selon si la cellule était vide ou non avant sa modification.
    Et nous non plus, mais
    si tu stockes la valeur de la cellule dans une variable globale à la sélection, tu peux la comparer après. Ce qui donne des macros dans ce style :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Option Explicit
    Dim Tab_v()
    Private Sub Workbook_Open()
    '....
    End Sub
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim x As Long
    If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub
    ReDim Tab_v(1 To 2, 1 To Selection.Count)
    For x = 1 To Selection.Count
        Tab_v(1, x) = Selection.Cells(x)
        Tab_v(2, x) = Selection.Cells(x).Address(0, 0)
    Next x
    End Sub
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim x As Long
    Dim Cel As Range
    If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub
    For Each Cel In Target
        For x = 1 To UBound(Tab_v, 2)
            If Cel.Address(0, 0) = Tab_v(2, x) Then
                If IsEmpty(Tab_v(1, x)) Then
                    'traitement si la cellule était vide
                ElseIf Tab_v(1, x) = Cel Then
                    'traitement si la cellule n'a pas été modifiée
                Else
                    'traitement de la dernière possibilité
                End If
            End If
        Next x
    Next Cel
    End Sub
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim x As Long
    If Sh.Name <> "nom de l'onglet concerné" Then Exit Sub
    ReDim Tab_v(1 To 2, 1 To Target.Count)
    For x = 1 To Target.Count
        Tab_v(1, x) = Target.Cells(x)
        Tab_v(2, x) = Target.Cells(x).Address(0, 0)
    Next x
    End Sub
    À mettre dans le module ThisWorkBook
    Ces macros à lancement automatique (concernant change et selectionchange) sont pratiquement les mêmes que celles de la feuille, mais avec la variable feuille en plus.

    Pour initialiser le tableau varaible, soit tu le fais à l'ouverture, soit chaque fois que tu actives la feuille.

    Nota :
    - les macros Change se lancent quand une cellule sort du mode édition, qu'elle ait été modifiées ou non.
    - les macros Change ne se lancent pas quand le contenu n'est pas changé, soit par macro, soit manuellement :
    si le contenu de B1 est "=A1", un changement en A1 remplira la variable target de change uniquement avec A1, B1 n'apparaîtra pas, puisque son contenu reste "=A1"
    A+

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

Discussions similaires

  1. lancer une macro en fonction si une cellule est vide ou non
    Par timtof2011 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/11/2011, 10h01
  2. [XL-2007] Cellule vide+formule : reconnu non vide
    Par cedinfo17 dans le forum Excel
    Réponses: 2
    Dernier message: 22/07/2011, 19h36
  3. [XL-2003] Non affichage des cellules vide dans un graphique
    Par Philippe_Orange dans le forum Excel
    Réponses: 2
    Dernier message: 13/04/2010, 15h44
  4. Réponses: 23
    Dernier message: 21/07/2009, 14h19

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