Validation par MVB avec insertion de ligne longue au fil du temps

djGD

XLDnaute Nouveau
Bonjour à tous

Tout d'abord merci d'avance à ceux (celle) qui vont lire ce sujet.

Mon problème est simple, j'ai une macro (bouton Valider) qui me sert à insérer une ligne et venir copier des données précedemment saisie dans cette même ligne et ainsi de suite.

Cependant lorsque j'arrive vers 400 lignes c'est de plus en plus long à valider alors qu'avant tout se passe très bien, et sur l'ancien fichier (sous 2003) il y avait 5 fois plus de lignes et la validation était toujours aussi rapide(excel 2003 n'est plus présent sur les postes suite à une mise à jour serveur...)

Sub Valider1()
'
'
'
Rows("10:10").Select
Selection.Insert Shift:=xlDown
Rows("4:4").Select
Selection.Copy
Rows("10:10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("4:4").Select
Application.CutCopyMode = False
Selection.Copy
Rows("10:10").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A4").Select
Selection.Copy
Range("A10").Select
ActiveSheet.Paste
Range("t4:w4,y4,aa4:Ac4,Af4,Ah4,Aj4:Al4,Ao4,Aq4,At4:Au4").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("t4").Select
End Sub

On peut surement l'améliorer je ne suis qu'un débutant mais cela fonctionne.

Explication:
Je sélectionne ma ligne 10, j'insère une ligne
Je sélectionne la ligne 4, je copie les données puis je viens les copier en ligne 10
J'arrête le mode copie
Je supprime certaines données lignes 4 et j'en garde d'autre en mémoire
Je viens ranger le curseur en t4 pour la prochaine saisie.

Merci d'avance pour vos lumières
 

Pierrot93

XLDnaute Barbatruc
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Bonjour,

évite les "select", ce qui ralentit le code et fige le rafraichissement d'écran... exemple ci dessous :
Code:
Application.ScreenUpdating = False
Rows("10:10").Insert Shift:=xlDown
Rows("4:4").Copy
Rows("10:10").PasteSpecial Paste:=xlPasteValues

'.....
'en fin de procédure
Application.ScreenUpdating = True

bonne journée
@+

Edition : A noter, si formules sur la feuille, mettre également le calcul "sur ordre"....
 

Littledave

XLDnaute Junior
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Salut djGd et Pierrot,

Petite remarque sur ton code Dj, tu faisais plusieurs fois la même copie.
Ton code se résume au plus à

Code:
Rows("10:10").Insert Shift:=xlDown
Rows("4:4").Copy
Rows("10:10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("t4:w4,y4,aa4:Ac4,Af4,Ah4,Aj4:Al4,Ao4,Aq4,At4:Au4").ClearContents
Range("t4").Select

@++
David
 

djGD

XLDnaute Nouveau
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Bonjour,

évite les "select", ce qui ralentit le code et fige le rafraichissement d'écran... exemple ci dessous :
Code:
Application.ScreenUpdating = False
Rows("10:10").Insert Shift:=xlDown
Rows("4:4").Copy
Rows("10:10").PasteSpecial Paste:=xlPasteValues

'.....
'en fin de procédure
Application.ScreenUpdating = True

bonne journée
@+

Edition : A noter, si formules sur la feuille, mettre également le calcul "sur ordre"....

Merci Pierrot, oui il se trouve que dans ma ligne 4 j'ai un bon nombre de formules, et de mise en forme conditionelle, comment mettre le calcul sur "ordre"?
Cependant cela m'a fait gagné qu'une seconde sur la validation, si j'enleve certain select cela ne fonctionne plus.

Code:
Sub Valider1()
'
' Valider Macro
' Macro enregistrée le 05/03/2008 par SNR
'
    Application.ScreenUpdating = False
Rows("10:10").Insert Shift:=xlDown
Rows("4:4").Copy
Rows("10:10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("4:4").Select
Application.CutCopyMode = False
Selection.Copy
Rows("10:10").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A4").Copy
Range("A10").Select
ActiveSheet.Paste
Range("t4:w4,y4,aa4:Ac4,Af4,Ah4,Aj4:Al4,Ao4,Aq4,At4:Au4").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("t4").Select
      Application.ScreenUpdating = True
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Re,

pour arrêter le calcul essaye comme ceci :
Code:
Application.Calculation = xlCalculationManual
'ton code
Application.Calculation = xlCalculationAutomatic
 

djGD

XLDnaute Nouveau
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Merci david c'est bien ce qu'il me semblait aussi.
Avec ton code cela ne garde pas le format de mes cellules (tailles, encadrement, couleur...)
Je pense qu'il y a surement une petite ligne à ajouter ?

Merci Pierrot mais cela ne change bizarement pas mon temps de validation... ça ne doit pas venir de là
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Re,

si tu as des procédures événementielles dans ton fichier, les arrêter également...
Code:
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
 

Littledave

XLDnaute Junior
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Salut djGd,

J'ai ajouté Rows("10:10").PasteSpecial Paste:=xlPasteFormats qui va coller les formats des cellules de la ligne 4 sur la ligne 10.

Code:
Rows("10:10").Insert Shift:=xlDown
Rows("4:4").Copy
Rows("10:10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("10:10").PasteSpecial Paste:=xlPasteFormats


Range("t4:w4,y4,aa4:Ac4,Af4,Ah4,Aj4:Al4,Ao4,Aq4,At4:Au4").ClearContents
Range("t4").Select

@++
David
 

djGD

XLDnaute Nouveau
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Merci pour vos réponses
J'ai essayé la formule de david ( le format est bien conservé !) bien plus courte que ma précedente, temps de réponse 14.5s
Avec mon ancienne formule 13s
Avec les applications... (avec 1, 2 et les 3)= 14.5s

Logiquement le temps de réponse devrait être plus faible avec la formule de David je ne comprends pas bien ...
 

djGD

XLDnaute Nouveau
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Bonjour à tous
Je pense avoir trouvé.
Dans ma ligne 4 j'ai de nombreuses mise en forme conditionnelle, lorsque je la copie en ligne 10 les mises en formes condi' se copient aussi. Du coup plus le temps passe et plus la copie par la macro est longue...
En effet lorsque je supprime toute les mises en formes conditi' le temps de validation est de 1s contre 40s pour 35000 lignes !!!

J'aimerais donc savoir s'il est possible d'ajouter une ligne dans le VBA qui me permettrait de copier que "la couleur de remplissage" (donnée par la mise en forme condi') et non directement les formules de mes mises en forme conditionnelle ?!

Peut être quelque chose du style PasteSpecial Paste:=xlPaste...
Mon code est déjà présent un peu plus haut.

Merci d'avance !
 

Pierrot93

XLDnaute Barbatruc
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Bonjour,

J'aimerais donc savoir s'il est possible d'ajouter une ligne dans le VBA qui me permettrait de copier que "la couleur de remplissage" (donnée par la mise en forme condi') et non directement les formules de mes mises en forme conditionnelle ?!

pour ce faire, il faut effectuer les mêmes tests que ceux effectués par la MFC....

bon après midi
@+
 

djGD

XLDnaute Nouveau
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Bonjour,
pour ce faire, il faut effectuer les mêmes tests que ceux effectués par la MFC....
bon après midi
@+

Désolé mais je ne suis qu'un novice. C'est à dire qu'il faut que j'entre dans le VBA et que j'écrive exactement la même démarche (formule) que ma MFC ? Comment faire pour l'intégrer dès que la saisie des données est effectuée ? Dois je mettre toute mes MFC dans ma macro "valider"?

Merci Pierrot, de même !
 

Pierrot93

XLDnaute Barbatruc
Re : Validation par MVB avec insertion de ligne longue au fil du temps

Re,
C'est à dire qu'il faut que j'entre dans le VBA et que j'écrive exactement la même démarche (formule) que ma MFC ?
oui, "transcodé" en vba....

Comment faire pour l'intégrer dès que la saisie des données est effectuée ?

peut être placé un code dans l'événement "change" de la feuille de calcul.... fonction de ton projet....
 

Discussions similaires

Réponses
3
Affichages
568

Statistiques des forums

Discussions
312 088
Messages
2 085 201
Membres
102 816
dernier inscrit
bolivier