Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Action simultanée sur feuille et Userform

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ascal44

XLDnaute Occasionnel
Bonjour à tous,
Je vous joint un fichier sur le quel je bute :
Je voudrais que lorsqu'un textbox change une action de controle s'effectue sur une feuille. Or cette action s'effectue seulement lors de la fermeture de l'Userform !!!
Peut on remédier à ce problème ?
 

Pièces jointes

Re : Action simultanée sur feuille et Userform

Il s'agit de celà :
Code:
Dim col As String
Dim ligne As String
Dim n As Variant
Dim m As Variant
Dim x As Variant

Range("AB5:AZ200").ClearContents

If Range("T65536").End(xlUp).Row > 4 Then Range("T4:S200" & Range("T65536").End(xlUp).Row).ClearContents
col = 28
ligne = 5
For n = 5 To Range("U65536").End(xlUp).Row
  x = Split(Range("U" & n), " ")
  Cells(ligne, 20) = UBound(x) + 1
  For m = 0 To UBound(x)
    Cells(ligne, col + m) = x(m)
  Next m
  ligne = ligne + 1
Next n

TextBox8 = Range("case!B5")
TextBox9 = Range("case!B6")
TextBox10 = Range("case!B7")
TextBox11 = Range("case!B8")
TextBox12 = Range("case!B9")
TextBox13 = Range("case!B10")
TextBox14 = Range("case!B11")
TextBox15 = Range("case!B12")
TextBox16 = Range("case!B13")
TextBox17 = Range("case!B14")
TextBox18 = Range("case!B15")
TextBox19 = Range("case!B16")
TextBox20 = Range("case!B17")
TextBox21 = Range("case!B18")
TextBox22 = Range("case!B19")

TextBox23 = Range("case!C5")
TextBox24 = Range("case!C6")
TextBox25 = Range("case!C7")
TextBox26 = Range("case!C8")
TextBox27 = Range("case!C9")
TextBox28 = Range("case!C10")
TextBox29 = Range("case!C11")
TextBox30 = Range("case!C12")
TextBox31 = Range("case!C13")
TextBox32 = Range("case!C14")
TextBox33 = Range("case!C15")
TextBox34 = Range("case!C16")
TextBox35 = Range("case!C17")
TextBox36 = Range("case!C18")
TextBox37 = Range("case!C19")

TextBox38 = Range("case!D5")
TextBox39 = Range("case!D6")
TextBox40 = Range("case!D7")
TextBox41 = Range("case!D8")
TextBox42 = Range("case!D9")
TextBox43 = Range("case!D10")
TextBox44 = Range("case!D11")
TextBox45 = Range("case!D12")
TextBox46 = Range("case!D13")
TextBox47 = Range("case!D14")
TextBox48 = Range("case!D15")
TextBox49 = Range("case!D16")
TextBox50 = Range("case!D17")
TextBox51 = Range("case!D18")
TextBox52 = Range("case!D19")

TextBox53 = Range("case!E5")
TextBox54 = Range("case!E6")
TextBox55 = Range("case!E7")
TextBox56 = Range("case!E8")
TextBox57 = Range("case!E9")
TextBox58 = Range("case!E10")
TextBox59 = Range("case!E11")
TextBox60 = Range("case!E12")
TextBox61 = Range("case!E13")
TextBox62 = Range("case!E14")
TextBox63 = Range("case!E15")
TextBox64 = Range("case!E16")
TextBox65 = Range("case!E17")
TextBox66 = Range("case!E18")
TextBox67 = Range("case!E19")

Ceci afin d'avoir une mise à jour immédiate sur les places libre .
 
Re : Action simultanée sur feuille et Userform

Bonjour Pierre Jean , c'est vrai que mes explications sont embrouillées je vais tenter d'éclaircir celà :

Les textbox 8 à 67 correspondent à des cases à bouteilles avec en valeur le N° de case.
Quand l'userform s'initialise seul les N° de places vides s'affichent ( par rapport à la feuille case).

Lorsque je saisie de nouvelles entrées ; pour une référence de vin les places choisies se mettent en textbox5 pour être inscrite en colonne U de la feuille cave.

Puis sur la feuille case disparraissent pour indiquer que la case est occupée.

Ce que je voudrais c'est quand une case est sélectionnée pour se mettre en textbox 5 que le N° de case ne s'affiche plus dans son textbox.


J'espère m'être mieux exprimé ?
 
Re : Action simultanée sur feuille et Userform

Bonjour ascal44, pierrejean

Si j'ai bien compris en rajoutant une instruction pour vider le TB dans la procédure TextBoxXX_DblClick, cela devrait suffir.

Comme ceci :

Code:
Private Sub TextBox15_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox5 = "" Then
          TextBox5 = TextBox15
       Else
TextBox5.Value = TextBox5.Value & " " & TextBox15.Value
End If
[COLOR=blue]TextBox15 = ""[/COLOR]
End Sub

Par ailleurs tu pourrais aussi vider le TB 5 après avoir clicker sur le bouton "SAISIE". Cela te permetterais de faire plusieurs saisies à suivre.

Bonne après-midi
 
Dernière édition:
Re : Action simultanée sur feuille et Userform

Re,

Je me suis permis de "jouer" un peu avec ton fichier en y introduisant un module de classe (mon tout premier 🙂) en adaptant un code de Pierrot93, même si je ne maitrise pas bien ce genre de chose.

Le module de classe gére le double click sur les TextBox8 à ... TextBox67.
Cela permet de n'avoir qu'un seul code pour tous ces Textboxs.

L'alimentation des TextBoxs (8 à 67) est aussi modifiée avec une double boucle à l'initialisation du UserForm.

A+
 

Pièces jointes

Re : Action simultanée sur feuille et Userform

Merci Btqr,
Celà fonctionne ,
pourtant il me semblait avoir déjà essayé de vider les textbox en fin de code du bouton " saisie" sans succès.

J'avais sûrement fait une erreur quelque part .....
 
Re : Action simultanée sur feuille et Userform

Bonsoir Bqtr,
Ta modif est intéressante , elle aurait pu m'épargner pas mal de travail.
Pourrais tu me la commenter afin que je puisse la comprendre ?

Encore merci et bonne soirée
 
Re : Action simultanée sur feuille et Userform

Bonjour,

L'utilisation d'un module de classe dans ce cas, permet de définir une action commune à ensemble d'objet identique : ici des TextBox.
Cela évite de répéter plusieurs fois le même code.

Code:
Public WithEvents TBox As MSForms.TextBox
Création d'un nouvel objet équivalent à un TextBox et qui recevra les procédures évenementielles de ce dernier.

Code:
Private Sub TBox_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If UserForm1.TextBox5 = "" Then
     UserForm1.TextBox5 = TBox
Else
     UserForm1.TextBox5.Value = UserForm1.TextBox5.Value & " " & TBox.Value
End If
TBox = ""
End Sub
Procédure évenementielle du nouvel objet crée

Code:
Private MesObjets() As New Classe1
Variable qui fait référence au nouvel objet

Code:
For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.TextBox Then
        If Right(ctrl.Name, Len(ctrl.Name) - 7) > 7 And Right(ctrl.Name, Len(ctrl.Name) - 7) < 68 Then
           ReDim Preserve MesObjets(0 To k)
           Set MesObjets(k).TBox = ctrl
           k = k + 1
         End If
    End If
Next ctrl
Boucle sur tous les contrôles du Userform. Si le contrôle est un TextBox et si son N° est > à 7 et < à 68 Il sera associé à l'objet TBox et utilisera la procédure évenementielle crée pour lui.


Pour l'alimentation des TextBox à l'ouverture du UserForm, comme les N° des TB se suivent et qu'ils sont positionnés comme sur ta feuille "case", en colonne, c'est assez simple d'utiliser une boucle pour les remplir.
Code:
j = 8
For q = 2 To 5
  For z = 5 To 19
    Controls("TextBox" & j) = Sheets("case").Cells(z, q)
    j = j + 1
  Next
Next

j correspond au N° des TB
q correspond au N° de la colonne de la feuille "case"
z correspond au N° de la ligne de la feuille "case"

Le TB N° 8 recevra le contenu de la cellule ligne 5 colonne 2 de la feuille
Le TB N° 9 recevra le contenu de la cellule ligne 6 colonne 2 de la feuille
Le TB N° 10 recevra le contenu de la cellule ligne 7 colonne 2 de la feuille
.../...


A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
419
  • Question Question
Microsoft 365 Contrôle sur date
Réponses
8
Affichages
415
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…