Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion jean
  • Date de début Date de début

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 !

J

jean

Guest
bonjour au FORUM

Je cherche a accelerer mes macros car je dois attendre 30min pour que le resultat s'affiche: c'est beaucoup trop long
il y a peut etre qqc a faire sur l'ordinateur?

merci
 
re

Voici le fichier épuré

Par contre je pense qu'il n'y aura pas photo entre travailler sur des variables et travailler sur des cellules

[file name=Classeur2_20050630104713.zip size=48564]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur2_20050630104713.zip[/file]
 

Pièces jointes

bonjour pascal

un gd merci pour le coup de main

je viens d'essayer ta macro: encore un petit probleme!

Quand nombre de lignes>500 dans ordre 1 je recois le message/

'erraur 13, incompatibilite de type'

tant que je ne depasse pas les 500 lignes la macro s'execute normalement
 
Bonjour,

Juste une idée comme ça, plus ou moins évoquée avant : les if / and enchainé ca bouffe du temps pour rien. en imbriquant différents IF, on sort des tests dès qu'une condition n'est pas remplie. En mettant les conditions dans un ordre logique (la condition la plus restrictive en premier) on doit gagner pas mal de ressources machine...

A+
 
Avec l'idée de 2passage cela donnerait
Option Explicit


Sub ordre1()

Dim MonTableauSource As Variant
Dim MonTableauSource2
Dim MonTableauCible()
Dim MaLigne As Long
Dim x As Long, y As Long, z As Long, i As Byte
Dim verif As Boolean

MaLigne = Worksheets('Ordre1').Range('A65536').End(xlUp).Row

MonTableauSource = Sheets('Ordre1').Range('A1😛' & MaLigne)

MaLigne = Worksheets('Ordre0').Range('A65536').End(xlUp).Row

z = 0
MonTableauSource2 = Worksheets('ordre0').Range('A1😛' & MaLigne)

For x = 1 To UBound(MonTableauSource)
verif = False
For y = 1 To UBound(MonTableauSource2)
If MonTableauSource(x, 1) = MonTableauSource2(y, 1) Then
If MonTableauSource(x, 4) = MonTableauSource2(y, 4) Then
If MonTableauSource(x, 8) = MonTableauSource2(y, 8) Then
If MonTableauSource(x, 10) = MonTableauSource2(y, 10) Then
If MonTableauSource(x, 12) = MonTableauSource2(y, 12) Then
verif = True
Exit For
End If
End If
End If
End If
End If
Next y
If verif = False Then
z = z + 1
ReDim Preserve MonTableauCible(1 To 16, 1 To z)
For i = 1 To 16
MonTableauCible(i, z) = MonTableauSource(x, i)
Next
End If
Next x

Worksheets('1').Range('A1😛' & z) = Application.Transpose(MonTableauCible)

End Sub

PAr contre Jean bizarre ce que tu dis supérieur à 500 car avec le fichier que tu m'as envoyé avec les 3000 lignes ma macro ne bug pas
 
Re

Je viens de faire un test avec la dernière version et les + de 3000 lignes cela prend 10 secondes avec un Pentium4 2800 512Mo de Ram contre 25 secondes sans les if imbriqués

Voilà

Message édité par: Pascal76, à: 30/06/2005 12:26
 
re,

apres le message erreur 13....

il me surligne ca/
Worksheets('1').Range('A1😛' & z) = Application.Transpose(MonTableauCible)

moi ca continue a buger


je verifis encore et encore

a+
 
re

Alors là franchement j'y comprend rien avec ton fichier ça bug avec la macro copier du mien qui ne bug pas
Tu dois avoir une propriété du fichier qui gène c'est pas possible mais je vois pas

Modifies la macro comme ceci ça a marché sur ton fichier (un peu plus long mais bon tu auras le résultat)

Sub ordre1()

Dim MonTableauSource As Variant
Dim MonTableauSource2
Dim MonTableauCible()
Dim MaLigne As Long
Dim x As Long, y As Long, z As Long, i As Byte
Dim verif As Boolean


MaLigne = Worksheets('Ordre1').Range('A65536').End(xlUp).Row

MonTableauSource = Sheets('Ordre1').Range('A1😛' & MaLigne)

MaLigne = Worksheets('Ordre0').Range('A65536').End(xlUp).Row

z = 0
MonTableauSource2 = Worksheets('ordre0').Range('A1😛' & MaLigne)

For x = 1 To UBound(MonTableauSource)
verif = False
For y = 1 To UBound(MonTableauSource2)
If MonTableauSource(x, 1) = MonTableauSource2(y, 1) Then
If MonTableauSource(x, 4) = MonTableauSource2(y, 4) Then
If MonTableauSource(x, 8) = MonTableauSource2(y, 8) Then
If MonTableauSource(x, 10) = MonTableauSource2(y, 10) Then
If MonTableauSource(x, 12) = MonTableauSource2(y, 12) Then
verif = True
Exit For
End If
End If
End If
End If
End If
Next y
If verif = False Then
z = z + 1
ReDim Preserve MonTableauCible(1 To 16, 1 To z)
For i = 1 To 16
MonTableauCible(i, z) = MonTableauSource(x, i)
Next
End If
Next x

For x = 1 To 16
For y = 1 To z
Worksheets('1').Cells(y, x) = MonTableauCible(x, y)
Next
Next

End Sub
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 problème CHDIR
Réponses
59
Affichages
2 K
Réponses
16
Affichages
500
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…