|
|
|
|
Posté par
CVIOU, le vendredi 13 octobre 2006 à 18:47:35Bonjour,
qu'attends-tu pour mettre ton code et un peu de tes données !! à première vue, ça n'a pas l'air très sorcier. tu devrais même pouvoir t'en tirer seul en enregistrant une macro lorsque tu fais l'opération manuellement. à te lire |
Bonsoir,
J'attendais que quelqu'un s'intéresse à mon problème et ta réponse me fait plaisir car je suis bien embêtée. Ca fait quelques temps que j'ai envie d'apprendre le VBA et je crois que cette fois je vais me lancer. J'espère que pour toi ce sera un jeu d'enfant. Ca me serait d'une aide très précieuse. D'avance merci Voici le code : Option Explicit Dim MonFichier As Variant Public Monclasseur As String Dim Nblig As Long, i As Long, j As Long Public Monchemin As String Sub Importation() ' ' Importation Macro ' Macro enregistrée le 27/06/2006 par SERMA ' ' Dim MonFichier As Variant MonFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt") If MonFichier <> False Then Workbooks.OpenText Filename:=MonFichier, Origin:=xlWindows, _ StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(17 _ , 1), Array(20, 1), Array(25, 1), Array(29, 1), Array(34, 1), Array(48, 1), Array(83, 1), _ Array(89, 1), Array(124, 1), Array(141, 1), Array(158, 1), Array(179, 1)), _ TrailingMinusNumbers:=True ActiveSheet.Move Before:=Workbooks("Traitement global.xls").Sheets(1) 'aller derniere cellule ActiveCell.SpecialCells(xlLastCell).Select 'recupere le n° de la ligne courante Nblig = ActiveCell.Row + 1 Range("A1").Select 'suppression des lignes différentes d'une date 'mise d'une croix dans les lignes à garder For i = 1 To Nblig If IsDate(Cells(i, 1)) Then Cells(i, 13).Value = "X" Else Cells(i, 13).Value = Empty End If Next i 'détruit les lignes Range("A1").Select j = 1 While ActiveCell.Row < Nblig If Cells(j, 13).Value <> "X" Then ActiveCell.EntireRow.Delete Nblig = Nblig - 1 Else j = j + 1 ActiveCell.Offset(1, 0).Select End If Wend 'détruit les colonnes Columns("B:D").Delete Shift:=xlToLeft Columns("D:E").Delete Shift:=xlToLeft Columns("H:H").Delete Shift:=xlToLeft Range("A1").Select 'lancer la macro de fusion des comptes FusionneCompte 'lancer Ajout en tête AjoutEntete End If End Sub Sub FusionneCompte() Range("A1").Select Selection.CurrentRegion.Select Nblig = Selection.Rows.Count Range("A1").Select Columns("B:B").Insert Shift:=xlToRight Range("B1").FormulaR1C1 = "=RC[1]&RC[2]" Range("B1").Select Selection.Copy For i = 2 To Nblig Cells(i, 2).Select ActiveSheet.Paste Next i Application.CutCopyMode = False Range("A1").Select Range("A1").Select Selection.CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Columns("C:D").Delete Shift:=xlToLeft Range("A1").Select End Sub Sub AjoutEntete() Rows("1:1").Insert Shift:=xlDown Range("A1").Value = "DATEPIECE" Range("B1").Value = "COMPTE" Range("C1").Value = "LIBELLE" Range("D1").Value = "DEBIT" Range("E1").Value = "CREDIT" Range("F1").Value = "PIECE" Range("A1").Select End Sub Sub NettoyageListe() Dim MaLigne As Integer Dim MaRecup As String Dim Machaine As String 'nettoyage de la liste des fichiers Worksheets("Traitement").Select Range("A10:A60").ClearContents Range("A10").Select MaLigne = 10 Machaine = Range("a2").Value & "*.xls" MaRecup = Dir(Machaine) While MaRecup <> "" Cells(MaLigne, 1).Value = MaRecup MaLigne = MaLigne + 1 MaRecup = Dir Wend End Sub Sub VidageFichiers() Dim Machaine As String Worksheets("Traitement").Select Range("A10").Select While ActiveCell.Value <> Empty Machaine = Range("a2").Value & ActiveCell.Value Workbooks.Open Filename:=Machaine Range("A1").Select Selection.CurrentRegion.Select Selection.ClearContents Range("A1").Value = "DATEPIECE" Range("B1").Value = "COMPTE" Range("C1").Value = "LIBELLE" Range("D1").Value = "DEBIT" Range("E1").Value = "CREDIT" Range("F1").Value = "PIECE" Range("A1").Select ActiveWorkbook.Close savechanges:=True ActiveCell.Offset(1, 0).Select Wend End Sub Sub Colonnedate() Columns("A:A").Select Selection.NumberFormat = "dd/mm/yy" End Sub Cordialement Catherine |
Bonsoir,
je pense que le fait de rajouter Local:=True à la fin de la méthode OpenText de ta 1ère procédure (importation()) devrait solutionner tes problèmes. Si ça ne suffit pas, mettre Array(0, 4) comme premier argument du Fieldinfo de l'OpenText en regardant cette procédure, je me suis dit qu'il serait possible de la simplifier à 2 niveaux : 1) la méthode opentext permet de sauter des colonnes et de formater les colonnes 2) plutôt que de marquer les lignes sans date par des X pour ensuite les supprimer, pourquoi ne pas le faire tout de suite. ça donnerait alors : Sub Importation_bis()
' Importation Macro
' Macro enregistrée le 27/06/2006 par SERMA
' modif ODVJ le 15/10/2006
Dim MonFichier As Variant
MonFichier = Application.GetOpenFilename("Text Files (*.txt), *.txt")
If MonFichier <> False Then
'le 2ème argument de chaque array du fieldinfo a pour signification :
'==== 9 : colonne non distribuée
'==== 3 : date au format J/M/A
'==== 1 : format standard
'local=:True permet d'utiliser les paramètres internationaux du système
'c'est ce qui doit régler ton pb
Workbooks.OpenText Filename:=MonFichier, Origin:=xlWindows, _
StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 4), Array(17 _
, 9), Array(20, 9), Array(25, 9), Array(29, 1), Array(34, 1), Array(48, 9), Array(83, 9), _
Array(89, 1), Array(124, 1), Array(141, 1), Array(158, 1), Array(179, 9)), _
TrailingMinusNumbers:=True, local:=True
'ActiveSheet.Move Before:=Workbooks("Traitement global.xls").Sheets(1)
'recupere le n° de la ligne courante
Nblig = ActiveCell.SpecialCells(xlLastCell).Row
Range("A1").Select
'suppression des lignes différentes d'une date
i = 1
While i <= Nblig
If Not (IsDate(Cells(i, 1))) Then
Cells(i, 13).EntireRow.Delete
Nblig = Nblig - 1
Else
i = i + 1
End If
Wend
Range("A1").Select
'lancer la macro de fusion des comptes
FusionneCompte
'lancer Ajout en tête
AjoutEntete
End If
End Sub
Voilà. Pour tester cette procédure, j'aurais eu besoin de quelques lignes de tes données.
à toi de tester donc. A+ |
Bonjour,
Je ne sais pas si je vais pouvoir tester la modif aujourd'hui, je me suis envoyé du bureau chez moi par mail le fichier txt et le fichier xls contenant la macro. Lorsque je lance la procédure chez moi, j'ai le message suivant : TrailingMinusNumbers:= (Tout cela en surbrillance) Message : Erreur de compilation - Argument nommé introuvable Cet argument en clair c'est ? Je pense que je n'ai pas déterminé le bon chemin de mes données sur C: D'autre part, je voudrais bien t'envoyer mes données mais je ne peux pas mettre mon fichier txt sur le forum. Un grand merci, je te t'informe de la suite dès que possible Cordialement Catherine |
Bonjour,
curieux, ça passe chez moi sans problème. tu peux utiliser Cjoint pour monter tes données et ton classeur. si c'est la confidentialité qui te gêne, change les infos tout en gardant la structure du txt bien sûr. le trailing minusmachin c'est pour le positionnement du signe négatif à droite des nombres. en fait ça ne doit pas te servir et tu peux le virer. au fait, tu as bien un caractère _ en fin de ligne précédente ! A+ |
autre question, le dernier paramètre, le local:=true, tu l'as bien mis avec := et non pas = simplement
A+ |
Bonsoir,
Je voudrais bien envoyer un extrait de mon fichier txt ainsi que mon fichier xls mais je ne sais pas où le joindre. J'ai bien le caractère _ en fin de ligne précédente et j'ai bien mis local:=true A + Cordialement Catherine |
http://cjoint.com/?kptFISgdpE
http://cjoint.com/?kptKDHPA61 Je tente d'envoyer mes fichiers, dont le fichier txt épuré. J'espère que ça va marcher. J'ai enlevé les 3 premières lignes comportant le nom de la société et la source du fichier. J'ai modifieé les noms des tiers Je crois que par erreur j'ai également supprimé la dernière colonne du fichier. J'espère que ces deux fichiers seront exploitable pour toi Merci encore Cordialement Catherine |
Bonsoir,
à première vue, il manque un s à number je continue à regarder A+ |
Bonsoir,
ensuite, le Workbooks("Traitement global.xls").Sheets(1) doit planter car le fichier concerné n'a pas d'espace : Traitementglobal.xls. A+ |
Bon,
ça semble Ok ceci dit, je n'ai pas d'erreurs sur les dates même sans le local:=true A+ |
Bonjour,
J'ai testé en arrivant au bureau, CA MARCHE !!! Chez moi, j'avais reconstitué les dossiers et fichiers de mémoire et j'ai du faire erreur quelque part. Effectivement, ça marche sans le local:=True, j'ai seulement modifié le 1er Array(0,4) Un grand coup de chapeau, un grand merci et certainement à une autre fois car je crois que je vais me lancer, je pense que ça ne sera pas sans mal. Si tu as un conseil à me donner pour démarrer, il sera le bienvenu. Cordialement Catherine |
Bonjour,
1) l'envie 2) les livres 3) les formations 4) la touche F1 5) les forums : http://www.excel-downloads.com/forum/forum-excel/ http://www.cathyastuce.com/w-agora/index.php?site=cathyastuce http://forum.hardware.fr/hardwarefr/Programmation/VBVBAVBS/liste_sujet-1.htm www.veriti.net |
Bonour,
Je croyais mon affaire résolue et je viens de me rendre compte que j'ai encore un pb sur le n° de pièce (le 12ème array) car j'ai des cellules qui comportent des chiffres et des lettres, le tout en format texte. Quel code faut-il utilisé en 2ème argument sur "l'array n° 12" pour solutionner le pb ? Désolée, j'étais tellement contente que je me suis focalisée sur les dates et j'ai oublié de vérifier le reste. J'ai 3500 lignes dans mon fichier !!! A + Cordialement Catherine |
Bonjour,
quel problème as-tu? A+ |
Bonsoir,
En fait la procédure mise en place par le formateur est un peu complexe. Les fichiers générés par la procédure que tu viens de m'aider à corriger, ou plutôt que tu viens de corriger, sont transférés en tables attachées dans Access. Le problème est que dans excel, les données de la colonne "PIECE" sont en format standard avec des cellules composées uniquement de chiffres et d'autres avec des chiffres et des lettres. Dans Access, le format déterminé automatiquement est numérique, donc toutes les cellules contenant des lettres sont en erreur et comme la table est attachée, je ne peux pas modifier le format de champ, les champs étant définis dans la base de données externes. Je pense qu'il faudrait compléter la macro excel afin que les lettres contenues dans la colonne "PIECE" soient exclues. Tu vois mon problème, mais j'ai l'impression d'abuser un peu. Mon gros problème est surtout que je n'ai pas trop le temps d'attendre de me former, de surcroît seule, pour résoudre cela, j'ai un très gros travail de consolidation comptable à faire sur 5 sociétés. D'avance merci Cordialement Catherine |
Bonsoir,
tu vois, ce que tu dis n'est pas assez précis : veux-tu que simplement le champs pièces soit effacé uniquement s'il contient de l'alphanumérique? ou veux-tu que l'enregistrement complet soit supprimé si le champs pièces contient de l'alphanumérique? le dernier cas est très simple vu qu'il ressemble à l'exclusion des enregistrements dont la première colonne n'est pas une date : For i = 1 To Nblig
If IsDate(Cells(i, 1)) And IsNumeric(Cells(i, 12)) Then
Cells(i, 13).Value = "X"
Else
Cells(i, 13).Value = Empty
End If
Next i
là, on garde (ie on met un "X" en colonne 13) ce qui est date en première colonne et numérique en 12ème
le premier cas (je pense qu'il ne t'intéresse pas) se règlerait par le code suivant : For i = 1 To Nblig
If IsDate(Cells(i, 1)) Then
Cells(i, 13).Value = "X"
If Not (IsNumeric(Cells(i, 12))) Then Cells(i, 12) = Empty
Else
Cells(i, 13).Value = Empty
End If
Next i
méfiance cependant si le champs d'accueil n'accepte pas les valeurs vides (empty). il faudrait alors plutôt mettre un 0. A+ |
Bonjour,
Effectivement, je n'ai pas été claire, je veux qu'un champ alphanumérique devienne un champ numérique. ex : 966B devient 966 Du style : RECHERCHER : un caractère alpha REMPLACER PAR : (rien) Il ne faut surtout pas supprimer un champ ou un enregistrement. Merci A + Catherine |
| 03/04 20h30 | Transformer un fichier Microsoft Excel (.xls) en PDF | OpenOffice.org |
| 16/01 10h10 | [MS-Dos] Ecrire dans un fichier texte en batch | MS-Dos |
| 23/03 20h06 | Sed - Insérer des espacements | Sed |
| 03/04 20h23 | Transformer un fichier Word (.doc) en PDF | OpenOffice.org |
| 17/01 06h28 | comment ouvrir un fichier DOCX ,mis en pièce jointe ! | Bureautique |
| 17/01 22h57 | Importation fichier .txt dans EBP association | 0 |
| 27/06 22h44 | Import plusieurs fichiers txt dans excel | 2 |
| 19/06 15h22 | Importation fichier Excel vers CorelDraw 11 | 2 |
| 01/05 17h20 | Ouverture fichier .txt en .XLS avec EXCEL | 9 |
![]() | Pack de compatibilité Microsoft Office 2007 - En installant le pack de compatibilité pour Microsoft Office 2000, Office XP ou Office 2003, vous pouvez ouvrir, modifier et... | Catégorie: Bureautique Licence: Freeware/gratuit |
![]() | Factoure - Factoure est un logiciel gratuit qui permet d’émettre des factures standard pour les PME ou PMI. On a la possibilité de... | Catégorie: Bourse/Finance Licence: Freeware/gratuit |
![]() | FolderMarker - La routine peut s'installer rapidement en utilisant votre ordinateur. Tous les dossiers se ressemblent par la couleur et il... | Catégorie: Personnalisation Licence: Freeware/gratuit |
![]() | Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 16.74 € Misco FR |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 41.50 € MicroChoix |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 33.62 € Amazon.fr |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 82.52 € Misco FR |