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 :

Problème avec InputBox pour modification de la valeur (format heure) d'une cellule cliquée


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 3
    Par défaut Problème avec InputBox pour modification de la valeur (format heure) d'une cellule cliquée
    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

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    [QUOTE=Achantis;11697522]ç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/QUOTE]

    Je te propose ceci qui devrait répondre à ta recherche :
    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
    Sub SelectByInputBox()
    Dim Adresse As String
    Dim Heure As String
    Dim str As String
    Adresse = Application.InputBox("VERIFICATION DE LA CELLULE A MODIFIER", "Voulez-vous continuer la modification de la cellule indiquée ci-dessous ? :", ActiveCell.Address)
    If Adresse <> "Faux" Then
        Heure = Application.InputBox("Quel est l'heure modifiée, format HH:MM ?")
        If Heure <> "Faux" Then
            If IsDate(Heure) Then
                ActiveCell.Value = Format(CDate(Heure), "hh:mm")
            Else
                MsgBox "erreur saisie"
            End If
        End If
    Else
        MsgBox "La modification est abandonnée"
    End If
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 3
    Par défaut
    Bonjour,

    Merci beaucoup tout d'abord pour ce retour rapide et efficace !
    L'annulation de la procédure à la 1ère étape de validation de la cellule est désormais pleinement opérationnelle, avec une msgBox, c'est super ! Merci.
    Par contre serait-il possible en cas d'annulation de laisser la macro active pour permettre à l'utilisateur de sélectionner une autre cellule ?
    Idem dans le cas d'une annulation de la procédure au moment de la 2ème étape avec l'inputBox.
    De la même manière qu'à la 2ème étape du processus une fois la saisie effectuée et validée, il faudrait pouvoir maintenir la macro active de telle façon que l'utilisateur puisse faire d'autres modifications si nécessaire.
    Par ailleurs si une donnée qui n'est pas au format date est saisie, après que l'utilisateur en ait été informé avec un message "format de saisie incorrect car pas hh:mm" il faudrait immédiatement lui donner la possibilité de refaire sa saisie correctement.
    Si d'ailleurs il était possible de convertir automatiquement ce que l'utilisateur a saisie en forçant l'utilisation de caractère numérique à 2 chiffres puis la séparation des ":" et enfin les 2 autres chiffres ça serait vraiment super.
    Vraiment merci encore pour cette aide et ce retour si rapide.

    Xavier

  4. #4
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Achantis Voir le message
    Par contre serait-il possible en cas d'annulation de laisser la macro active pour permettre à l'utilisateur de sélectionner une autre cellule ?
    Étant donné que tu utilises une macro événementielle, il suffit de changer de cellule.

    Pour les autres demandes, regardes avec le code 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Option Explicit
    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 Variant
    Dim Heure As Variant
    Adresse = Application.InputBox("VERIFICATION DE LA CELLULE A MODIFIER", "Voulez-vous continuer la modification de la cellule indiquée ci-dessous ? :", ActiveCell.Address)
    If Adresse <> "Faux" Then
        While Heure <> "Faux" And Not IsDate(Heure)
            Heure = Application.InputBox("Quel est l'heure modifiée, format HH:MM ?")
            If Heure <> "Faux" Then
                If InStr(Heure, ":") = 0 Then Heure = Left(Heure, 2) & ":" & Mid(Heure, 3)
                If IsDate(Heure) Then
                    ActiveCell.Value = Format(CDate(Heure), "hh:mm")
                Else
                    MsgBox "erreur saisie"
                End If
            End If
        Wend
    Else
        MsgBox "La modification est abandonnée"
    End If
    End Sub
    Une saisie 123 n'ai plus erronée et s'affiche 12:03 et 1230 donne 12:30

  5. #5
    Candidat au Club
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 3
    Par défaut
    Ca fonctionne parfaitement, merci beaucoup pour votre aide et votre gentillesse.
    à bientôt
    bonne continuation
    Xavier

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonsoir,

    Merci du retour et bon week-end à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/10/2018, 16h58
  2. Réponses: 6
    Dernier message: 09/02/2017, 16h37
  3. Réponses: 1
    Dernier message: 13/01/2012, 19h26
  4. [VB 6.0] - problème avec Datagrid pour l'affichage de valeurs
    Par jimbololo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2007, 10h57
  5. Réponses: 5
    Dernier message: 27/08/2003, 12h45

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