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

Reprise de données dans les TextBox

Marboi

XLDnaute Occasionnel
Bonjour le forum,

J'avais concocté un petit programme sous excel 2000 et depuis que je suis passé sous 2007 j'ai une erreur de "procédure trop grande".

J'ai créé un bouton de modif de saisie qui ouvre l'USF et reprend toutes les données des 7 feuilles soit 965 Textbox dont voici un petit exemple :

Private Sub CommandButton3_Click()
UserForm3.Show
UserForm3.TextBox1.Value = Sheets("Secteur SD").Range("B7")
UserForm3.TextBox2.Value = Sheets("Secteur SD").Range("C7")
UserForm3.TextBox3.Value = Sheets("Secteur SD").Range("F7")
UserForm3.TextBox4.Value = Sheets("Secteur SD").Range("G7")
UserForm3.TextBox5.Value = Sheets("Secteur SD").Range("J7")
UserForm3.TextBox6.Value = Sheets("Secteur SD").Range("K7")
UserForm3.TextBox7.Value = Sheets("Secteur SD").Range("N7")
UserForm3.TextBox8.Value = Sheets("Secteur SD").Range("O7")
UserForm3.TextBox9.Value = Sheets("Secteur SD").Range("B8")
UserForm3.TextBox10.Value = Sheets("Secteur SD").Range("C8")
UserForm3.TextBox11.Value = Sheets("Secteur SD").Range("F8")
UserForm3.TextBox12.Value = Sheets("Secteur SD").Range("G8")
UserForm3.TextBox13.Value = Sheets("Secteur SD").Range("J8")
UserForm3.TextBox14.Value = Sheets("Secteur SD").Range("K8")
UserForm3.TextBox15.Value = Sheets("Secteur SD").Range("N8")
UserForm3.TextBox16.Value = Sheets("Secteur SD").Range("O8")
UserForm3.TextBox17.Value = Sheets("Secteur SD").Range("B9")
UserForm3.TextBox18.Value = Sheets("Secteur SD").Range("C9")
UserForm3.TextBox19.Value = Sheets("Secteur SD").Range("F9")
UserForm3.TextBox20.Value = Sheets("Secteur SD").Range("G9")
UserForm3.TextBox21.Value = Sheets("Secteur SD").Range("J9")
UserForm3.TextBox22.Value = Sheets("Secteur SD").Range("K9")
'PVM
UserForm3.TextBox23.Value = Sheets("Secteur SD").Range("B11")
UserForm3.TextBox24.Value = Sheets("Secteur SD").Range("C11")
UserForm3.TextBox25.Value = Sheets("Secteur SD").Range("F11")
UserForm3.TextBox26.Value = Sheets("Secteur SD").Range("G11")
UserForm3.TextBox27.Value = Sheets("Secteur SD").Range("J11")
UserForm3.TextBox28.Value = Sheets("Secteur SD").Range("K11")
'Range("N11") = TextBox29.Value ==> Pas de ratio
'Range("O11") = TextBox30.Value ==> Pas de ratio
UserForm3.TextBox31.Value = Sheets("Secteur SD").Range("B12")
UserForm3.TextBox32.Value = Sheets("Secteur SD").Range("C12")
UserForm3.TextBox33.Value = Sheets("Secteur SD").Range("F12")
UserForm3.TextBox34.Value = Sheets("Secteur SD").Range("G12")
UserForm3.TextBox35.Value = Sheets("Secteur SD").Range("J12")
UserForm3.TextBox36.Value = Sheets("Secteur SD").Range("K12")
' Range("N12") = TextBox37.Value ==> Pas de ratio
' Range("O12") = TextBox38.Value ==> Pas de ratio
UserForm3.TextBox39.Value = Sheets("Secteur SD").Range("B13")
UserForm3.TextBox40.Value = Sheets("Secteur SD").Range("C13")
UserForm3.TextBox41.Value = Sheets("Secteur SD").Range("F13")
UserForm3.TextBox42.Value = Sheets("Secteur SD").Range("G13")
UserForm3.TextBox43.Value = Sheets("Secteur SD").Range("J13")
UserForm3.TextBox44.Value = Sheets("Secteur SD").Range("K13")
'AF
UserForm3.TextBox45.Value = Sheets("Secteur SD").Range("J15")
UserForm3.TextBox46.Value = Sheets("Secteur SD").Range("K15")
UserForm3.TextBox47.Value = Sheets("Secteur SD").Range("N15")
UserForm3.TextBox48.Value = Sheets("Secteur SD").Range("o15")
'PrépA
UserForm3.TextBox49.Value = Sheets("Secteur SD").Range("B17")
UserForm3.TextBox50.Value = Sheets("Secteur SD").Range("C17")
UserForm3.TextBox51.Value = Sheets("Secteur SD").Range("F17")
UserForm3.TextBox52.Value = Sheets("Secteur SD").Range("G17")
UserForm3.TextBox53.Value = Sheets("Secteur SD").Range("J17")
UserForm3.TextBox54.Value = Sheets("Secteur SD").Range("K17")
UserForm3.TextBox55.Value = Sheets("Secteur SD").Range("N17")
UserForm3.TextBox56.Value = Sheets("Secteur SD").Range("O17")
'Info X
UserForm3.TextBox57.Value = Sheets("Secteur SD").Range("B19")
UserForm3.TextBox58.Value = Sheets("Secteur SD").Range("C19")
UserForm3.TextBox59.Value = Sheets("Secteur SD").Range("F19")
UserForm3.TextBox60.Value = Sheets("Secteur SD").Range("G19")
UserForm3.TextBox61.Value = Sheets("Secteur SD").Range("J19")
UserForm3.TextBox62.Value = Sheets("Secteur SD").Range("K19")
UserForm3.TextBox63.Value = Sheets("Secteur SD").Range("N19")
UserForm3.TextBox64.Value = Sheets("Secteur SD").Range("O19")
Etc...
.....................................jusqu'à
UserForm3.TextBox965.Value = Sheets("Secteur Epl").Range("K33")
End Sub


Que puis-je faire pour alléger cette usine à gaz ?

Merci d'avance de votre collaboration.
 

laetitia90

XLDnaute Barbatruc
Re : Reprise de données dans les TextBox

re,

For Each c In ActiveWorkbook.Sheets: c1.AddItem c.Name: Next

je fais une boucle sur toutes les feulles & je charge ma combobox nommée c1 en utilsant la methode AddItem
on peut l'ecrire differament en general j'utilise .list mais bon!! dans ton cas suffisant

Private Sub c1_Change()
es
End Sub

quand tu click sur la combobox c1 tu appel la macro es

la macro es boucle sur toutes tes cellules

Private Sub cmd2_Click()
If c1 <> "" Then es Else Exit Sub
End Sub

cmd2 correspond a ton bouton modifie mais pour etre sur que tu as selectionner une feuille par la combobox je mets une condition si tu as pas selectionne une feuille au prealable exit sub je sors de la procedure pas appel macro es
on on pu ecrire

la macro es
pour eviter d'ecrire 2 fois la meme chose a peut pres pareil
j'utilise cette methode le code plus court
d'ailleurs dans le code il y a une condition importante

If ActiveControl.Name = "c1" Then
Frame1.Controls("Textbox" & (i)) = s

Else
s.Value = Frame1.Controls("Textbox" & (i)).Value

End If

que dit cette condition

si ActiveControl.Name = "c1" donc la combobox

Frame1.Controls("Textbox" & (i)) = s
on copy des cellules vers textbox

autrement l'inverse

textbox vers cellules

s.Value = Frame1.Controls("Textbox" & (i)).Value

If i = 28 Or i = 36 Then i = i + 3 Else i = i + 1

c'est seulement quand on boucle pour faire l'impasse sur les textboxs inexistants

autrement la methode class de l' ami forum est tres bien aussi
je pense que tu la pas adapter

ps j'ai oublie les variables
Dim c, s As Variant, i As Long

si cela t'interesse il faut regarder dans les archives du forum pourqu'oi les declarer occupation memoire vive, vitesse d'execution ect...bref que dit ma declaration des variables pas bonne du tout enfin de compte
cela permet de reviser dim c,s variant la facilite la plus grosse utilisation memoire bravo!!
ce que j'aurais du ecrire
Dim c As Worksheet, s As Variant, i As Byte
c As Worksheet je boucle sur les feuilles suffisant
s As Variant la je prends pas de risque je sais pas ce que je recupere...
grosse occupation memoire de 16 a 24 octets je m'en sors bien
i as byte suffisant je depasse pas 255 controls
l'ideal en debut de module rajouter
option explicit
comme cela oblige de declarer les variables

en complement la macro es a la fin il vaut mieux l'ecrire comme cela supprimer le beep
le debut
Code:
If ActiveControl.Name = "c1" Then
Frame1.Controls("Textbox" & (i)) = s
Else
s.Value = Frame1.Controls("Textbox" & (i)).Value
End If
If i = 28 Or i = 36 Then i = i + 3 Else i = i + 1
Next s
End With
 
Dernière édition:

Marboi

XLDnaute Occasionnel
Re : Reprise de données dans les TextBox

Ouahhhhhhh, là j'ai du boulot, je vois bien que tu es une pro. Moi, le VBA, je m'y suis mis un peu par hasard en utilisant l'enregistreur de macro (mais on y prend facilement goût !) et je ne m'y adonne pas assez pour connaître tout ce que tu viens d'indiquer (et pourtant j'ai quelques bouquins qui traitent du VBA mais ce n'est pas souvent abouti ; quelques queues de début de procédures... De ce fait, j'y vais plus à tâtons, souvent ça fonctionne, sans doute pas comme vous faîtes tous sur ce forum, mais bon ! Ça me sera utile pour comprendre, déjà, et sans doute pour d'autres projets. Pour Forum, effectivement je ne sais pas adapter sa proposition.

En tout cas, merci beaucoup et bonne soirée à vous.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…