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

Excel Discussion :

Code VBA uniquement si cellule modifiée


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Code VBA uniquement si cellule modifiée
    Bonjour,

    Voila mon probleme : Je voudrais lancer un code VBA dès lors que l'on modifie une cellule. Mais la subtilité est là : il faut impérativement modifier la cellule pour que la macro se lance.

    Exemple : J'ai "toto" en cellule A1. Si l'utilisateur saisi autre chose que "toto" dans cette cellule, alors la macro X se lance. Par contre, s'il rentre dans la cellule, et "resaisi" la même valeur que celle qui était précedemment dans la cellule (ici "toto"), alors la macro ne se lance pas.
    En gros, il faudrait un code VBa qui traite l'information suivante :

    Si Target.value = "A1" et si la nouvelle valeur de la cellule apres validation est differente de Target.value, alors Lancer la macro X.


    Voila mon code, mais il ne marche pas. Merci d'avance à tous pour votre aide


    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 Worksheet_Change(ByVal Target As Range)
        On Error GoTo gesterreur
        Application.ScreenUpdating = False
        Dim valOp As String
        valOp = Range("A1").Value 'Ancienne Valeur
        If Target.Address = "$A$1" And Target.Value <> "" Then
            If Range("A1").Value <> valOp Then
                MAJCodeOP   'Macro X
            End If
        End If
        Application.ScreenUpdating = True
        Exit Sub
    gesterreur:
        Application.ScreenUpdating = True
    End Sub

  2. #2
    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 tictactoc et le forum
    D'abord, les balises sont faites pour être utilisées, si, si, tu ne les abimes pas, et nous, on préfère.

    Voila mon probleme : Je voudrais lancer un code VBA dès lors que l'on modifie une cellule. Mais la subtilité est là : il faut impérativement modifier la cellule pour que la macro se lance.

    Si tu ne veux un lancement que si la valeur de la cellule a changé, il faut que tu le dises à Excel
    Tu crées une variable globale : moi, j'utiliserais une variable tableau de indice (valeur, adresse)

    Tu initialises ton tableau avec target de SelectionChange

    et tu valides dans Change quand la valeur a effectivement changé.
    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
    Option Explicit
    Dim Tab_V()
    Private Sub Worksheet_Activate()
    Dim X As Long
    ReDim Tab_V(1 To 2, 1 To Selection.Cells.Count)
    For X = 1 To Selection.Cells.Count
        Tab_V(1, X) = Selection.Cells(X)
        Tab_V(2, X) = Selection.Cells(X).Address(0, 0)
    Next X
    End Sub
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Err_Trait
    Dim Cel As Range
    Dim X As Long
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    For Each Cel In Target
        For X = 1 To UBound(Tab_V, 2)
            If Cel.Address(0, 0) = Tab_V(2, X) And Cel <> Tab_V(1, X) Then
                'traitement si cellule a effectivement changé
            End If
        Next X
    Next Cel
    Err_Trait:
    If Err.Number <> 0 Then MsgBox Err.Description, , "Erreur n°" & Err.Number
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim X As Long
    ReDim Tab_V(1 To 2, 1 To Target.Cells.Count)
    For X = 1 To Target.Cells.Count
        Tab_V(1, X) = Target.Cells(X)
        Tab_V(2, X) = Target.Cells(X).Address(0, 0)
    Next X
    End Sub
    A+

Discussions similaires

  1. [XL-2010] Code VBA tri de cellules suivant l'heure et la date
    Par Chachoumie dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 15/04/2015, 10h12
  2. [XL-2010] Code VBA: somme de cellules avec boucle unique
    Par Thomas4530 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/01/2014, 05h16
  3. Code VBA pour compter cellules
    Par pierrotyahoo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/02/2013, 17h23
  4. Code VBA - Référence à une cellule et autre
    Par Yvouille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2010, 20h57
  5. code VBA copie colle cellule d'1 fichier excel à 1autre
    Par tony020422 dans le forum Macros et VBA Excel
    Réponses: 30
    Dernier message: 03/06/2009, 18h47

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