Macro transformant les donnees d'un fichier avec demande de devise a rentrer

kalwin

XLDnaute Nouveau
Bonjour à tous,

Suite à un souci de OS (j'y arrive sous linux (bash) mais pas sous windows(Msdos)) ; Je dois changer les valeurs de certaines colonnes d'un fichier texte donc je me suis tourner sur excel...
Mais le gros soucis est que je sais faire la/les formules mais je dois l'appliquer sur plusieur fichiers et régulièrement et changer la formule en fonction du nombre de ligne.

Donc voici la difficulté :
Un fichier de Ciel compta et financier est exporté au format txt... pas par moi ;-)...


Il comporte 6 colonnes

Colonne A => des numéro de classification de compta presque identique a chaque classeur mais ces chiffres ont une importance car ils sont la références pour la transformation
ils vont de 100000 à 799999

Colonne B => la définition de ces classifications

Colonne C à F => des chiffres que je dois transformer avec une certaine valeur dites "devise constante" ("chiffre" X "devise constante") seulement jusqu'a la ligne 599999.
Ensuite de 600000 à plus je dois transformer les autres chiffres des colonnes C à F par "chiffres" X une valeur (dite devise moyenne).

Et pour finir je dois donner l'ecart de conversion de tout cela.
en rajoutant un ligne au debut de ce tableau
qui indique la codification en colonne A, la description en colonne B
et l'ecart de conversion en colonne E ou F (debit ou credit).

Voici ce j'ai fait comme formule pour l'ecart de conversion d'un claseur a (185 lignes)
mais ce n'est pas toujours le cas encore un souci ...

A B C D E F
1 105800 Ecart de conversion ** ***
2

** : =SI(SOMME(E2:E185)>SOMME(F2:F185);0;SOMME(F2:F185)-SOMME(E2:E185))

*** : =SI(SOMME(F2:F185)>SOMME(E2:E185);0;SOMME(E2:E185)-SOMME(F2:F185))

Voilà mon souci.

Je conçois que ce n'est pas facile du moins pour qui ne suit que utilisateur d'excel pour qq formules mais là j'avoue que j'apprécierai un bon coup de main
Je n'arrive qu'a ajouté la premiere ligne en macro (macro effectué avec loe scénario ) ça ne va pas loin.

Merci beaucoup a tous, plus particulièrement a ceux qui s'interreseront a mon GGRRROOSSS Souci
tout en espérant que j'ai été clair

kalwin
 
Dernière édition:

kalwin

XLDnaute Nouveau
Re : Macro transformant les donnees d'un fichier avec demande de devise a rentrer

Oups les espace entre ABCDEF n'ont pas été pris donc voici plus clairement !!!

Colonne A1 => 105800
Colonne B1 => Ecart de conversion
Colonne C1 =>
Colonne D1 =>
Colonne E1 => =SI(SOMME(E2:E185)>SOMME(F2:F185);0;SOMME(F2:F185)-SOMME(E2:E185))
Colonne F1 => =SI(SOMME(F2:F185)>SOMME(E2:E185);0;SOMME(E2:E185)-SOMME(F2:F185))

Encore merci
 

kalwin

XLDnaute Nouveau
Re : Macro transformant les donnees d'un fichier avec demande de devise a rentrer

Bonjour,

Voici le résultat pour ceux que ça intéressent ...
Les recherche ont été faites ici, sur le net, et via le scénario d'Excel 2003.
Je ne prétends qu'elle est parfaites mais elle fonctione.
Petit bug référencé sous Excel 2000 pour le renommage du "File_In" mais bon je m'y repencherais dans la semaine.

donc voic le résultat :

Sub Trait_Devise()
'
' Trait_Devise Macro
' Macro transformant des fichier text avec des conversion de devises
' Macro enregistrée le 05/11/2009 par Stephane dit Kalwin
'

' copie de la première feuille dans son intégralité
ActiveSheet.Copy After:=Sheets(Sheets.Count)

' Nommage de la nouvelle feuille en Traitement_Conversion
Sheets(Sheets.Count).Name = "Traitement_Conversion"
Sheets("Traitement_Conversion").Select

' Recherche la derniere ligne non vide dans la feuille "Traitement_Conversion"
Dim last_lign As Variant
last_lign = Range("A1").End(xlDown).Address
last_lign = Range(last_lign).Row
Range("A" + CStr(last_lign)).Select
Let num_lign = ActiveCell.Row

' Ajout d'une ligne
Rows("1:1").Select
Selection.Insert Shift:=xlDown

' Inscription de 105800 en A1
Range("A1").Select
ActiveCell.FormulaR1C1 = "105800"

' Inscription de Ecart de Conversion en B1
Range("B1").Select
ActiveCell.FormulaR1C1 = "Ecart de Conversion"

' Ajout d'une nouvelle feuille nommé "File_Out"
Sheets.Add
Sheets("Feuil1").Select
Sheets("Feuil1").Name = "File_Out"
Sheets("File_Out").Select
Sheets("File_Out").Move After:=Sheets(3)

' Ajout d'une nouvelle feuille nommé "datas"
Sheets.Add
Sheets("Feuil2").Select
Sheets("Feuil2").Name = "datas"
Sheets("datas").Select
Sheets("datas").Move After:=Sheets(4)
Sheets("datas").Select

' Insertion de donnée dans la feuille "datas"
' Cellule A1 "Devise Cloture"
Range("A1").Select
ActiveCell.FormulaR1C1 = "Devise de Cloture"

' Cellule B1 "Variable devise de cloture"
Dim CC As String
CC = InputBox("Veuillez saisir La devise de cloture")
' MsgBox "Devise Cloture : " & CC & ""
Range("B1").Select
ActiveCell.FormulaR1C1 = CC

' Cellule A2 "Devise Moyenne"
Range("A2").Select
ActiveCell.FormulaR1C1 = "Court Moyenne"

' Cellule B2 "Variable devise Moyenne"
Dim CM As String
CM = InputBox("Veuillez saisir La devise moyenne")
' MsgBox "Devise Moyenne : " & CM & ""
Range("B2").Select
ActiveCell.FormulaR1C1 = CM

' Cellule A3 "Ligne total du fichier traité"
Range("A3").Select
ActiveCell.FormulaR1C1 = "Ligne total"

' Cellule B3 "Variable num_lign"
Range("B3").Select
ActiveCell.FormulaR1C1 = num_lign

' Cellule A4 " nom du fichier traiter (nom du premier onglet)
Range("A4").Select
ActiveCell.FormulaR1C1 = "Nom du Fichier"

' Cellule B4 "Variable du fichier traité"
Range("B4").Select
Name_File = Worksheets(1).Name
ActiveCell.FormulaR1C1 = Name_File

' Renommage du premier onglet en File_In
Sheets(Name_File).Name = "File_In"

' Fonction de calcul de devise
Sheets("Traitement_Conversion").Select
Range("C2").Select
ActiveCell.FormulaR1C1 = _
"=ROUND(IF((LEFT(RC1,1)+0)<6,File_In!R[-1]C*datas!R1C2,File_In!R[-1]C*datas!R2C2),2)"

' Applications de la fonction aux 4 colonnes de la ligne 2 (C2 à F2)
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:F2"), Type:=xlFillDefault
Range("C2:F2").Select

' Application de la fonction aux 4 colones entiere
last_lign = Range("a2").End(xlDown).Row
Range("C2").AutoFill Destination:=Range("C2:C" & last_lign), Type:=xlFillDefault
Range("D2").AutoFill Destination:=Range("D2:D" & last_lign), Type:=xlFillDefault
Range("E2").AutoFill Destination:=Range("E2:E" & last_lign), Type:=xlFillDefault
Range("F2").AutoFill Destination:=Range("F2:F" & last_lign), Type:=xlFillDefault

' Fonction ecart de conversion
Range("E1").Select
ActiveCell.FormulaR1C1 = _
"=IF(SUM(R[1]C:R[999]C)>SUM(R[1]C[1]:R[999]C[1]),0,SUM(R[1]C[1]:R[999]C[1])-SUM(R[1]C:R[999]C))"
Range("F1").Select
ActiveCell.FormulaR1C1 = _
"=IF(SUM(R[1]C:R[999]C)>SUM(R[1]C[-1]:R[999]C[-1]),0,SUM(R[1]C[-1]:R[999]C[-1])-SUM(R[1]C:R[999]C))"

' Copy du résultat en File_Out
Range("A1:F1000").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("File_Out").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' Renomage du fichier File_In
Sheets("File_In").Name = Name_File

' Renomage du fichier de sortie
Sheets("File_Out").Name = Format(Now, "yymmddhm") & Name_File

End Sub

Cordialement Stef dit kalwin

NB : j'essai de joindre un petit excel d'exmple avec
 

Discussions similaires


Haut Bas