macro longue à s'executer

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 !

nrdz83

XLDnaute Impliqué
Bonsoir à tous peut être une amélioration à apporter à ce code ?
Voila c'est un userform avec des données saisie via dtpicker et textbox et qui se range dans des tableaux en fonction du mois choisi , ce code fonctionne trés bien mais il m'est bien 5 à 6 secondes avant de s'executer est ce normal ? ou il y a une amèlioration à apporter. Sur mon classeur j'ai d'autre smacros qui elles s'ex"cutent normalement .
D'avance merci à tous, mes amitiés

Private Sub CommandButton1_Click()
' Mise en place des valeurs saisies
Dim Mois As Byte

Mois = Month(DTPicker1)

With Sheets(Mois + 1)
DerLig = .Range("A65000").End(xlUp).Row + 1
.Cells(DerLig, 1) = DTPicker1
.Cells(DerLig, 2) = ComboBox1
.Cells(DerLig, 3) = TextBox3
.Cells(DerLig, 4) = TextBox4
.Cells(DerLig, 5) = TextBox1
.Cells(DerLig, 7) = ComboBox2
.Cells(DerLig, 8) = ComboBox3
.Cells(DerLig, 9) = ComboBox5
.Cells(DerLig, 10) = TextBox2
.Cells(DerLig, 11) = ComboBox4
.Cells(DerLig, 12) = ComboBox6
.Cells(DerLig, 13) = ComboBox7
.Cells(DerLig, 14) = ComboBox8
.Cells(DerLig, 15) = ComboBox9
.Cells(DerLig, 16) = ComboBox10
.Cells(DerLig, 17) = ComboBox11
.Cells(DerLig, 18) = ComboBox12
.Cells(DerLig, 19) = ComboBox13
.Cells(DerLig, 20) = ComboBox14
.Cells(DerLig, 21) = ComboBox15
End With
' On décharge le formulaire
Unload Me
End Sub
 
Re : macro longue à s'executer

Bonsoir nrdz83,

Compte tenu de la discontinuité des (outre le DTPicker qui est seul), Combo1 Textbox dans le désordre 3,4,1 et ensuite 2, recombo 4,6,7 et ensuite à suivre, il me semble difficile de gérer mieux la chose...

Pour le temps, c'est autre chose, tributaire du travail à faire (ici on saute de case en case dans un désordre ordonné, certes, mais désordre tout de même), de la puissance du pc, etc...

Je vais suivre les réponse car je suis curieux...

ScreenUpdating peut aider à mieux faire....

Bonne soirée.

Jean-Pierre

Edit : Bonsoir Saïd, très lent moi.....
 
Dernière édition:
Re : macro longue à s'executer

Bonsoir said et jean piette , non said ton code n'apporte rien; tu penses jean pierre que ça viendrai de l'ordre de classement des cpmbobox et textbox ?
Si je les range par ordre ok par contre les (derling) eux ne le seront plus ,on peut le faire ça ?
Merci pour vos lumière s
 
Re : macro longue à s'executer

Re,

Non, changer un ordre pour une autre désordre n'apportera rien.

Je viens de charger un fichier dans lequel il y a une macro pourtant simple... Pour l'exécuter il m'a fallu plus de 15 secondes... Sur une autre machine elle demandera, peut-être, 3 secondes...

Je ne sais donc pas quoi te répondre....

Bonne soirée.

Jean-Pierre
 
Re : macro longue à s'executer

Bonsoir à tous.
En l'absence d'un fichier témoin, il est difficile de se faire une idée. Les cellules modifiées par la procédure provoquent-t-elle d'importants recalculs ? Si oui, on peut essayer quelque chose du genre :
Code:
Private Sub CommandButton1_Click()
' Mise en place des valeurs saisies
Dim Mois As Byte, DerLig As Long, tmp(1 to 1, 1 to 21)

	Mois = Month(DTPicker1)

	With Sheets(Mois + 1)
		DerLig = .Range("A65000").End(xlUp).Row + 1
		tmp(1,1) = DTPicker1
		tmp(1,2) = ComboBox1
		tmp(1,3) = TextBox3
		tmp(1,4) = TextBox4
		tmp(1,5) = TextBox1
		tmp(1,6) = .Cells(DerLig, 6) [COLOR="SeaGreen"]' Nécessaire pour ne pas effacer le contenu de cette cellule.[/COLOR]
		tmp(1,7) = ComboBox2
		tmp(1,8) = ComboBox3
		tmp(1,9) = ComboBox5
		tmp(1,10) = TextBox2
		tmp(1,11) = ComboBox4
		tmp(1,12) = ComboBox6
		tmp(1,13) = ComboBox7
		tmp(1,14) = ComboBox8
		tmp(1,15) = ComboBox9
		tmp(1,16) = ComboBox10
		tmp(1,17) = ComboBox11
		tmp(1,18) = ComboBox12
		tmp(1,19) = ComboBox13
		tmp(1,20) = ComboBox14
		tmp(1,21) = ComboBox15
		[COLOR="Olive"][B].Range(.Cells(DerLig, 1), .Cells(DerLig, 1).Offset(0, 20)).Value = tmp[/B][/COLOR]
	End With
' On décharge le formulaire
	Unload Me
End Sub
qui charge les données dans un tableau et "colle" l'ensemble en une fois dans la feuille.​
Proposé à tout hasard...​
Bonne soirée
ROGER2327
 
Re : macro longue à s'executer

Bonsoir,
Testé sur un fichier bidon le résultat est instantané, sans tableau intermédiaire
Otes moi un doute de l'esprit : tu déclares "Mois" en byte, il s'agit donc forcément de l'index de ta feuille (Mois + 1) !?
A+
kjin
 
Re : macro longue à s'executer

🙂bonjour kjin et le forum oui mes feuilles sont mensuel et nommée de janvier à décembre , le code fonctionne trés bien mais long à s'éxécuter, voila pourquoi j'ai posé la question juste pour essayer de comprendre et savoir si on pouvait améliorer la macro. Apparement roger 2327 (trop fort lol) à trouvé. Merci encore à tous pour vos lumières et vous souhaite une bonne journée, les amitiés
 
Re : macro longue à s'executer

Re bonjour à tous je viens de m'apercevoir d'un petit problème dans le code
dans ma colonne "F" j'ai une formule qui me permet de calculer la somme des heures "=D3-C3", et à chaque saisie cette formule est éffacée et affiche dans ma barre de formule 00:00:00 .
Comment modifié ce code ? d'avance merci à tous , amitiés .

Mois = Month(DTPicker1)

With Sheets(Mois + 1)
DerLig = .Range("A65000").End(xlUp).Row + 1
tmp(1,1) = DTPicker1
tmp(1,2) = ComboBox1
tmp(1,3) = TextBox3
tmp(1,4) = TextBox4
tmp(1,5) = TextBox1
tmp(1,6) = .Cells(DerLig, 6) ' Nécessaire pour ne pas effacer le contenu de cette cellule.
tmp(1,7) = ComboBox2
tmp(1,8) = ComboBox3
tmp(1,9) = ComboBox5
tmp(1,10) = TextBox2
tmp(1,11) = ComboBox4
tmp(1,12) = ComboBox6
tmp(1,13) = ComboBox7
tmp(1,14) = ComboBox8
tmp(1,15) = ComboBox9
tmp(1,16) = ComboBox10
tmp(1,17) = ComboBox11
tmp(1,18) = ComboBox12
tmp(1,19) = ComboBox13
tmp(1,20) = ComboBox14
tmp(1,21) = ComboBox15
.Range(.Cells(DerLig, 1), .Cells(DerLig, 1).Offset(0, 20)).Value = tmp
End With
' On décharge le formulaire
Unload Me
End Sub
 
Re : macro longue à s'executer

Bonjour à tous,

En fait, tu veux sauvegarder la formule en colonne F. Le code ci-dessous devrait fonctionner:

Code:
Private Sub CommandButton1_Click()
' Mise en place des valeurs saisies
Dim Mois As Byte, [COLOR=red]tmp(21) As Variant[/COLOR]
Mois = Month(DTPicker1)
With Sheets(Mois + 1)
DerLig = .Range("A65000").End(xlUp).Row + 1
tmp(1) = DTPicker1
tmp(2) = ComboBox1
tmp(3) = TextBox3
tmp(4) = TextBox4
tmp(5) = TextBox1
tmp(6) = [COLOR=red].Cells(DerLig, 6).FormulaR1C1[/COLOR]  ' Nécessaire pour ne pas effacer le contenu de cette cellule.
tmp(7) = ComboBox2
tmp(8) = ComboBox3
tmp(9) = ComboBox5
tmp(10) = TextBox2
tmp(11) = ComboBox4
tmp(12) = ComboBox6
tmp(13) = ComboBox7
tmp(14) = ComboBox8
tmp(15) = ComboBox9
tmp(16) = ComboBox10
tmp(17) = ComboBox11
tmp(18) = ComboBox12
tmp(19) = ComboBox13
tmp(20) = ComboBox14
tmp(21) = ComboBox15
.Range(.Cells(DerLig, 1), .Cells(DerLig, 1).Offset(0, 20)).Value = tmp
End With
' On décharge le formulaire
Unload Me
End Sub

Je n'ai mis qu'une dimension pour la table tmp, la deuxième n'étant pas nécessaire.

@+

Gael
 
Re : macro longue à s'executer

Bonjour !
À Gael : entièrement d'accord avec les modifications proposées. Je disais :
En l'absence d'un fichier témoin, il est difficile de se faire une idée.
et lorsqu'on sait que la sixième colonne de la zone concernée contient une formule, votre modification s'impose.
La déclaration de tmp comme Variant étant implicite, je l'avais omise, mais, pour la précision du code, vous avez raison de la faire.​
Pour nrdz83 : Pouvez-vous préciser votre problème de décalage (quelle saisie ? de quoi ? où ?) car, si mon code fonctionnait, celui de Gael devrait fonctionner pareillement.​
À bientôt,
ROGER2327
 
Re : macro longue à s'executer

Re,

Je pense que c'est parceque la table tmp commence à 0 et non pas à 1. tu as 2 solutions:

Soit tu ajoutes l'instruction "Option base 1" pour demander à XL que les index de tables commencent à 1:

Code:
Option Explicit
[COLOR=red]Option Base 1[/COLOR]
Private Sub CommandButton1_Click()
' Mise en place des valeurs saisies

Soit tu décales les index dans la macro de 0 à 20 au lieu de 1 à 21:

Code:
Private Sub CommandButton1_Click()
' Mise en place des valeurs saisies
Dim Mois As Byte, tmp(21) As Variant
Mois = Month(DTPicker1)
With Sheets(Mois + 1)
DerLig = .Range("A65000").End(xlUp).Row + 1
tmp(0) = DTPicker1
tmp(1) = ComboBox1
tmp(2) = TextBox3
tmp(3) = TextBox4
tmp(4) = TextBox1
tmp(5) = .Cells(DerLig, 6).FormulaR1C1  ' Nécessaire pour ne pas effacer le contenu de cette cellule.
tmp(6) = ComboBox2
tmp(7) = ComboBox3
tmp(8) = ComboBox5
tmp(9) = TextBox2
tmp(10) = ComboBox4
tmp(11) = ComboBox6
tmp(12) = ComboBox7
tmp(13) = ComboBox8
tmp(14) = ComboBox9
tmp(15) = ComboBox10
tmp(16) = ComboBox11
tmp(17) = ComboBox12
tmp(18) = ComboBox13
tmp(19) = ComboBox14
tmp(20) = ComboBox15
.Range(.Cells(DerLig, 1), .Cells(DerLig, 1).Offset(0, 20)).Value = tmp
End With
' On décharge le formulaire
Unload Me
End Sub

Je ne sais pas si cela marchait bien avant ou si c'est le fait d'avoir ajouté l'instruction Dim pour dimensionner la table.

@+

Gael

Edit: Salut Roger.
 
- 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
5
Affichages
1 K
G
Retour