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 = False2/
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 Thencela 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.Deletedu 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 SubBonnes 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 SubMytå
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 IfEt son utilisation dans un fichier :
Si tout ça est trop compliqué, je peux simplement supprimer la ligne
Selection.ClearContentset ç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 SubMytå
En plein dans le mille !
Bravo Myta et merci beaucoup. C'est exactement ce que je souhaitais.
Bonne journée et à la prochaine.