Microsoft 365 Probleme avec userform

kyasteph

XLDnaute Occasionnel
Bonjour
J'ai réaliser un userform,je souhaite que une fois lancé,le userform les differents texbox soient remplis par les valeurs
des differentes cellules correspondantes de la ligne 9 de la feuille 1
mais quand je le lance,une erreur "Erreur d'exécution '438" apparait.
Merci de m'aider s'il vous plait
 

Pièces jointes

  • Usf_Saisie1.xlsm
    22.7 KB · Affichages: 23

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @kyasteph

Ton erreur provient du fait que tu compares deux objets sans préciser quelle propriété

Rajoutes ".Name"


VB:
Private Sub UserForm_Initialize()
    If ActiveSheet.Name = Sheets("Feuil1").Name Then
        TextBox1.Value = Selection.Offset(0, 0).Value
    End If
End Sub

Ceci étant dit, ce n'est pas non plus une très bonnes méthode pour alimenter des TextBoxes à cause de "Selection", essaies plutôt comme ceci :


VB:
Private Sub UserForm_Initialize()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets("Feuil1")

    With Usf_Saisie1
    .TextBox1 = Ws.Range("C9")
    .TextBox2 = Ws.Range("D9")
    .TextBox3 = Ws.Range("J9") '<<<< Dommage que ça ne suivent pas on aurait pu faire une boucle...
    End With
End Sub

Bien à toi, à vous
@+Thierry
 

kyasteph

XLDnaute Occasionnel
Bonjour
Je vous remercie pour votre réponse;cela m'a fait un peu avancer dans mon projet.
Cependant je rencontre une difficulté quand je passe à un autre onglet(cf Pj);l'alimentation des texbox et combobox ne se font pas correctement;j'ai l'impression que l'USF garde en mémoire les dernieres informations.
Ps:J'ai deux autres onglets non ajoutés car ils ont la meme structure que ceux présents.

Merci de m'aider s'il vous plait
 

Pièces jointes

  • Usf_Saisie1-1.xlsm
    39.6 KB · Affichages: 7

Staple1600

XLDnaute Barbatruc
Bonjour le fil

•>_Thierry
Bah alors? Un tit coup de mou ? ;)
VB:
Private Sub UserForm_Initialize()
Dim Ws As Worksheet, i%,Boucle_d_Or
Boucle_d_Or = Array("C", "D", "J")
Set Ws = ThisWorkbook.Worksheets("Feuil1")
For i = 0 To 2
Me.Controls("TextBox" & i + 1) = Ws.Cells(9, Boucle_d_Or(i))
Next
End Sub
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonsoir @kyasteph @Staple1600 , Le Forum

Bon après un bon steack frais et une salade de tomates fraiches aussi (ça change !) , j'ai un peu regardé...

Tu veux donc travailler en Multi-Sheets, ce n'est pas un problème avec un seul UserForm...

Par contre vu que les Feuilles n'ont pas la même structure entre Feuil1 & Feuil 2 c'est ok, mais Feuil3 & Feuil4 sont differentes... La je ne m'en mèle pas... (Panier de crabes !)
Je te laisse mettre les bonnes cellulles en face des TextBoxs entre les deux cas du 'Select Case' sur Trigger ListBox1_Click, après on verra éventuellement pour y adjoindre la fameuse "Boucle_d_Or" de notre ami Staple1600... ;)

PS pour les ComboBox ca ne s'alimente pas comme ça normalement, mais j'ai du mal à comprendre la finalité de ta demande en fait... Y compris les boutons "Flèches" Précédent/Suivant" ... tu veux naviguer entre les lignes après avoir naviguer entre les feuilles ?

Bien à toi, bien à vous
@+Thierry
 

Pièces jointes

  • XLD_Kyasteph_Usf_Saisie1-1_v01.xlsm
    36.9 KB · Affichages: 5

kyasteph

XLDnaute Occasionnel
Bonjour,
Je vous remercie encore pour votre précieuse aide qui m'a énormement fait avancer;comme vous pourriez le voir dans la piece jointe
mais vous le regarderez avec votre oeil d'expert.
j'attends vos recommandations éventuelles si besoin est de corriger ou améliorer ce que j'ai fait.

Cependant j'ai un autre souci:je souhaiterais avoir la possibilité de modifier les valeurs des differents champs de l'USF;en particuler
les comboboxs 1;3 et 4.
je souhaite que cela se fasse de facon intuitive en tapant les premiers lettres ou chiffres(concernant le compte générale)
NB:Les différentes occurences des combobox se trouve dans la feuille "BD"

Merci de m'aider s'il vous plait
 

Pièces jointes

  • XLD_Kyasteph_Usf_Saisie1-1_v02.xlsm
    43.6 KB · Affichages: 5

kyasteph

XLDnaute Occasionnel
Bonjour,
Apres quelques recherches ,j'ai pu regler mon probleme en iserant le code suivant:
ComboBox1.List() = Sheets("BD").Range("A2:A5").Value
Et cela marche;sauf que j'ai un autre souci:
Je ne veux saisir que les noms se trouvant dans la liste;pour se faire j'ai la valeur true à la propriété matchrequired.
Mon probleme est que en tapant une autre valeur,le message d'erreur"Propriété non valide apparait,comment remplacer ce message par un msgbox comme celui ci : "ce client n'existe pas,veuiller chois dans la liste svp".

Merci d'avance pour votre aide
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @kyasteph , le Forum

Ca à l'air bien tordu cette histoire, tu initialises la Combobox1 en affichant le client qui est dans Feuil1 ou dans Feuil2... , mais en même temps tu voudrais que cette même ComboBox1 soit alimentée par les valeurs qui se trouvent en Feuille BD et en plus ce ne sont pas les même valeurs...

Et tu voudrais que la ComboBox est un MatchRequired = True mais sans le message "Propriété non valide"
C'est un panier de crabes ! LoL

Pour moi il faut que Konan existe en BD pour aller plus loin, regarde comment je m'y prends pour la ComboBox1 dans cette version, et je n'ai plus besoin de MatchRequired...

Bonne soirée
@+Thierry
 

Pièces jointes

  • XLD_Kyasteph_Usf_Saisie1-1_v03.xlsm
    45.8 KB · Affichages: 9

fanch55

XLDnaute Barbatruc
Bonsoir le Fil,

Pour moi il faut que Konan existe en BD pour aller plus loin,

Thierry, tu n'as pas prévu la sortie par tabulation .... On peut aller plus loin .... :)

Konan.gif
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @fanch55

Ah oui, bien vu, c'est vrai que si un petit filou fait du tabulation il peut passer avec KO !
Je ne vois pas trop comment faire en même temps ce contrôle dans l'évènement Change, mais bon même si c'est un peu lourd, on peut blinder la sortie :

Code:
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim OK As Boolean
Dim i As Integer

With Me.ComboBox1
        For i = 0 To .ListCount - 1
            If .List(i) = .Value Then
                OK = True
                Exit For
            End If
        Next
        If OK = False Then
            MsgBox "Ce client n'existe pas,veuiller choisir dans la liste svp !", vbCritical, "L'entrée ne match pas !"
            .ListIndex = 0
            .SetFocus
        End If
End With

End Sub

Bonne soirée
@=Thierry

Edit PS : en y réfléchissant pourquoi fait-on tout ça à une pauvre ComboBox, avec une ListBox on n'a pas à inventer la roue ! ;)
 

kyasteph

XLDnaute Occasionnel
Bonjour,
Merci une fois de plus pour votre réponse, mais vous avez dit :"en y réfléchissant pourquoi fait-on tout ça à une pauvre ComboBox, avec une ListBox on n'a pas à inventer la roue ! ";En remplaçant les combobox par des listbox(ou bien texbox?), pensez vous qu'on aboutirait au même résultat,et comment ?
J'espère ne pas trop abuser,
Merci d'avance pour votre réponse.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Fanch55, le Fil

Oui mais bon ca sent le gaz cette histoire avec notre ami LoL, je voulais juste montrer ce que j'avais dit en PS du post #11 ;)

Par défaut, une ListBox le fait aussi le "MatchFirstLetter". mais c'est clair qu'on ne risque pas de saisir dedans !
(et donc plus besoin de toutes ses sous subs Change/Exit de la ComboBox pour vérifier sans utilser le MatchRequired = True mais sans le message "Propriété non valide" )

D'ailleurs c'est très bizarre, si quelqu'un sait comment intercepter et changer le message de MatchRequired qui est, en effet, très peu parlant...

@+Thierry
 

Discussions similaires

Réponses
9
Affichages
157

Statistiques des forums

Discussions
312 203
Messages
2 086 184
Membres
103 152
dernier inscrit
Karibu