Envoyer la valeur d'un inputbox dans une cellule, avec recherche d'un mot

J’ai une grille de donnée dans une page nommée « Feuille de calculs » dont la 3ème colonne (colonne C) est composée de listes déroulantes. Je souhaite lorsque l’utilisateur choisit le mot « Autre » dans la liste déroulante d’une des cellules de la 3ème colonne, qu’il y ait une interaction avec celui-ci. L’interaction est qu’il demande à l’utilisateur d’introduire une valeur numérique qui sera envoyé dans la même ligne que le mot choisit « Autre » mais dans la 20 éme colonne (colonne T).

Donc à chaque fois que l’utilisateur choisit le mot « Autre » dans une liste déroulant de la colonne C, le programme demande à l’utilisateur d’introduire une valeur numérique et cette valeur est envoyé dans la même ligne mais dans la colonne T.

Il y a 2 manière de faire, soit faire appel un inputbox soit un userform avec un textbox.

J’ai essayé avec les deux cas mais dans les deux cas le problème persiste

Mon problème est que lorsque l’utilisateur choisit plusieurs fois le mot « Autre » le programme lui demande à chaque fois d’introduire une valeur pour les précédents. Donc lorsque que je choisi une première fois le mot « Autre » le programme demande d’introduire une valeur ce qui est déjà bien haha, mais lorsque je choisi une deuxième fois le mot « Autre », le programme me redemande d’introduire une valeur pour le premier « autre » et rebelote. J’ai envie d’éviter cela !

J’ai veux qu’une fois l’utilisateur introduit une valeur, le programme n’y revient plus.

Je sais que toute la solution est de bien configurer les conditions mais je n’y arrive pas

Est-ce quelqu’un peut-il m’aider SVP, ça fait plusieurs jours que je suis bloqué la dessus

code

If Target.Column = "3" Then
Set Plage = Sheets("Feuille de calculs").Columns(3) 'plage de recherche
        texte = "Autre"  'expression cherchée
        Flag = Find_Next(Plage, texte, Lignes())  'appel de la fonction
        If Flag Then  'si fonction retourne Vrai = expression trouvée dans la plage
            For i = LBound(Lignes) To UBound(Lignes)   'restitution des lignes correspondantes
                Debug.Print Lignes(i)            
                If Sheets("Feuille de calculs").Range(Lignes(i)).Offset(0, -1).Value = "Aucun" And texte = "Autre" Then
                    autre = InputBox("Vous avez sélectionné la case 'Autre' pour le type de singularité" & vbCrLf & "Veuillez introduire la perte de charge en Pa de l'équipement :", "Perte de charge singulière")
                    Sheets("Feuille de calculs").Range(Lignes(i)).Offset(0, 17).Value = autre
                    If IsNumeric(autre) = False Then
                        MsgBox "L'expression introduite n'est pas un nombre"
                        autre = InputBox("Vous avez sélectionné la case 'Autre' pour le type de singularité" & vbCrLf & "Veuillez introduire la perte de charge en Pa de l'équipement :")
                        Sheets("Feuille de calculs").Range(Lignes(i)).Offset(0, 17).Value = autre
                    End If
                End If
            Next i
        End If
    End If

Function Find_Next(Rng As Range, texte As String, Tbl()) As Boolean

    Dim Nbre As Integer, Lig As Long, Cptr As Long

    Nbre = Application.CountIf(Rng, texte)
    If Nbre > 0 Then
        ReDim Tbl(Nbre - 1)
        Lig = 1
        For Cptr = 0 To Nbre - 1
            Lig = Rng.Find(texte, Cells(Lig, Rng.Column), xlValues).Row
            Tbl(Cptr) = Cells(Lig, Rng.Column).Address
        Next
    Else
        GoTo Absent
    End If
    Find_Next = True
    Exit Function
Absent:
    Find_Next = False
End Function

Bonsoir,

Je ne vois pas pourquoi ! Pour que ça marche, il convient de passer par une évènementielle qui réagira à la sélection de Autre dans ta liste. La procédure s'exécutant, elle demandera un mot pour l'affecter à la cellule prévue.

L'opération étant terminée, c'est fini ! S'il rechoisit Autre, c'est une nouvelle opération, qui démolira peut être la première, mais l'opération consistant à demander un mot, on ne voit pas pourquoi ni comment elle se mettrait à en demander plusieurs. Si l'opération est correctement cadrée sur la ligne (Target.Row) bien sûr, et pour n'opérer qu'une seule inscription.

Cordialement.

Bonjour,

Je vous remercie pour votre réponse à ma sollicitation !

Je suis un débutant sur excel VBA, je me suis mis il y a seulement une semaine. Excusez moi, mais je n'ai pas totalement compris ce que vous avez dit et je n'arrive toujours pas à résoudre mon problème.

Bien à vous,

Bonjour,

Voilà, compte tenu des informations fournies :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim zot, n%
    If Target.Count = 1 And Target.Column = 3 Then
        If Target = "Autre" Then
            Do
                zot = InputBox("Vous avez sélectionné 'Autre' pour le type de singularité." _
                 & Chr(10) & "Veuillez introduire la perte de charge en Pa de l'équipement.", _
                 "Autre ?")
                If IsNumeric(zot) Then Exit Do
                If zot = "" Then Exit Do
                MsgBox "L'expression saisie n'est pas un nombre !" & Chr(10) & "Saisir un nombre.", _
                 vbExclamation, "Saisie invalide"
            Loop
            If zot <> "" Then Me.Cells(Target.Row, 20) = zot
        End If
    End If
End Sub

Cordialement.

Bonjour Monsieur,

Cela fonctionne parfaitement !

Je vous remercie infiniment !

Bien à vous,

Rechercher des sujets similaires à "envoyer valeur inputbox recherche mot"