none
Projet Excel 2016 action lorsque qu'une cellule est vide RRS feed

  • Question

  • Bonjour, voici mon problème : dans une cellule Excel (qu'on appellera TGCJeu) je rentre manuellement des données chiffrées qui correspondent à des températures et doivent êtres inférieures à -15°C.

    J'ai créer un code qui m'ouvre un MsgBox lorsque ce critère n'est pas respecté  :

      Dim Temp As Double = -15  
    
      Private Sub TGCJeu_Change(Target As Range) Handles TGCJeu.Change
            If TGCJeu.Value2 > Temp Then
                Dim result1 = MsgBox("Création d'une alerte T°C", vbOKCancel, "Alerte")
                If result1 = MsgBoxResult.Ok Then
                    Globals.Feuil9.Visible = True
                    Globals.Feuil9.Activate()
                    Globals.Feuil9.TEMPAL.Value2 = TGCJeu.Value2
                    Globals.Feuil9.ProdAl.Value2 = GCProdJeu.Value2
                    Globals.Feuil9.LotAl.Value2 = GCLotJeu.Value2
                End If
                If result1 = MsgBoxResult.Cancel Then
                    Exit Sub
                End If
                If TGCJeu.Value2 < Temp Then
                    Exit Sub
                End If
            End If
    
        End Sub

    Jusque là, tout fonctionne bien. Mais quand j'ai besoin d'effacer le contenu de la cellule, le MsgBox apparaît aussi alors qu'il ne devrait rien se passer.

    Que dois-je rajouter à mon code?

    merci


    JF Collombet ® CreateSpecificCulture

    dimanche 10 janvier 2016 09:23

Réponses

  • L'evénement "Changed" est lancé sur tout changement.

    Mettez un test sur ce que la cellule contient, par exemple si c'est une valeur numérique:

    if IsNumeric(TGCJeu.Value2) then
         'Ici faites le test et gestion sur Valeur>Temp..."
    endif
    


    Cyrille Precetti
    Bonne Année! Happy New Year!

    vendredi 15 janvier 2016 10:03

Toutes les réponses

  • La comparaison entre des entités aux formats différents peut être surprenante: String < Double....

    Avez-vous essayé de faire un cast:

    If TGCJeu.Value2 > Temp Then
    
    EndIf
    'A transformer en qqchose comme cela:'
     Dim ValeurDbl as double
     Try
          ValeurDbl = Convert.ToDouble(TGCJeu.Value2)
          'Ici le test'
          if ValeurDbl > Temp then
              'Faire la messagebox'
              MessageBox.Show("Message...","Titre", messageboxicons.YesNo)
          EndIf
     Catch e As FormatException
         Console.WriteLine("Impossible de convertir '{0}'en Double.", TGCJeu.Value2)            
     Catch e As OverflowException
          Console.WriteLine("'{0}' dépasse la capacité des Double.", TGCJeu.Value2)
     End Try



    Cyrille Precetti
    Bonne Année! Happy New Year!

    dimanche 10 janvier 2016 09:42
  • Bonjour et merci pour votre réponse rapide!

    je test ce code et je vous reviens


    JF Collombet ® CreateSpecificCulture

    dimanche 10 janvier 2016 10:25
  • Bonsoir et désolé de ma réponse tardive, voici ma nouvelle sub avec votre code.

    Lorsque les valeurs sont inférieures à "Temp" ou supérieures, tout fonctionne correctement.

    Mais j'ai toujours le soucis de l'apparition de la MsgBox lorsque j'efface la cellule


    JF Collombet ® CreateSpecificCulture


     Private Sub TGCJeu_Change(Target As Range) Handles TGCJeu.Change 
            Dim ValeurDBL As Double
            Try
                ValeurDBL = Convert.ToDouble(TGCJeu.Value2)
                If ValeurDBL > Temp Then
                    Dim result1 = MsgBox("Création d'une alerte T°C", vbOKCancel, "Alerte")
                    If result1 = MsgBoxResult.Ok Then
                        Globals.Feuil9.Visible = True
                        Globals.Feuil9.Activate()
                        Globals.Feuil9.TEMPAL.Value2 = TGCJeu.Value2
                        Globals.Feuil9.ProdAl.Value2 = GCProdJeu.Value2
                        Globals.Feuil9.LotAl.Value2 = GCLotJeu.Value2
                        If result1 = MsgBoxResult.Cancel Then
                            Exit Sub
                        Else
                            If ValeurDBL < Temp Then
                                Exit Sub
                            End If
                        End If
                    End If
                End If
            Catch e As FormatException
                Console.WriteLine("Impossible de convertir '{0}'en Double.", TGCJeu.Value2)
            Catch e As OverflowException
                Console.WriteLine("'{0}' dépasse la capacité des Double.", TGCJeu.Value2)
            End Try
    
        End Sub

    mardi 12 janvier 2016 17:12
  • L'evénement "Changed" est lancé sur tout changement.

    Mettez un test sur ce que la cellule contient, par exemple si c'est une valeur numérique:

    if IsNumeric(TGCJeu.Value2) then
         'Ici faites le test et gestion sur Valeur>Temp..."
    endif
    


    Cyrille Precetti
    Bonne Année! Happy New Year!

    vendredi 15 janvier 2016 10:03
  • Enfin cela fonctionne! merci encore à vous pour votre aide

    JF Collombet ® CreateSpecificCulture

    samedi 16 janvier 2016 07:12