InputBox

Bonsoir,

Je cherche à inclure une InputBox à mon travail, mais je ne m’en sors pas.

Par exemple : Dans la cellule B1, l’utilisateur doit introduire une date. Si cette date est le 1er janvier 2008 ou une date ultérieure, rien de spécial ne devrait se passer, il devrait être possible de continuer à remplir cette feuille normalement.

Si la date inscrite est antérieure au 1er janvier 2008, un message devrait apparaître et indiquer que ce calcul n’est normalement pas prévu à une telle date mais que l’utilisateur peut malgré tout choisir de continuer avec cette date erronée (« Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ? »). L’utilisateur devrait alors pouvoir choisir de continuer quand même avec la date qu’il a choisie (clic sur « Oui » et passage à la cellule suivante) ou être « rejeté » automatiquement dans la cellule A1 après avoir cliqué « « Non » afin de recommencer sa saisie.

Je ne voudrais pas utiliser l’option « validation » qui n’est pas efficace, je crois, lors de copier-coller.

Pouvez-vous m’aider ?

Cordialement

Reboujour,

En fait il pourrait s'agir d'une InputBox ou d'une MsgBox selon la solution retenue, non ?

Voici un essai de ma part, mais comme je l'ai déjà dit, ça ne fonctionne pas comme voulu !

https://www.excel-pratique.com/~files/doc/6l5HlEssai.xls

Bonnes salutations.

Bonsoir,

2 petits points :

1/

As-tu vraiment besoin de cette ligne :

Application.EnableEvents = False

2/

lorsque tu mets With, tu fais référence à l'objet qui suit (dans ton code, c'est Target, mais cela peut être une feuille, un classeur.....)

Donc, pour y faire référence, il faut mettre un point ( . ) devant l'instruction qui suit

Dans ta ligne :

    If Value = "$A$1" < 39448 Then

cela ne peut pas fonctionner, cela ne veut rien dire

de plus tu déclares réponse, et tu utilises Ans :

        Ans = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)

Essaie avec ceci :

  With Target
    If .Value < CDate("01/01/2008") Then
      Dim réponse As Integer
        réponse = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)

Salut Felix,

Lorsque je fais un code - comme beaucoup d'autres personnes je présume - je tâtonne, je pique à gauche et à droite, etc. Je ne peux aussi pas te dire si j'ai vraiment besoin de telle ou telle ligne, comme tu me le demandes.

Ce que je sais par contre, c'est que tes deux propositions fonctionnent parfaitement. Merci infiniment pour ce sacré coup de main.

J'ai alors encore essayé de perfectionner un peu le code obtenu grâce à ton aide en effaçant la première date erronée si l''utilisateur indique qu'il veut la saisir à nouveau (Voulez-vous malgré tout continuer ? = Non). Sais-tu alors pourquoi la ligne

Selection.Delete

du code ci-dessous bloque ?

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M8")) Is Nothing Then
    With Target
    If .Value < CDate("01/01/2008") Then
      Dim réponse As Integer
        réponse = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)
          Select Case réponse
            Case vbYes
            Range("J13").Select
            Case vbNo
            Range("M8").Select
            Selection.Delete
        End Select
    End If
  End With
End If
Application.EnableEvents = True
End Sub

Bonnes salutations.

Salut le forum

Yvouille j'ai ajouté une condition

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M8")) Is Nothing Then
  With Target
    If .Value < CDate("01/01/2008") And Not IsEmpty(.Value) Then
      Dim réponse As Byte 'oui=6 non=7
        réponse = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)
          Select Case réponse
            Case vbYes
            Range("J13").Select
            Case vbNo
            Range("M8").Select
            Selection.ClearContents
          End Select
    End If
  End With
End If

End Sub

Mytå

Edition : Salut Félix

Yvouille ta macro vire en boucle continue car tu modifies la cellule M8

Re,

ce que tu demandes, par cette ligne, c'est de supprimer une cellule...

Cette cellule sera forcément remplacée par une autre, soit du bas, soit de la droite

Si la suppression n'est pas possible, c'est que quelque chose l'en empêche

maintenant, savoir pourquoi tu ne peux pas la supprimer, ma boule de cristal n'est pas bavarde ce soir.....

A moins que la feuille ne soit protégée, il y a sûrement une autre raison, et pour la trouver, sans fichier, ce ne sera pas facile

PS, comme tu as supprimé dans ton code la ligne "inutile", tu peux donc supprimer l'avant-dernière ligne (c'est bien de "piquer" du code, mais, c'est bien aussi, d'essayer de comprendre toutes les lignes de code, et au besoin, de demander leur signification)

Edit : Salut Mytå

Bonsoir Felix, bonsoir Myta, bonsoir le Forum,

Effectivement que ma feuille est protégée et que je ne devrais pas supprimer la cellule, comme me l'indique Felix, mais simplement la vider, comme me le propose Myta.

La macro de Myta ne fonctionne toutefois pas non plus sans problème. J'ai alors essayé de modifier le code en fonction de la cellue M8 qui est fusionnée avec d'autres jusqu'à la cellule Q8, mais ça ne fonctionne pas non plus. Voici mon essai :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M8")) Is Nothing Then
  With Target
    If .Value < CDate("01/01/2008") And Not IsEmpty(.Value) Then
      Dim réponse As Byte 'oui=6 non=7
        réponse = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)
          Select Case réponse
            Case vbYes
            Range("J13").Select
            Case vbNo
            Range("M8:Q8").Select
            Selection.ClearContents
          End Select
    End If

Et son utilisation dans un fichier :

Si tout ça est trop compliqué, je peux simplement supprimer la ligne

Selection.ClearContents

et ça jouerait quand même ; l'utilisateur devrait seulement effacer lui même la première date erronée inscrite en l'écrasant avec une nouvelle saisie. Mon intention en voulant utiliser cette ligne complémentaire était juste d'être perfectionniste, ce n'est pas une nécéssité absolue.

Bonne soirée à tous et merci déjà à Felix et à Myta pour leur aide.

Re le forum

Nouveau code, les cellules fusionnées sont cause de problème bien souvent !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M8")) Is Nothing Then
  With Target
    If .Value < CDate("01/01/2008") And Not IsEmpty(.Value) Then
      Dim réponse As Byte 'oui=6 non=7
        réponse = MsgBox("Ce calcul n’est normalement pas prévu à une date antérieure au 1er janvier 2008. Voulez-vous malgré tout continuer ?", vbYesNo)
          Select Case réponse
            Case vbYes
            Range("J13").Select
            Case vbNo
            Range("M8").Select
            Application.EnableEvents = False
              Selection.ClearContents
            Application.EnableEvents = True
          End Select
    End If
  End With
End If

End Sub

Mytå

En plein dans le mille !

Bravo Myta et merci beaucoup. C'est exactement ce que je souhaitais.

Bonne journée et à la prochaine.

Rechercher des sujets similaires à "inputbox"