Macro à optimiser

Joe_cooker

XLDnaute Nouveau
Bonjour à tous et a toutes
voici une autre je demande votre aide. d'avance merci a vous car grace a vous j'ai appris bcp.
j'essaye de me débrouiller tt seul en consultant ce forum mais il me reste des améliorations à apporter.
bref, je fais une copie coller d'un document text sous bloc note vers une feuille excel.
pour extraire les données que j'ai besoin j'utilise des formule avec vba et par la suite de procede à une extraction ds une autre feuille à l'aide du code application-match. voici les étapes:
coller ds colonne a feuille1
ds colonne B , C et D: j'utilise les Formules suivantes à l'aide du code ci dessous:

Sub Formul_SAL()

'Formul1 Macro
'
With Worksheets("SAL").Range("B2:B" & Worksheets("SAL").Range("A65000").End(xlUp).Row)
.Formula = "=TRIM(RC[-1])"
End With
'
' Formul4 Macro
'
With Worksheets("SAL").Range("C2:C" & Worksheets("SAL").Range("A65000").End(xlUp).Row)
.Formula = _
"=TRIM(SUBSTITUTE(REPLACE(RC[-2],25,200,""""),""."",""""))"
End With

' Formul5 Macro
'
With Worksheets("SAL").Range("D2:D" & Worksheets("SAL").Range("A65000").End(xlUp).Row)
.Formula = _
"=TRIM(SUBSTITUTE(REPLACE(RC[-3],1,25,""""),""*"",""""))"
End With
End Sub

jusqu'à la il n y a pas de probleme.

pour exploiter les données j'ai besoin de répartir les données de la colonne D ds les colonnes qui suit E , F ,G .... ces colonne varient selon le nombre d'accurences que j'ai obtenu ds la colonne D (ces données peuvent etre chiffre ou des lettre et sont séparés par un espace)
Pour réaliser cela. j'ai trouvé un code qui me convient parfaitement mais l'inconvinient est qui est tres long ,ca prend bcp de temps et je peux pas lancer à partir d'une autre feuille sans passer par la feuille1 ( ou se trouve les données à traiter par la suite. voici le code que j' utilse :
ce code me convient et mon probleme est sa lenteur et qe je ne p pas l'utiliser sans passer par la feuille ou se trouve les données:

Sub Repart_SCE()
'
' nom_prénom Macro
' Macro enregistrée le 01/09/2003 par Parents
'
Dim i, j, k, l As Integer
Dim n, nm As String

Sheets("SCE").Activate
l = Range("D65000").End(xlUp).Row

For i = 1 To l
k = 5
nm = Cells(i, 4): n = ""
For j = 1 To Len(Cells(i, 4))
If Mid(nm, j, 1) = " " Then Cells(i, k) = n: k = k + 1: n = "": GoTo label1
n = n + Mid(nm, j, 1)
label1:
Next j
Cells(i, k) = n
Next i
Sheets("RRE (2)").Activate
'
End Sub

si quelqu'un peut m'aider pour optimiser mes codes je serait reconnaissant.
NB: mon fichier est tres lourd et j'arrive pas à avoir 50k
il y a plus que 15 000 lignes a traiter et `plusieurs feuille de calcules
désolé de ne pas pouvoir envoyer le fichier . j'essayé avec winrar tout en laissant juste le minmum donnes ds le fichier mais il est lourd
j'espere etre explicite

Merci d'avance
 

Joe_cooker

XLDnaute Nouveau
Re : Macro à optimiser

Bonjour Roger, Clément, Paritec, le forum
Merci bcp à vous et un merci special à Roger pour les explications.
j'essaye votre code il est vraiment tres rapide. il me convinent parfaitement puisque il me donne les resultats (chiffres) que je veux exploiter de plus je doit l'appliquer sur 3 ou 4 feuilles et peut etre plus.
j'ai juste une petite question pour comprendre: j'ai constaté que la répartition des sous chaîne de la colonne D s'effectuée selon l'espace qui existe entre ses sous chaînes. cela me donne exactement les résultats que je cherche c'est a dire des nombre avec (,) et non avec (.) comme presentés ds la colonne D. Or il n'y a aucune procedure ds votre code qui permet de remplacer (.) par (,). je me demande est ce qu'il y a pas un lien avec la configuration. et est ce que je vais toujour avoir comme resultats des nombres avec (,) qu'il qe soit la configuration utilisée (chose que j'aimerai bien ).
Merci de m'éclaircir Roger.
Merci Clément, Paritec
Sachant que j'ai appris des trucs de vous et qe je suis reconnaissant.
à bien tôt...
 

ROGER2327

XLDnaute Barbatruc
Re : Macro à optimiser

Re...
La fonction Split() renvoie un tableau de chaînes de caractères à partir d'une chaîne de caractères prise dans la colonne D.
Au moment du transfert des données traitées du tableau oDat dans la feuille, les chaînes de caractères qui ressemblent à des nombres sont transformées en valeurs numériques, le reste est considéré comme du texte.
Par exemple, "3.14" sera considéré comme un nombre et écrit 3,14 si vous avez choisi la virgule comme séparateur décimal dans les options d'Excel.
Mais "abc.def" sera considéré comme du texte et écrit abc.def quel que soit votre choix en matière de séparateur décimal.
C'est pourquoi il n'y a pas lieu de prévoir un traitement particulier de cette question dans la procédure.
Voilà...​
ROGER2327
#3148
 

Joe_cooker

XLDnaute Nouveau
Re : Macro à optimiser

Merci bcp Roger
Je suis trés satisfait de tes explications et tres reconnaissant.
un gros merci et vive ce forum.
Dorenavant, Si j'ai des questions je ne hésiterai pas à m'adresser vous (bien sûr si vous avez pas d'objection).
à la prochaine Roger.
 

Discussions similaires

Réponses
7
Affichages
355

Statistiques des forums

Discussions
312 429
Messages
2 088 350
Membres
103 822
dernier inscrit
kader55