help macro Excel !

osishame

XLDnaute Junior
Bonjour,

Je sollicite à nouveau votre aide pour le problème suivant. je dois réaliser une macro qui effectue le retraitement suivant :

On dispose de deux fichiers :

Fichier 1 – « F1 » constitué comme suit :
Colonne G : devise
Colonne K : montant suspens
Colonne P : Typologie

Fichier 2 – « fichier suspens »
Colonne A : typologie
Colonne B : libellé de typologie
Colonne D : devise
Colonne E : taux



Il s’agit :
- d’insérer une colonne en L et de la nommer (L1) : « Montant suspens ABS »
- d’insérer une colonne en R et de la nommer (R1) : « Libellé typologie »
- de nommer la colonne T (T1) : « taux de conversion »
- de nommer la colonne U (U1) : « Montant en euro »

Pour chaque ligne du fichier 1 :

La colonne L du fichier 1 (F1) prend comme valeur la Valeur absolue de la colonne Montant (K) du fichier 1 (F1)

Une procédure RechercheCopieLibellé permet de : comparer la typologie (colonne P) du fichier 1 (F1) avec la typologie (colonne A) du fichier 2 (fichier suspens) et de recopier en colonne R fu fichier 1 (F1) la valeur de la colonne B du fichier 2 (fichier suspens) dès qu’une correspondance est trouvée.

Une procédure RechercheCopieTaux permet de : comparer la devise (colonne G) du fichier 1 (F1) avec la devise (colonne D) du fichier 2 (fichier suspens) et de recopier en colonne T du fichier 1 (F1) la valeur de la colonne E du fichier 2 (fichier suspens) dès qu’une correspondance est trouvée.

Enfin la colonne T du fichier 1 prend comme valeur :
= Montant (colonne K) du fichier 1 / taux de conversion (colonne T) du fichier 1


J'ai fait un essaie de macro mais cela ne fonctionne pas... je joins les 2 fichiers en PJ.
Si vous avez besoin d'un renseignement supplémentaire, n'hésitez pas !

Merci d'avance pour tout ce qui vont m'aider,

osi.
 

Pièces jointes

  • F1.XLS
    30.5 KB · Affichages: 37
  • F1.XLS
    30.5 KB · Affichages: 36
  • F1.XLS
    30.5 KB · Affichages: 39
  • fichier suspens.xls
    14 KB · Affichages: 30
  • fichier suspens.xls
    14 KB · Affichages: 30
  • fichier suspens.xls
    14 KB · Affichages: 28

herve62

XLDnaute Barbatruc
Supporter XLD
Re : help macro Excel !

Bonsoir

J'ai fait tourner ta macro : pas de "bug" , simplement ta boucle : for i=2 to .... dans "sub lecture " tu as tjs i= 0 !!! et donc en sort ! ( for i= 2 to 0 ne marche pas)
en fait le "to" est egal à 1 d'après : Worksheets("GLOBAL").Range("d65536").End(xlUp).Row
Il n'y a rien en colonne D ?? ( d65536)
J'ai mis G ( la col des devises) et là on rentre bien dans la boucle ..... mais ensuite il n'y a rien dans tes colonnes de données ( I , J , S , R) , donc tu ne récupère rien ( montant=0)
Revoie un peu çà .... cela devrait s'arranger puisque le reste fonctionne
Si cela peut te faire "TILT"

Hervé
 

osishame

XLDnaute Junior
Re : help macro Excel !

Merci pour votre aide Hervé !

J'ai fait quelques modif mais cette ligne semble encore poser problème :

montant_abs = .Range("L" & i) ? bizarre...

Sinon, j'ai testé indépendament toutes les procédures que j'apelle dans ma macro et toutes fonctionnent bien :)

Quelqu'un pourrait il me dire comment appeler autrement une colonne ?
Merci beaucoup d'avance,

osi
 

Pièces jointes

  • F1.XLS
    41 KB · Affichages: 40
  • F1.XLS
    41 KB · Affichages: 35
  • F1.XLS
    41 KB · Affichages: 36
  • fichier suspens.xls
    14 KB · Affichages: 32
  • fichier suspens.xls
    14 KB · Affichages: 31
  • fichier suspens.xls
    14 KB · Affichages: 32

osishame

XLDnaute Junior
Re : help macro Excel !

Ca y est ça fonctionne par contre mon fichier contient 2000 lignes et l'execution est tres tres lente... (2 lignes par seconde)

Quelqu'un aurait-il une astuce svp ?
 

Pièces jointes

  • F1.XLS
    44.5 KB · Affichages: 29
  • F1.XLS
    44.5 KB · Affichages: 30
  • F1.XLS
    44.5 KB · Affichages: 32

herve62

XLDnaute Barbatruc
Supporter XLD
Re : help macro Excel !

Bonsoir Osishame

J'ai balayé en "pas à pas" , tout semble OK , je joins le fichier àprès qu'il ait tourné

(comment lances tu "lecture"? )

Vitesse :
Il me semble que "copietaux" et "copielibelle" pourraient être regroupés , d'après ce que j'ai vu ( même boulot , à qq variables près ) , tes boucles seraient divisées par 2 en temps
Là on voit deja le tps que çà met pour 5 lignes

Appeler une colonne : tu veux dire autre que A B C ..... ? oui : cells(x, 1) , cells(x,2) ...etc
mais là il faut compter d'abord et ne pas se tromper
 

Pièces jointes

  • F1.XLS
    44 KB · Affichages: 48
  • F1.XLS
    44 KB · Affichages: 42
  • F1.XLS
    44 KB · Affichages: 41

Danix

XLDnaute Nouveau
Re : help macro Excel !

Bonjour Osishame, Le forum

J'arrive peut-être avec un peu de retard, mais je viens de regarder le problème de lenteur

Deux solutions :
- Calcul automatique en cas de formule de calcul pourrait être désactivé
- boucles pourraient être évitées en utilisant une fonction Recherchev ou Vlookup

Ci-joint un essai en macro qui sur 2000 lignes répond en une dizaine de secondes, à tester de ton coté.

Impossible de joindre le fichier F1.xls alors voici le code que j'ai modifié/adapté. Recopie le dans ton module du fichier F1.xls et fais un test de charge avec tes données originales.

Sub Lecture()
Dim dblLine As Double
Application.ScreenUpdating = False 'gele l'ecran
nomfich = "fichier suspens.xls"
Chemin = ThisWorkbook.Path & "\"
fichouvert

If trouve = 0 Then
ChercheetOuvreFichier
If trouve = 1 Then trouve = 2
' Le fichier a été trouvé dans le répertoire vous pouvez en changer ou lancer la copie"
End If
If trouve = 0 Then
Call MsgBox("Fichier non trouvé dans le répertoire actif." _
& vbCrLf & "" _
, vbCritical, Application.Name)

Exit Sub
End If

classeur1 = ActiveWorkbook.Name
If trouve = 1 Then classeur2 = nomfich
' ouverture du classeur
If trouve = 2 Then
Set classeur = GetObject(Chemin & nomfich)
classeur2 = classeur.Name
End If

Workbooks(classeur1).Sheets("GLOBAL").Columns("L:L").Insert Shift:=xlToRight
Workbooks(classeur1).Sheets("GLOBAL").Columns("R:R").Insert Shift:=xlToRight
Workbooks(classeur1).Worksheets("GLOBAL").Cells(1, 12) = " Montant ABS"
Workbooks(classeur1).Worksheets("GLOBAL").Cells(1, 18) = "libellé typologie"
Workbooks(classeur1).Worksheets("GLOBAL").Cells(1, 20) = "taux de conversion"
Workbooks(classeur1).Worksheets("GLOBAL").Cells(1, 21) = "montant en euro"

Cells(1, 1).Select
dblLine = Selection.End(xlDown).Row
Range(Cells(2, 12), Cells(dblLine, 12)).Value = "=Abs(RC11)"
Range(Cells(2, 12), Cells(dblLine, 12)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Range(Cells(2, 18), Cells(dblLine, 18)).Value = "=IF(ISNA(VLOOKUP(RC[-1],'" & nomfich & "'!tblTypologies,2,FALSE)),""Not found"",VLOOKUP(RC[-1],'" & nomfich & "'!tblTypologies,2,FALSE))"
Range(Cells(2, 18), Cells(dblLine, 18)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Range(Cells(2, 20), Cells(dblLine, 20)).Value = "=IF(ISNA(VLOOKUP(RC[-13],'" & nomfich & "'!tblCurrencies,2,FALSE)),0,VLOOKUP(RC[-13],'" & nomfich & "'!tblCurrencies,2,FALSE))"
Range(Cells(2, 20), Cells(dblLine, 20)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Range(Cells(2, 21), Cells(dblLine, 21)).Value = "=RC12 * RC20"
Range(Cells(2, 21), Cells(dblLine, 21)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

Cells(1, 1).Select



End Sub



J'espère que cela pourra t'aider ou du moins te donner des pistes pour solutionner ton problème

Slts
Danix
 

Pièces jointes

  • fichier suspens.xls
    19 KB · Affichages: 36
  • fichier suspens.xls
    19 KB · Affichages: 35
  • fichier suspens.xls
    19 KB · Affichages: 37

Discussions similaires

Réponses
12
Affichages
304
Réponses
22
Affichages
902

Statistiques des forums

Discussions
312 563
Messages
2 089 681
Membres
104 252
dernier inscrit
dbsromaric