macro d'extraction de données avec création de fichiers excel...

gwad063

XLDnaute Nouveau
Bonsoir à tous,

Après quelques mois où j’ai pu voler de mes propres ailes et me passer de votre précieuse aide, je reviens vers pour un problème de macro qui dépasse de loin mon niveau de connaissance en VB… ;
Pour vous expliquer ce que je cherche à réaliser, voilà le contexte : je travaille sur 2 logiciels de finance : à partir de l’un, j’exporte des données sur un fichier excel ; mon fichier se présente sous la forme d’un énorme tableau unique avec pas mal de lignes (1 ou n lignes correspondant à une société) et colonnes (cf en pièce jointe fichier source), avec une certaine mise en forme ; je voudrais importer ces données dans le second logiciel ; le problème, c’est que pour importer ces données, il faut que j’ai un fichier excel par société, et je ne devrais extraire que les données de certaines colonnes de mon fichier source…en effet, la mise en forme sous excel de mon fichier source rend impossible l’import dans mon second logiciel en l’état..
D’autre part, et pour compliquer le tout, certaines données de mon fichier source sont fusionnées dans une colonne alors que dans mes différents fichiers cibles, elles devront être séparées dans 2 ; exemple : mon numéro SIRET qui est constitué de 14 chiffres dans mon fichier source devra être divisé à chaque fois dans mes fichiers cibles ; les 9 premiers chiffres dans la colonne O et les 5 suivants dans la colonne P…
Donc si je récapitule : j’ai un fichier source, quand je lance ma macro, elle me créé un fichier excel cible du nom de la société + une constante 2008 (cf pièce jointe en exemple fichier SOCIETEX12008), soit un fichier excel par société différente avec :
• en colonnes A et B le nom de la société (colonne B du fichier source) ;
• en C une constante qui est l’année (ici 2008) ;
• en colonne F la valeur de la colonne AE de mon fichier source ;
• en colonne G la colonne AG ;
• en colonne H le numéro de la rue (qui bien entendu est fusionné dans la colonne AF de mon fichier source) ;
• en colonne J le nom de la rue (colonne AF de mon fichier source) ;
• en colonne K la valeur de la colonne AH du fichier source ;
• en colonne L la valeur de la colonne AI ;
• en colonne O les 9 premiers chiffres de mon numéro de SIRET et en colonne P les 5 restants (le numéro de SIRET est la colonne AD de mon fichier source, bien entendu les 14 chiffres, sinon, ce serait trop simple) ;
• en colonne Q les valeurs de la colonne AJ;
• et enfin en colonne R les valeurs de la colonne AL.

Voilà, je ne sais pas trop par où commencer ; je ne suis même pas sûr qu’il soit possible d’automatiser la « déconcaténation » d’une cellule vers 2 autres (notamment pour le numéro de rue et le numéro de SIRET) ; mais toute aide serait vraiment la bienvenue…
Je vous remercie par avance, ne serait-ce que pour avoir pris le temps de le lire mon (long) post et d’avoir passer même 5 minutes à réfléchir à mon problème…
Bonne soirée.

Gwad.

PS : n’hésiter pas si vous avez besoin d’infos complémentaires...
 

Pièces jointes

  • fichier source.zip
    18.9 KB · Affichages: 211
  • SOCIETEX12008.xls
    17 KB · Affichages: 337
  • fichier source.zip
    18.9 KB · Affichages: 207
  • fichier source.zip
    18.9 KB · Affichages: 224

gwad063

XLDnaute Nouveau
Re : macro d'extraction de données avec création de fichiers excel...

Merci Sophie, mais les fonctions gauche et droite ne suffisent pas ; il faut que je puisse automatiser l'ensemble; vu que ça va être quelquechose de récurrent...
 

skoobi

XLDnaute Barbatruc
Re : macro d'extraction de données avec création de fichiers excel...

Bonjour,

Voici une proposition.
Chaque fichier « SOCIETExxxx » est cré et sauvegardé.
Il faut bien sur changer le répertoire de sauvegarde dans la macro.
Bon test.
Si tu veux des explications, n’hésite pas.
 

Pièces jointes

  • fichier source.zip
    55.5 KB · Affichages: 484
  • fichier source.zip
    55.5 KB · Affichages: 499
  • fichier source.zip
    55.5 KB · Affichages: 481

gwad063

XLDnaute Nouveau
Re : macro d'extraction de données avec création de fichiers excel...

Merci Skoobi! (encore et toujours, si ma mémoire est bonne, c'est loin d'être la 1ère fois); je vais tester ça...il est possible que je revienne vers toi pour infos supplémentaires.
Bonne soirée.

Gwad.

NB : désolé pour le manque de réactivité, en journée: impossible d'accéder au site (problème de sécurité dans la boîte où je bosse).
 

ogallic

XLDnaute Nouveau
Re : macro d'extraction de données avec création de fichiers excel...

Bonjour,

Voici une proposition.
Chaque fichier « SOCIETExxxx » est cré et sauvegardé.
Il faut bien sur changer le répertoire de sauvegarde dans la macro.
Bon test.
Si tu veux des explications, n’hésite pas.

Bonjour Skoobi,

super macro...mais mon manque de connaissance de VBA ne me permet (malgrés pas mal de tentatives ) de l'adapter à mon besoin.

Ce que je cherche à faire :
-> extraire les lignes ayant le meme "CODE_RA" dans des fichiers distincts en gardant la ligne de titres.

Penses tu pouvoir m'aider sur ce point STP ????

ci-joint un exemple de mon fichier source
 

Pièces jointes

  • source.xls
    15 KB · Affichages: 300
  • source.xls
    15 KB · Affichages: 314
  • source.xls
    15 KB · Affichages: 304

skoobi

XLDnaute Barbatruc
Re : macro d'extraction de données avec création de fichiers excel...

Bonjour ogallic,

sur le même principe que pour gwad, la macro cré les fichiers Code_RA13, Code_RA14 ... en récupérant toute la ligne:

Code:
Sub Macro1()
Dim Wb_main As Workbook, Wb_dest As Workbook
Dim der_lig As Long, lig As Long, compte As Long, i As Long, lig_suiv As Long, Source As Range

Application.ScreenUpdating = False
Set Wb_main = ThisWorkbook
Range("A1").CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
der_lig = Range("B65536").End(xlUp).Row
lig = 2
Do While lig <= der_lig
  compte = Application.WorksheetFunction.CountIf(Range([B2], Range("B" & der_lig)), Range("B" & lig))
  Set Wb_dest = Workbooks.Add
  Wb_main.Sheets("Feuil1").Range("A1:L1").Copy Wb_dest.Sheets("Feuil1").Range("A1")
  For i = lig To lig + compte - 1
    Set Source = Wb_main.Sheets("Feuil1").Range("A" & i & ":L" & i)
    With Wb_dest.Sheets("Feuil1")
      lig_suiv = .Range("A65536").End(xlUp).Row + 1
      Source.Copy .Range("A" & lig_suiv & ":L" & lig_suiv)
    End With
  Next
  Wb_dest.SaveAs "F:\VBA\VBA excel\Forum Excel-Download\ogallic\" & "Code_RA" & Wb_main.Sheets("Feuil1").Range("B" & lig).Value
  Wb_dest.Close
  lig = lig + compte
Loop
Application.ScreenUpdating = True
End Sub

Pour comprendre le code, je te suggère de l'exécuter en "pas à pas".
 

Discussions similaires

Réponses
6
Affichages
221
Réponses
13
Affichages
491

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami