Code VBA trop lourd

Bonjour à tous,

Je travaille sur vba depuis quelques mois, je suis en entreprise et je l'utilise pour mon projet de fin d'études.

Je gère un planning, ligne par ligne soit chantier par chantier. A coté de chaque ligne un bouton ouvre un userform avec des dizaines de combobox qui permettent de remplir la ligne. Jusque là tout va bien, tout fonctionne.

Mon problème est que lorsque je ferme le userform et donc que ma ligne se remplit, là cela prend énormément de temps. Je pense que mon code est trop lourd mais je ne sais pas comment l'alléger!

Le voiçi:

Private Sub CommandButton1_Click()

numeroligne1 = 18

ActiveSheet.Cells(numeroligne1, 1) = chef1.Value

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 2).Clear
ActiveSheet.Cells(Z, 2) = "AF  " & Me.Controls("combobox" & y).Value
If Me.Controls("combobox" & y).Value = "" Then Cells(Z, 2) = ""
Z = Z + 5
y = y + 1
Loop Until y = 3

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 9) = Me.Controls("petitmateriel" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 5) = Me.Controls("personnel" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 6) = Me.Controls("personnelinterim" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 7) = Me.Controls("conducteur" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 8) = Me.Controls("materiel" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 10) = Me.Controls("materielloc" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 11) = Me.Controls("chauffeur" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 7

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 12) = Me.Controls("camion" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 7

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 13) = Me.Controls("os" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 7

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 14) = Me.Controls("camionloc" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 15) = Me.Controls("osloc" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 13

Z = numeroligne1
y = 3
Do
ActiveSheet.Cells(Z, 3) = Me.Controls("textbox" & y).Value
Z = Z + 5
y = y + 1
Loop Until y = 5

Z = numeroligne1 + 1
y = 1
Do
ActiveSheet.Cells(Z, 2) = Me.Controls("textbox" & y).Value
Z = Z + 5
y = y + 1
Loop Until y = 3

Z = numeroligne1
y = 1
Do
ActiveSheet.Cells(Z, 4) = Me.Controls("fourgonbox" & y).Value
Z = Z + 1
y = y + 1
Loop Until y = 7

Unload Me
End Sub

J'espère avoir été clair et vous remercie d'avance

Bonjour,

Sans voir le fichier, essaie comme ceci

Private Sub CommandButton1_Click()
Dim numeroligne1 As Integer, z As Integer
Dim y As Byte
Dim chef1

numeroligne1 = 18

ActiveSheet.Cells(numeroligne1, 1) = chef1.Value

z = numeroligne1
y = 1
Do

ActiveSheet.Cells(z, 2) = "AF  " & Me.Controls("combobox" & y).Value
If Me.Controls("combobox" & y).Value = "" Then Cells(z, 2).Clear
ActiveSheet.Cells(z, 2) = Me.Controls("textbox" & y).Value '?????????
z = z + 5
y = y + 1
Loop Until y = 3

z = numeroligne1
y = 1
Do
    With ActiveSheet
        .Cells(z, 9) = Me.Controls("petitmateriel" & y).Value
        .Cells(z, 5) = Me.Controls("personnel" & y).Value
        .Cells(z, 6) = Me.Controls("personnelinterim" & y).Value
        .Cells(z, 7) = Me.Controls("conducteur" & y).Value
        .Cells(z, 8) = Me.Controls("materiel" & y).Value
        .Cells(z, 10) = Me.Controls("materielloc" & y).Value
        .Cells(z, 14) = Me.Controls("camionloc" & y).Value
        .Cells(z, 15) = Me.Controls("osloc" & y).Value
    End With
z = z + 1
y = y + 1
Loop Until y = 13

z = numeroligne1
y = 1
Do
    With ActiveSheet
        .Cells(z, 11) = Me.Controls("chauffeur" & y).Value
        .Cells(z, 12) = Me.Controls("camion" & y).Value
        .Cells(z, 13) = Me.Controls("os" & y).Value
        .Cells(z, 4) = Me.Controls("fourgonbox" & y).Value
    End With
z = z + 1
y = y + 1
Loop Until y = 7

z = numeroligne1
y = 3
Do
ActiveSheet.Cells(z, 3) = Me.Controls("textbox" & y).Value
z = z + 5
y = y + 1
Loop Until y = 5

Unload Me
End Sub

J'ai mis des ???? derrière une ligne de code car je ne comprends pourquoi tu mets dans la cell(z,2) une valeur depuis une combobox y puis plus bas dans le code tu écrases cette valeur au profit de celle venant d'une textbox y

Cordialement

effectivement ca m'a l'air moins lourd, je vais essayer.

De la manière dont tu l'as réécrit tu écrases effectivement cette valeur, mais si tu relis le code que j'ai mis, lorsque plus bas je mets la valeur de la textbox j'écris plus haut "z=numeroligne1 + 1"

Je mets donc bien les deux valeurs dans deux cases différentes.


Ton code n'est pas plus rapide que le miens, je dirais que c'est kif kif.

Je me suis souvenu travailler dessus samedi sans qu'il soit aussi lent, et je fais des sauvegardes différentes chaque jour, j'ai alors repris une version antérieure et y ai rajouté les mêmes fonctions, je n'ai juste pas fait la mise en forme conditionnelle et elle est beaucoup plus rapide... le code reste pourtant le même!

C'est à n'y rien comprendre.

Re,

tu as beaucoup de formules dans ce fichier ?

Oui j'en ai pas mal.

En fait j'ai 30 lignes de planning, et un userform par ligne.

Le premier userform se ferme et remplit la ligne en quelques secondes ce qui est acceptable, mais ensuite les autres me foutent la mer** ils prennent plusieurs minutes à fermer.

Pourtant les codes sont simplement copiés/collés ils devraient marcher de la même manière.

Ce matin ils fonctionnaient tous assez rapidement, j'ai enregistré le fichier et rouvert plus tard et il n'y a que le premier qui soit assez rapide.

j'ai essayé un truc qui a bien fonctionne chez moi j'avais un fichier assez volumineux comme sa tu l'enregistres au format 97-2003 et tu le remet au format 2007

Le format excel 97-2003 n'a rien donnée.

En fait lorsque je lui fait saisir la première ligne le code tourne tout seul et dure quelques secondes(cela se voit au curseur qui alterne tout le temps entre la flèche blanche et le rond bleu).

Pour toutes les autres lignes, lorsque je lui fait saisir la flèche blanche reste un moment avant qu'il ne démarre le code et ensuite il alterne flèche blanche et rond bleu toutes les 30 secondes!

Ce que je ne pige pas c'est que le code est exactement le même(celui çi-dessus), la seule valeur qui change est mon z = numeroligne1 car c'est lui qui définit la ligne dans laquelle saisir.

Et d'ailleurs après réflexion vu que c'est la seule différence j'ai essayé de mettre dans mon userform2 la meme valeur de z= numeroligne1 et là ça fonctionne :s mais du coup je n'arrive à saisir que ma première ligne...

Après plusieurs heures j'ai enfin trouvé le soucis.

Tout bête comme je le pensais! Et difficile à trouver.

Dans mon tableau j'avais des lignes masquées par ci par là et je ne l'ais pas remarqué! c'est ce qui m'a fait ramer tout le bardas

Merci à ceux qui se sont penchés sur mon problème!

Je reviens vers vous, j'aimerais encore essayer d'améliorer mon programme.

Il est trop volumineux. Comme dit j'ai 30 userforms différents pour mes 30 lignes. la seule différence entre tous ces userforms est la variable "numeroligne1"

L'idée c'est que j'aimerais avoir un seul userform, mais 30 boutons pour l'activer.Du coup chaque bouton, associé à une ligne, paramètrerais un "numeroligne1" différent pour l'userform 1.

Est-ce possible? Comment?

merci à vous

re

c'est peut être possible mais sans voir ton fichier...

Crdlt

Rechercher des sujets similaires à "code vba trop lourd"