Microsoft 365 Accelerer une macro

netparty

XLDnaute Occasionnel
Bonjour à tous

J'utilise un formulaire qui me permet de remplir ma feuille excel, mais je trouve que la retranscription du formulaire vers la feuille est lente.
Alors je me demande si c'est normal car il y a 150 colonnes dans ma feuille ou c'est du a la macro ?

Private Sub b_valid_Click() 'bouton modif
If Me.Enreg <> "" And Me.TextBox1 <> "" Then
NoEnreg = Me.Enreg
For k = 1 To Ncol 'k = decalage de colone

X = Replace(Me("textBox" & k), " ", "")
If Me("textbox" & k) <> "" Then
f.Cells(NoEnreg, k) = Me("textBox" & k)
Else
f.Cells(NoEnreg, k) = Empty
End If
'End If
Next k
UserForm_Initialize
End If
End Sub

Bonne journée à tous
 

patricktoulon

XLDnaute Barbatruc
Bonjour
deja il faudrait peut etre nous donner le classeur avec toutes les feuilles

ceci:
Set f = Sheets("LISTE_A_PLAN")
déclenche une erreur et pour cause cette feuille n'y est pas dans ton classeur
en suite et là je suppute
dans ton event valider_click
tu pourrais instruire un array genre je l'appelle "tabl) et envoyer cet array dans la feuille en un block
f.Cells(NoEnreg, 1).Resize(, Ncol) = tabl
je ne vais pas parler des abréviations de code qui oblige vba a interpréter(evaluer) une expression car elle 'est pas clair ( ben si je l' en parle ;) )
du genre
Me("textBox" & k)' ca veux dire quoi ça

perso je l'ecris comme suit
Me.controls("textBox" & k)' la oui vba attaque directement dans la collection controls membre de ME

et pour finir puisque nous pouvons pas tester en absence de cette feuille je dirais que c'est plutot la sub initialyse qui est rappelée a la fin qui te plombe

bref

1°revoir ses écritures de code en bon et due forme
2° utiliser des variable globales du genre "ncol" c'est bien mais vu le type de codage qui part un peu dans tout les sens c'est dangereux
3°inscrire x cellules dans une boucle c'est pas le top ( vu plus haut )

allez renvoie un fichier avec cette feuille manquante
 

netparty

XLDnaute Occasionnel
Bonjour
deja il faudrait peut etre nous donner le classeur avec toutes les feuilles

ceci:
Set f = Sheets("LISTE_A_PLAN")
déclenche une erreur et pour cause cette feuille n'y est pas dans ton classeur
en suite et là je suppute
dans ton event valider_click
tu pourrais instruire un array genre je l'appelle "tabl) et envoyer cet array dans la feuille en un block
f.Cells(NoEnreg, 1).Resize(, Ncol) = tabl
je ne vais pas parler des abréviations de code qui oblige vba a interpréter(evaluer) une expression car elle 'est pas clair ( ben si je l' en parle ;) )
du genre
Me("textBox" & k)' ca veux dire quoi ça

perso je l'ecris comme suit
Me.controls("textBox" & k)' la oui vba attaque directement dans la collection controls membre de ME

et pour finir puisque nous pouvons pas tester en absence de cette feuille je dirais que c'est plutot la sub initialyse qui est rappelée a la fin qui te plombe

bref

1°revoir ses écritures de code en bon et due forme
2° utiliser des variable globales du genre "ncol" c'est bien mais vu le type de codage qui part un peu dans tout les sens c'est dangereux
3°inscrire x cellules dans une boucle c'est pas le top ( vu plus haut )

allez renvoie un fichier avec cette feuille manquante
Bonjour patricktoulon

Normalement cette feuille "Liste_a_plan" n'a rien a voir avec ce formulaire.
Peut-être que j'ai des erreurs qui ralentisse le tout ?

Bonne journée
 

netparty

XLDnaute Occasionnel
re


ok ben ça démarre dur dur le lundi pour certains ;) :p
si je l'ai marquer c'est que c'etait dans ton code
alors si cette feuille n'a rien a voir qu'elle est le sheets parent des cells(...,k) dans ton code ??

bonne nuit :p;)
En fait ce que j'ai fait, pour chaque feuille ou j'avais besoin d'un formulaire, j'ai copier mon formulaire et je l'ai juste adapter a ma feuille.

Est-ce que pour chaque formulaire indépendant je dois remplacer le cells(...,k) par autre chose du genre cells(...,m)

Merci
 

patricktoulon

XLDnaute Barbatruc
re
ecoute fini ta nuit sinon on va pas s'en sortir
c'est quand même pas moi qui ai codé ça
Private Sub UserForm_Initialize()


Set f = Sheets("LISTE_A_PLAN")
Set Rng = f.Range("A10:CN" & f.[A1000].End(xlUp).Row)
decal = Rng.Row - 1
Ncol = Rng.Columns.Count
Tbltmp = Rng.Value
Ncol = Rng.Columns.Count - 1
ReDim choix(1 To UBound(Tbltmp))
For I = LBound(Tbltmp) To UBound(Tbltmp)
Tbltmp(I, Ncol + 1) = I + decal
For k = 1 To Ncol
choix(I) = choix(I) & Tbltmp(I, k) & "|"
'If k >= 3 And k <= 5 Then TblTmp(I, k) = Format(TblTmp(I, k), "00 00 00 00 00")
Next k
choix(I) = choix(I) & (I + decal) & "|"
Next I

Me.ListBox1.List = Tbltmp
b_ajout_Click
End Sub


et cette feuille est absente dans le fichier que tu a posté
si tu pige pas je peux plus rien pour toi ;)
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @netparty, Patrick,

Dans ton post #4, tu as écrit : « Normalement cette feuille "Liste_a_plan" n'a rien à voir
avec ce formulaire. »


Pourtant, c'est bien dans la sub UserForm_Initialize() qu'il y a cette instruction :
Set f = Sheets("LISTE_A_PLAN") ; note bien que cette sub est appelée pour initialiser
le formulaire, donc elle est exécutée dès l'ouverture de ce UserForm (par le .Show) ;
alors forcément, le code VBA exécute l'instruction en rouge, mais comme la feuille
"LISTE_A_PLAN" n'existe pas dans ton classeur : l'affectation de f échoue ➯ plantage !
bug causé par une feuille inexistante ! dans ce cas, comment-veux-tu qu'on puisse
tester et améliorer le code VBA de ton formulaire si ça plante dès qu'on ouvre ce
formulaire ? c'est pourquoi y'a pas d'autre moyen que tu envoies un autre fichier
avec cette feuille ! ;)


D'autre part, je te laisse lire mon post #17.

soan
 

netparty

XLDnaute Occasionnel
re
ecoute fini ta nuit sinon on va pas s'en sortir
c'est quand même pas moi qui ai codé ça
Private Sub UserForm_Initialize()


Set f = Sheets("LISTE_A_PLAN")
Set Rng = f.Range("A10:CN" & f.[A1000].End(xlUp).Row)
decal = Rng.Row - 1
Ncol = Rng.Columns.Count
Tbltmp = Rng.Value
Ncol = Rng.Columns.Count - 1
ReDim choix(1 To UBound(Tbltmp))
For I = LBound(Tbltmp) To UBound(Tbltmp)
Tbltmp(I, Ncol + 1) = I + decal
For k = 1 To Ncol
choix(I) = choix(I) & Tbltmp(I, k) & "|"
'If k >= 3 And k <= 5 Then TblTmp(I, k) = Format(TblTmp(I, k), "00 00 00 00 00")
Next k
choix(I) = choix(I) & (I + decal) & "|"
Next I

Me.ListBox1.List = Tbltmp
b_ajout_Click
End Sub


et cette feuille est absente dans le fichier que tu a posté
si tu pige pas je peux plus rien pour toi ;)


Re patricktoulon

Désolé j'ai du oublier d'enlever cette feuille dans mon fichier test :)

Je vais faire un autre fichier pour test
 

netparty

XLDnaute Occasionnel
Bonjour @netparty, Patrick,

Dans ton post #4, tu as écrit : « Normalement cette feuille "Liste_a_plan" n'a rien à voir
avec ce formulaire. »


Pourtant, c'est bien dans la sub UserForm_Initialize() qu'il y a cette instruction :
Set f = Sheets("LISTE_A_PLAN") ; note bien que cette sub est appelée pour initialiser
le formulaire, donc elle est exécutée dès l'ouverture de ce UserForm (par le .Show) ;
alors forcément, le code VBA exécute l'instruction en rouge, mais comme la feuille
"LISTE_A_PLAN" n'existe pas dans ton classeur : l'affectation de f échoue ➯ plantage !
bug causé par une feuille inexistante ! dans ce cas, comment-veux-tu qu'on puisse
tester et améliorer le code VBA de ton formulaire si ça plante dès qu'on ouvre ce
formulaire ? c'est pourquoi y'a pas d'autre moyen que tu envoies un autre fichier
avec cette feuille ! ;)


D'autre part, je te laisse lire mon post #17.

soan
bonjour Soan

Je vais faire un autre fichier pour test car j'ai du oublier d'enlever certaine chose :)
 

soan

XLDnaute Barbatruc
Inactif
@netparty

Ajout : pour ton autre fichier test, avant de le mettre sur le forum, vérifie au moins
que ça compile correctement (sans planter à cause d'une erreur de compilation),
et que le UserForm ne plante pas dès son ouverture ! :)

soan
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
la je recommande une bonne nuit de sommeil à notre amis netparty qui est un peu parti de la cafetière d'ailleurs afin qu'il puisse nous revenir l'esprit clair
Les 30+ meilleures images de malade | malade, malade humour, bon  rétablissement

ok je sort ;) :p :oops:
 

netparty

XLDnaute Occasionnel
Re bonjour à tous

Voici mon fichier nettoyé.

Donc le soucis est la lenteur quand on écrit du formulaire vers la feuille.

J'ai 2 feuilles avec leur formulaire distinct :

Autres_documents
et Liste_a_plan

Si dans la feuille Autres_documents j'utilise son formulaire l'écriture est trés lente idem avec l'autre feuille

J’espère que c'est plus clair

Merci
 

Pièces jointes

  • Fichier 1.xlsm
    998.4 KB · Affichages: 16

Discussions similaires

Réponses
7
Affichages
292

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof