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 -> test lors de la perte du focus d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut excel -> test lors de la perte du focus d'une cellule
    Bonjour,

    je voudrais en fait vérifier la valeur de plusieurs cellule, lorsqu'on quitte la cellule.

    J'ai par exemple la colonne F dans laquelle je dois vérifier les cellules de 5 à 20. La vérification est la suivante : si la valeur de F5 = la valeur de G4 + 1 alors c ok, sinon message d'alerte!! et ainsi de suite pour F6 à comparer avec G5,...

    Cette vérif doit être effectuée que si on quitte la cellule et qu'il y a une valeur. Je ne sais pas comment je dois déclarer tout ça dans excel pour que ça soit applicable à toutes les cellules concernées. (ou alors il faut définir ça pour chaque cellule?)

    merci d'avance,
    greg

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    essai ça ... :

    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
    Dim mCellule As Range
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not mCellule Is Nothing Then
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
     If Not Intersect(mCellule, Range("F5:F20")) Is Nothing Then
        If mCellule.Value <> 0 Then
             If Not mCellule.Offset(-1, 1) + 1 = mCellule Then
               MsgBox "Erreur " & mCellule.Offset(-1, 1).Address & " +1 <> " & mCellule.Address
               mCellule.Activate
               Exit Sub 'Revient sur cellule en erreur
             End If
            End If
       End If
    End If
    Set mCellule = Target 'Memorise cellule précédente//
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    oki merci,

    j'ai essayé ça, mais y'a 2 ptites choses qui m'embête un peu :

    1. je ne veux pas que le focus soit redonné à la cellule modifiée, donc j'ai essayé en supprimant mCellule.Activate, mais ça ne fonctionne plus!?!

    2. je voudrais faire le test que si la valeur à été modifiée, pas si on passe simplement sur la cellule sans en modifier son contenu...??

    rem: un truc que j'ai remarqué aussi, c'est que si je sélectionne plusieurs cellules dans la colonne F, ça bug -> message d'erreur ds VB

    voilà ton code que j'avais un peu modifié...
    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
    Dim mCellule As Range
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not mCellule Is Nothing Then
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
     If Not Intersect(mCellule, Range("F10:F50")) Is Nothing Then
        If mCellule.Value <> 0 Then
             If Not mCellule.Offset(-1, 2) + 1 = mCellule Then
               MsgBox "Attention!"
               'mCellule.Activate
               Exit Sub 'Revient sur cellule en erreur
             End If
            End If
       End If
    End If
    Set mCellule = Target 'Memorise cellule précédente//
    End Sub
    merci,
    greg

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par greg778
    rem: un truc que j'ai remarqué aussi, c'est que si je sélectionne plusieurs cellules dans la colonne F, ça bug -> message d'erreur ds VB
    ça fait la même erreur si tu sélectionnes une colonne...

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens j'espére avoir tout corriger ...:

    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 mCellule As Range
    Dim mVal
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not mCellule Is Nothing And Target.Cells.Count = 1 Then
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
     If (Not Intersect(mCellule, Range("F10:F50")) Is Nothing) And Intersect(mCellule, Range("F10:F50")).Cells.Count = 1 Then
        If mCellule.Value <> 0 And mCellule.Value <> mVal Then
        If Not mCellule.Offset(-1, 2) + 1 = mCellule Then
               MsgBox "Attention!" & mCellule.Offset(-1, 2).Address & " +1<>  " & mCellule.Address
               'mCellule.Activate
              ' Exit Sub 'Revient sur cellule en erreur
             End If
            End If
       End If
    End If
    Set mCellule = Target.Cells(1, 1) 'Memorise cellule précédente//
    mVal = mCellule.Value 'Memorise valeur précédente
     
    End Sub

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    j'ai encore une "erreur 91 : Variable objet ou Variable de bloc With non définie" quand je suis par exemple sur une cellule dans une autre colonne et que je descends à la cellule suivante avec la flèche... ??

    en tout cas un grand merci, c déjà très bien

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    jai rajouté dans la première condition pour que le test ne s'effectue que si on modifie une valeur de la colonne F, mais le problème reste le même si je clique dans une autre colonne puis dans la colonne F...

    ça ne fait pas d'erreur si la cellule d'où l'on vient et où on va est vide, par contre si l'une des 2 à une valeur <> null, ça fait l'erreur!!

    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 mCellule As Range
    Dim mVal
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not mCellule Is Nothing And Target.Cells.Count = 1 And Target.Column = 6 Then
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
     If (Not Intersect(mCellule, Range("F10:F197")) Is Nothing) And Intersect(mCellule, Range("F10:F50")).Cells.Count = 1 Then
        If mCellule.Value <> 0 And mCellule.Value <> mVal Then
        If Not mCellule.Offset(-1, 2) + 1 = mCellule Then
               MsgBox "Attention! Vous changez de série!"
               'mCellule.Activate
              ' Exit Sub 'Revient sur cellule en erreur
             End If
            End If
       End If
    End If
    Set mCellule = Target.Cells(1, 1) 'Memorise cellule précédente//
    mVal = mCellule.Value 'Memorise valeur précédente
     
    End Sub

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    oui ... cela arrive si intersection entre les 2 plages de cellules est nulle sur le test du nombre de cellule ....en écrivant le test en 2 ligne ça l'air mieux :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not mCellule Is Nothing And Target.Cells.Count = 1 Then
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
     If (Not Intersect(mCellule, Range("F10:F50")) Is Nothing) Then
      If Intersect(mCellule, Range("F10:F50")).Cells.Count = 1 Then
        If mCellule.Value <> 0 And mCellule.Value <> mVal Then
        If Not mCellule.Offset(-1, 2) + 1 = mCellule Then
               MsgBox "Attention!" & mCellule.Offset(-1, 2).Address & " +1<>  " & mCellule.Address
               'mCellule.Activate
              ' Exit Sub 'Revient sur cellule en erreur
             End If
            End If
       End If
      End If
    End If
    Set mCellule = Target.Cells(1, 1) 'Memorise cellule précédente//
    mVal = mCellule.Value 'Memorise valeur précédente
     
    End Sub

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    merci j'essaye ça!

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    qu'elle ligne?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    j'ai rien dit!! en recopiant j'ai oublie de rajouter la déclaration des variables!!

    en tout cas un tout grand merci, c nickel,
    il me reste à analyser tout ça pour pouvoir le refaire....

    à+,
    greg

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    je t'embête encore!!

    lorsque j'entre une nouvelle valeur et que je descends à la case du dessous avec enter ou down, ça fonctionne, mais pas quand je passe à la case de droite avec right!?! Est-ce dû au fait qu'on fait une restriction sur la colonne F??

    merci

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut test lors de la perte du focus d'une cellule
    Bonjour,
    A bbil, est-ce que ton code fonctionne avec Excel 97, parce que j'ai voulu l'essayer et il ne se passe rien du tout. Quel résultat devrait donner ce code à l'écran ??

    jpleroisse

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut Re: test lors de la perte du focus d'une cellule
    Citation Envoyé par leroissejp
    Bonjour,
    A bbil, est-ce que ton code fonctionne avec Excel 97, parce que j'ai voulu l'essayer et il ne se passe rien du tout. Quel résultat devrait donner ce code à l'écran ??

    jpleroisse
    pour excel 97 ... je sais pas ... sinon pour tester le code modifie données dans zone F10:F50
    et lit à nouveau la demande de greg

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    bbil, je t'embête encore!! un dernier ptit problème...

    lorsque j'entre une nouvelle valeur dans la plage vérifiée et que je descends à la case du dessous avec enter ou down, ça fonctionne, mais pas quand je passe à la case de droite avec right!?! (or c'est ce que je dois faire pour compléter ma feuille, d'abord rentrer la valeur ds la colonne F puis dans la colonne G)
    Est-ce dû au fait qu'on fait une restriction sur la colonne F??

    merci

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par greg778
    bbil, je t'embête encore!! un dernier ptit problème...

    lorsque j'entre une nouvelle valeur dans la plage vérifiée et que je descends à la case du dessous avec enter ou down, ça fonctionne, mais pas quand je passe à la case de droite avec right!?! (or c'est ce que je dois faire pour compléter ma feuille, d'abord rentrer la valeur ds la colonne F puis dans la colonne G)
    Est-ce dû au fait qu'on fait une restriction sur la colonne F??

    merci
    que ce passe-t'il lorsque tu va vers la droite ...?

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    justement, il ne se passe rien! la vérification ne se fait pas...

  18. #18
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    oui à force de rajouter des tests....
    bon je crois que le probléme viens de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If mCellule = Target Then Exit Sub ' Cas ou pas de changement de cellule
    remplace la par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (mCellule.Address = Target.Address) And (mCellule.Value = Target.Value) Then Exit Sub   ' Cas ou pas de changement de cellule

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 118
    Points : 57
    Points
    57
    Par défaut
    et bien non bbil, ça ne change pas...

    si j'entre une nouvelle valeur ou que je modifie la valeur en F6 par exemple et que je me place sur G6 à l'aide de la flèche droite, le test ne s'effectue pas...

  20. #20
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par greg778
    et bien non bbil, ça ne change pas...

    si j'entre une nouvelle valeur ou que je modifie la valeur en F6 par exemple et que je me place sur G6 à l'aide de la flèche droite, le test ne s'effectue pas...
    oui mais en F6 c'est normal la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Not Intersect(mCellule, Range("F10:F50")) Is Nothing) Then
    limite l'action de F10 à F50 ... ( c'est toi qui as modifié cette ligne un peu plus haut...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. JTable perte de Focus sur une Cellule
    Par La_Bande_A_Zozo dans le forum Composants
    Réponses: 1
    Dernier message: 25/07/2007, 17h32
  2. [2.0] Perte de focus d'une fenêtre
    Par mister3957 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/03/2007, 12h19
  3. Contrôle de saisie sur une perte de focus d'une JTextfield
    Par comeochris dans le forum Composants
    Réponses: 3
    Dernier message: 03/04/2006, 15h21
  4. Comment détecter la perte de focus d'une fenêtre
    Par Leviathan_72 dans le forum Windows
    Réponses: 5
    Dernier message: 31/12/2005, 00h22
  5. Changement de style lors du focus sur une cellule
    Par zyg dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 23/12/2005, 10h29

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