J'ai une macro qui est à l'intérieur d'un userform
Cette macro à pour but d'enregistrer les données qui sont afficher dans les textboxs et combobox sur la feuille 1
Par contre, le délais me semble très important par rapport à la longueur de la boucle. (Plus de 60 secondes) Est-ce que le fait de déclarer la variable as Variant peu avoir un impact ?
Est-ce que je serais mieux d'inclure le code dans un module au lieu d'écrire Call ..... et faire rouler le code à l'intérieur du userform ?
Voici les deux partie de code que j"utilise au sein du userform
HTML:
Private Sub Record_P_1_Data_Click()
Label1.Caption = "Traitement en cours"
UserForm1.Repaint
Call Record_P1_data
Label1.Caption = "Traitement terminé"
End Sub
HTML:
Sub Record_P1_data()
Dim n As Variant
For n = 31 To 68
Sheets("P1").Cells(2, n - 28).Value = UserForm1.Controls("TextBox" & n).Value
Sheets("P1").Cells(4, n - 28).Value = UserForm1.Controls("ComboBox" & n).Value
Sheets("P1").Cells(3, n - 28).Value = UserForm1.Controls("TextBox" & 1000 + n).Value
Next n
End Sub
Bonjour Tbft,
Cela risque d'être long étant donnée que je dois renommer les multiple textbox et combobox,
Dans les faits, le problèmes est que la macro prend beaucoup de temps à s'exécuter
comparativement à mon code qui à pour but d'afficher les résulats dans le userform l'enregistrement est beaucoup plus long
Bonsoir bloomby, tbft et soenda, bonsoir à toutes et à tous
bloomby, en reprenant l'idée de soenda, mais à l'envers (c'est mieux, je pense) essaie ceci :
Code:
[COLOR="Blue"]Sub[/COLOR] Record_P1_data()
[COLOR="Green"]'
' Déclarations de variables[/COLOR]
[COLOR="Blue"]Dim[/COLOR] n [COLOR="blue"]As Variant[/COLOR], indice
[COLOR="blue"]Dim[/COLOR] Tableau
[COLOR="Green"] ' on affecte les cellules C2 à BR4 de la feuille P1
' dans la variable Tableau[/COLOR]
Tableau = Sheets("P1").Range("C2:AN4")
[COLOR="green"] ' puis la boucle pour alimenter les TextBoxes[/COLOR]
[COLOR="Blue"]For[/COLOR] n = 31 To 68
Tableau(1, n - 30) = UserForm1.Controls("TextBox" & n).Value
Tableau(3, n - 30) = UserForm1.Controls("ComboBox" & n).Value
Tableau(2, n - 30) = UserForm1.Controls("TextBox" & 1000 + n).Value
[COLOR="blue"]Next[/COLOR] n
[COLOR="blue"]End Sub[/COLOR]
@bloomby : Testes le code suivant, c'est ta Sub avec un tableau intermédiaire.
Code:
Sub Record_P1_data()
Dim n As Integer
Dim t(2,37) as String
For n = 31 To 68
t(0, n - 31) = UserForm1.Controls("TextBox" & n).Value
t(1, n - 31) = UserForm1.Controls("TextBox" & 1000 + n).Value
t([COLOR=Red][B]2[/B][/COLOR], n - 31) = UserForm1.Controls("ComboBox" & n).Value
Next n
[FONT=monospace]Sheets("P1").[/FONT][[COLOR=Red][B]C[/B][/COLOR]2:AN4] = t
End Sub
de temps j'ai le même problème et je met value2 au lieu de value
et sa marche mais je ne sais pas pourquoi ....!!!!
si quelqu'un avait une explication, je suis preneur...
sinon as tu essayé de passer le calcul en manuel et de la repasee en automatique aprés ta bouucle de traitement. des fois ça aide bien
Comme indiqué dans mon message précédent "...c'est ta Sub..."
personnellement dans ce cas de figure j'utiliserais quelque chose comme :
Code:
...
t(0, n - 31) = UserForm1.Controls("TextBox" & n).Text
...
Et ce, même si je considère qu'un code du genre
Code:
For début To fin
machin = .controls("textBox" & bidule + truc).ce que tu voudras (au point ou en est)
n'est pas à proprement parlé, bien pensé.
En effet si dans le code de ton USF tu avais déclaré un Tableau t global, tu pourrais écrire dans chaque textBoxN_change(...), un truc du genre:
t(les indices qui vont bien) = TextBoxN.Text
Et au final ton record_p1 se réduit à: Sheets("P1").[C2:AN4] = t, que tu peux laisser dans l'...USF (au vu de la longueur du code).
La différence entre le "For ...Controls..." et les TextBoxN_Change, pénibles à écrire, est la différence entre l'attente et l'instantanéité ...
En ce qui concerne le Value2, je n'ai qu'une chose à dire, pour le traitement des dates, c'est top.
J'essai une nouvelle façon de faire, parce que jusqu'à maintenant cela ne fonctionne pas
est-ce que ce serais possible selectionner le range suivant comme value
La "Value" ou "Text" d'un textBox est une "String",
si tu veux mettre une "String" dans une variable "Integer" (par exemple),
tu dois faire un "Cast" (...)
Code:
Dim v As Integer
v = [COLOR=Blue][B]CInt[/B][/COLOR](UserForm1.Controls("TextBox" & n).Text)
J'espère que cela te sera utile.
Par contre, je ne sais pas ce que tu attends du code suivant