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 FunctionBonsoir,
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 !
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 SubCordialement.
Bonjour Monsieur,
Cela fonctionne parfaitement
Je vous remercie infiniment !
Bien à vous,