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 :

détection d'un changement de valeur d'une cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut détection d'un changement de valeur d'une cellule
    Bonjour,

    J'ai écrit une macro pour recalculer toute ma feuille.
    Principe : je rentre les nouvelles valeurs, je lance la macro recalculer() pour mettre à jour les bon calculs.

    Seulement, comme je ne suis pas sur de mes coups, je voudrais que les nouvelles cellules qui viennent d'être recalculées soient coloriées en rouge, pour vérifier bien qu'il n'y a pas d'erreur de calcul.
    Pour cela, il faudrait pouvoir détecter quelles sont les cellules précises qui ont changé. Ensuite d'appliquer la couleur pour chacune.

    J'espère que c'est assez clair comme explication

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 925
    Points
    55 925
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Personnellement, je vois pas d'issue à ton problème, tel qu'énoncé.

    Il n'est pas possible d'intercepter la modification d'une cellule lorsque cette modification résulte d'un recalcul.

    Dès lors, la seule possibilité que j'entrevois serait, à chaque modification de cellule, d'identifier les cellules dépendantes et de les mettre en rouge lors du recalcul.

    Cela me semble lourd et tordu... il y a probablement une autre approche à adopter. Pourquoi "serais-tu pas sûr" de tes coups?

  3. #3
    Membre actif Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Points : 236
    Points
    236
    Par défaut Bonjour
    Salut hantran

    quand tu fais ton recalcule, lors de l'affectation de ta valeur
    exp : range("A" & i ) = NouvelleValeur ensuite juste après tu peux mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    range("A" & i ).Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 255
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    si ce que tu recherche est bon sinon montre nous ton code.

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Sur l'évènement Change de ta feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    Cells.Interior.ColorIndex = xlNone 'pour supprimer les coloriage existant
    On Error Resume Next
    Target.Dependents.Interior.ColorIndex = 6
    End Sub

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos réponses, mais en fait le problème semble plus compliqué :

    Lors d'un recalcul, je ne recalcule pas les cellules concernées par les nouvelles valeurs, mais je recalcule TOUTE LA FEUILLE. Pourquoi? Parce que les modifications de valeurs sont un peu partout, je modifie 3 cellule ligne 2, puis 1 cellule ligne 50, puis 2 cellule ligne 1000, etc... Donc si je lance la macro pour toute la feuille, ça m'évitera de lancer la macro autant de fois que de ligne à modifier.
    Et cela répond en même temps à ta question Pierre Fauconnier, comme je modifie plusieurs cellules aux différents endroits, j'aimerais bien vérifier si elle sont bonnes, que je me trompe pas de ligne ou fais pas de faute de saisie...etc

    salut le_dilem, ta solution ne convient pas tout à fait dans mon cas, vu que je n'affecte pas les valeurs dans les cellules précises, mais je relance toutes les formules.

    La solution Worksheet_Change me fait planter le PC, car elle s'applique à chaque changement dans la feuille, et comme la macro recalcule toute la feuille, je pense qu'il faut attendre 3 heures pour que ça se termine.

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Combien tu as de formules dans ta feuille?
    fais le test suivant
    à l'aide d'un commandbutton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton2_Click()
    Cells.Interior.ColorIndex = xlNone 'pour supprimer les coloriage existant
    On Error Resume Next
     Cells.Dependents.Interior.ColorIndex = 6
    End Sub
    tu te retrouve avec quelles cellules en jaune.

    Pour la worksheet_change, on peut limiter son appel à des changements sur une plage précise

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 925
    Points
    55 925
    Billets dans le blog
    131
    Par défaut
    On pourrait, sur base de l'exemple de Mercatog, remplir une collection publique des cellules modifiées pour itérer sur ces cellules lors du recalcul et en colorer les dépendantes.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Merci je vais regarder cette solution.

    Sinon je pense à créer tout bêtement une copie de la feuille avant modif, la coller dans une autre feuille vierge, et puis à la fin comparer les deux feuilles et colorer les différentes

  9. #9
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour, en reprenant ton concept,

    vois avec ce code :

    Qui copie la feuille originale dans une autre à l'identique, change 2 cellules dans la première et compare les 14 000 000 de cellules, en listant les différences, en 19 secondes.

    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
    Sub Fastcompare()
    Dim tboMonArray As Variant
    Dim tboMonArray2 As Variant
    Dim I As Long, J As Long
    Dim pass1 As Single, pass2 As Single
     
    pass1 = Timer
    Sheets(1).Copy Before:=Sheets(2)
    Sheets(1).Select
    Cells(11, 5) = Cells(11, 5) + 3
    Cells(54984, 251) = "Toto"
    tboMonArray = Range("A1:IV55000")
    Sheets(2).Select
    tboMonArray2 = Range("A1:IV55000")
    For I = 1 To 55000
       For J = 1 To 256
       If tboMonArray(I, J) <> tboMonArray2(I, J) Then Debug.Print "row : " & I & "  col : " & J
       Next J
    Next I
    pass2 = Timer
    MsgBox pass2 - pass1 & " secondes pour " & Format(ActiveCell.CurrentRegion.Cells.Count, "#,##0") & " cellules"
    End Sub

    il est facile dans le code de mettre les coordonnées des cellules trouvées dans un nouveau tableau, de le lister ou de parcourir ta feuille ensuite cellule listée par cellule listée selon tes finalités...

    cordialement,

    Didier

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Bonjour Ormonth,

    Merci pour ton code, je l'ai repris et l'adapter dans mon cas, it works like a charm C'est exactement ce que je voulais

    Cordialement

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/11/2013, 16h41
  2. Renommer onglet quand changement de valeur d'une cellule
    Par schdam dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/09/2010, 22h12
  3. Lancement macro si il y a changement de valeur d'une cellule
    Par fabiencal dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/07/2008, 13h20
  4. Charger Macro apres changement de valeur d'une cellule
    Par jackfred dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/07/2007, 14h51
  5. [VBA-E] RechercheV si changement de valeur sur une cellule
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/01/2007, 16h22

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