Bonjour,
Je suis novice sur ce forum et le suis encore plus en matière de macros VBA...pardonnez ainsi par avance le côté sans doute profane de mes propos et encore plus du code qui va suivre...
J'ai mis en place un classeur Excel dans le lequel une feuille permet, sur 3 colonnes D,E,F le reporting de temps (format hh:mm) dans des cellules pré renseignées dont les valeurs proviennent de formules de calcul se trouvant dans les cellules en question.
Autrement dit, si l'utilisateur DOIT changer la durée il le fait, sinon il n'a rien à faire.
Mon souhait était de :
- Alerter/ faire valider par l'utilisateur à travers une MessageBox et au clic sur sur une des cellules de la plage modifiable D5:F366, que la cellule indiquée va être modifiée
- Si l'utilisateur clique sur OK, ouvrir une InputBox pour permettre la saisie du nouveau temps au format obligatoire hh:mm (si possible en ne permettant pas une autre forme de saisie pour éviter que la valeur qui sera inscrite dans la cellule de destination n'altère d'autres calculs qui portent sur ces heures renseignées)
- Faire en sorte que la cellule de destination de la nouvelle valeur soit celle ayant été préalablement cliquée
- En cas de clic "annulé" sur la MessageBox ou l'Inputbox, que la valeur (issue de la formule en place) soit maintenue dans la cellule sélectionnée.
- Qu'en cas de clic par l'utilisateur sur une autre zone que celle modifiable il y ait une Msgbox lui indiquant l'impossibilité de modifier ces cellules
ça fonctionne bien si on valide la procédure avec Ok à la MsgBox puis une donnée au format hh:mm dans l'InputBox et Ok.
Par contre:
Si on fait "annuler" à la 1ère MsgBox ça génère une erreur d'exécution 1004 "La méthode Range de l'objet Worksheet a échoué"
Si on fait "annuler" à l'InputBox la valeur "Faux" s'inscrit dans la cellule sélectionnée et plante le reste des calculs de la feuille.
la procédure s'arrête.
Un grand merci d'avance à toute âme pouvant m'aider à régler ce problème, ça fait 2 jours que j'essaye plein de choses mais mes connaissances étant si fragiles, je ne m'en sort pas et passe d'une erreur à une autre, d'un comportement frelaté de ma macro à un autre...
Voici le code :
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
23
24
25
26
27
28
29
30 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox "Vous ne pouvez pas modifier cette cellule", vbCritical Cancel = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Selection.Count = 1 Then If Not Intersect(Target, Range("D5:F366")) Is Nothing Then Call SelectByInputBox End If End If End Sub Sub SelectByInputBox() Dim Adresse As String Dim Heure As String Dim str As String Adresse = InputBox("VERIFICATION DE LA CELLULE A MODIFIER", "Voulez-vous continuer la modification de la cellule indiquée ci-dessous ? :", ActiveCell.Address) On Error GoTo ErrorHandler Range(Adresse).Select Heure = Application.InputBox("Quel est l'heure modifiée, format HH:MM ?") If Not Right(Left(str, 3), 1) = ":" Then str = Left(str, 2) & ":" & Right(str, 2) Range(Adresse).Value = Heure Exit Sub ErrorHandler: MsgBox "La modification est abandonnée", vbCritical, "ATTENTION" Set Range(Adresse).Value = Nothing End Sub
Partager