Soucis pour traitement réponse InputBox

Phil39

XLDnaute Occasionnel
Bonjour,

Je débute et j'ai un petit soucis avec le traitement de la réponse une inputbox sous Excel.
Chaque ligne Excel correspond à des champs d'un dossier.

je demande à l'utilisateur un numéro correspondant à un dossier qui s'affichera par la suite dans un userform.

J'ai identifié plusieurs cas que je dois traité en fonction de la réponse dans l'inputbox :

1) l'utilisateur demande un dossier qui est trouvé : fermeture de l'inputbox et affichage du userform

2) l'utilisateur demande un dossier qui n'est pas trouvé : messagebox indiquant que le dossier est manquant avec un Retry et un Cancel
Si Retry : de nouveau l'inputBox
Si Cancel : on quitte la procédure et on revient à un userform de présentation

3) L'utilisateur a demandé la recherche d'un dossier par erreur. Un clic sur le Cancel provoque la sortie de la procedure et on revient à un userform de présentation


WARNING : Ne rigolez pas avec mon code, je DEBUTE !!!:p

J'ai donc fais cela :

Sub Recherche()
Dim DossierTrouve As Range
Dim Ligne As Integer
Dim reponse As String
Sheets("Feuil1").Select

reponse = InputBox("Numero du dossier ?", "Recherche d'un dossier de panne")
Set DossierTrouve = Range("Feuil1!A:A").Find(reponse)

' touche Cancel
If reponse = False Then
Unload SuiviDossier
Load General
General.Show
Exit Sub
End If

'Trouve ou pas le dossier
If DossierTrouve Is Nothing Or reponse = 0 Then
Select Case MsgBox("Dossier non trouvé !", vbRetryCancel + vbExclamation, "Résultat de la recherche")
Case vbCancel
Unload SuviDossier
Load General
General.Show
Exit Sub
End Select
Unload SuviDossier
Load SuiviDossier
SuiviDossier.Show
Exit Sub
Else
Ligne = DossierTrouve.Row
' MsgBox ("Trouvé ligne :" & Ligne)
DossierTrouve.Select
End If

Suite de mon code pour afficher un userform et remplir les champs.

End Sub

Le soucis c'est que mon code ne fonctionne pas avec le Cancel et qu'une fois sur deux il plante sur les load/unload des userforms.

Pouvez-vous m'aider, j'ai un peu de mal malgrés toute les lectures faites dans ce forum et d'autres.

D'avance merci
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Soucis pour traitement réponse InputBox

Bonjour Phil, bonjour le forum,

pour le Cancel je pense qu'en modifiant cette ligne ça devrait passer :
Code:
' touche Cancel
If reponse = False Then
par :
Code:
' touche Cancel
If reponse = "" Then
D'autre part, quand tu veux afficher une UserForm, la commande
Code:
UserForm1.Show
charge et affiche l'Userform1. Inutile d'utiliser Load puisque Show le fait implicitement. De même que Unload vide et ferme. Peut-être ces conseils te premettront de mieux faire fonctionner ton code qui, au passage, ne fait pas rire du tout car il est bien écrit.
 

jp14

XLDnaute Barbatruc
Re : Soucis pour traitement réponse InputBox

Bonjour
Bonjour Robert


On est dans le cas ou l'on doit faire un saut en amont pour relancer la procédure, pour cela on utilisait l'instruction goto.
Une manière de réaliser cette opération sans goto est la boucle Do,...loop.
Code:
Sub Recherche()
Dim DossierTrouve As Range
Dim Ligne As Integer
Dim reponse As String
Sheets("Feuil1").Select
Do
    reponse = InputBox("Numero du dossier ?", "Recherche d'un dossier de panne")
    If reponse <> "" Then 
        Set DossierTrouve = Range("Feuil1!A:A").Find(reponse)' recherche
            If Not DossierTrouve Is Nothing Then
                Exit Do
            End If
    End If

    Select Case MsgBox("Dossier non trouvé !", vbRetryCancel + vbExclamation, "Résultat de la recherche")
        Case vbRetry
        ' on recommence 
        Case vbCancel ' on quitte la procédure
            Unload SuviDossier
            Exit Sub
    End Select
 

Loop

Unload SuiviDossier
Load General
General.Show

End Sub

A tester

JP
 

Phil39

XLDnaute Occasionnel
Re : Soucis pour traitement réponse InputBox

Bonjour Robert,

Merci de vos lumières et de vos bons conseils.
Ce n'est pas toujours évident quand on se lance dans le Grand Bain et vos encouragements ont du bien au moral :)

Si ce code peut être optimisé, je suis preneur car voir un bon code c'est permettre de comprendre et comprendre c'est savoir !

[EDIT] Et avec JP, je prend des leçons :)
 
Dernière édition:

Phil39

XLDnaute Occasionnel
Re : Soucis pour traitement réponse InputBox

Bonsoir JP,

Avec vos lumieres, j'ai donc mis cela en modifiant l'emplacement de deux instructions pour permettre à mon code d'ouvrir le userform et de remplir les champs en cas de dossier trouvé :

-------------------------------------------
Sub Recherche()

Dim DossierTrouve As Range
Dim Ligne As Integer
Dim reponse As String
Sheets("Feuil1").Select

Do
reponse = InputBox("Numero du dossier ?", "Recherche d'un dossier de panne")
If reponse <> "" Then
Set DossierTrouve = Range("Feuil1!A:A").Find(reponse) ' recherche
If Not DossierTrouve Is Nothing Then
Exit Do
End If
End If

Select Case MsgBox("Dossier non trouvé !", vbRetryCancel + vbExclamation, "Résultat de la recherche")
Case vbRetry
' on recommence
Case vbCancel ' on quitte la procédure
Unload SuviDossier
General.Show

Exit Sub
End Select


Loop


' Remplissage des champs du dossier trouvé dans mon userform

SuiviDossier.show

SuiviDossier.TextBox18.Value = ActiveCell.Offset(rowOffset:=0, columnOffset:=2).Value

' Numero dossier
TextBox21.Value = ActiveCell.Offset(rowOffset:=0, columnOffset:=0).Value
.
.
.
.
.
.
End Sub
---------------------------------

Quand j'arrive sur l'inputbox pour la première fois et que je clique sur Annuler, j'obtiens :
Dossier non trouvé
Recommencer/Annuler
et non pas une sortie de procédure

Et sur les deux choix possibles de la MsgBox :
Si recommencer : c'est bon, l'inputBox s'affiche de nouveau
Si annulé : ça part en vrille mais c'est un autre sujet je pense.

En tout cas, merci du coup de main, c'est sympa
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 861
Messages
2 092 963
Membres
105 572
dernier inscrit
Anna17