Modif 1 param. - macro de bebere - recup file

VBA_DEAD

XLDnaute Occasionnel
Bonjour le forum, et bonjour bebere

je lui dit bonjuor car il m`a trop aide sur le fil ci dessous :)

https://www.excel-downloads.com/threads/presque-fini-transfert-feuilles-files.70546/

La macro va chercher ds des files fermes les feuilles "Cash position" et les reunis ds 1 seul fichier en reprenant le nom du file comme nom de l`onglet.
Mon probleme est que mes files ont un nom trop long donc le nom n`est pas repris ds l`onglet quand je reunis toutes mes feuilles "Cash position".

Comment dire a la macro que le nom de l`onglet doit etre le premier terme du fichier :

par exemple mon file s`appelle BOUBOG - xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx et un autre FEAR - YYYYYYYYYYYYYYYYYYY, comment dire a la macro que je veux le terme a gauche du " -"?? donc 1 onglet BOUBOG et un autre FEAR??

ci-dessous le code de cette superbe macro

Private Sub selection_Click()
Dim I As Integer, S As Byte
Dim WkSource As Workbook, WkDest As Workbook
Dim Nom As String

Dim iSheets As Integer 'nbre feuille dans nouveau classeur
With Application
iSheets = .SheetsInNewWorkbook
.SheetsInNewWorkbook = 1
.ScreenUpdating = False 'true
.DisplayAlerts = False 'true
End With
Set WkDest = Workbooks.Add
Application.SheetsInNewWorkbook = iSheets

With liste
For I = 0 To .ListCount - 1
Nom = .List(I, 0) 'liste.Value

Set WkSource = Workbooks.Open(Filename:=NomDossier & Nom)
For S = 1 To Sheets.Count
If Left(Sheets(S).Name, 13) = "CASH POSITION" Then
If I = 0 Then
WkSource.Sheets(S).Cells.Copy Destination:=WkDest.Sheets(1).Cells(1, 1)
WkDest.Sheets(1).Name = Nom
Else:
WkDest.Activate
Sheets.Add.Move After:=Sheets(Sheets.Count)
WkSource.Sheets(S).Cells.Copy Destination:=WkDest.Sheets(Sheets.Count).Cells(1, 1)
WkDest.Sheets(Sheets.Count).Name = Nom
End If
Exit For
End If
Next S

'Set Rng = Nothing
WkSource.Close
Next I
End With

WkDest.SaveAs Filename:=NomDossier & "Total" & Left(Nom, 2)
WkDest.Close

With Application
.ScreenUpdating = True ' False
.DisplayAlerts = True 'False
End With

End Sub

merci pour votre aide... ou merci Bebere si tu rodes! :D

A+

VBA_DEAD
 

Creepy

XLDnaute Accro
Re : Modif 1 param. - macro de bebere - recup file

Bonsoir,

Si j'ai bien compris le code sans exemple c'est un peu dur, mais je pense que je suis bon, met ca :

With liste
For I = 0 To .ListCount - 1
Nom = .List(I, 0)
Nom = Mid$(Nom, 1, InStr(1, Nom, "-") - 2)

-2 car je crois qu'il y a toujours un espace devant le "-", sinon -1

A +

Creepy
 

VBA_DEAD

XLDnaute Occasionnel
Re : Modif 1 param. - macro de bebere - recup file

Re bonjour Creepy et le forum

ben ca marche pas... mais c`est jsuet apres que ca plante et ca vient du changement.

peux tu m`aider? je t`ai fait un exemple

Pour info : La macro ajoute un bouton ds la barre d`outil

ensuite tu colles tout ds 1 folder, tu lances la macro Macro Group en laissant les files fermes.

cava aller chercher les feuilles "Cash" de ces files fermes mais je voudrais donc que le nom de l`onglet recupere reprenne le nom du fichier (mais juste la partie a gauche...

Merci de ton aide et encore merci bebere...;)

VBA_dead
 

Pièces jointes

  • RECAPFINAL.zip
    28.3 KB · Affichages: 20

Creepy

XLDnaute Accro
Re : Modif 1 param. - macro de bebere - recup file

RE All,

C'est normal que tu est une erreur ! Ton code attribue à la variable nom le nom du fichier. Moi juqte après je tronquais ce nom pour n'avoir que la partie gauche du nom, avant le "-".

La ligne juste en dessous tu ouvres le ficheir avec comme paramètre la varaibles nom. Mais comme je l'ai tronqué le fichier existe pas !! :eek:

Il faut donc mettre mon code après dans la procédure pour que cela fonctionne !

Voici le code :

Code:
Private Sub selection_Click()
Dim NB_List As Integer, NB_Sheet As Byte
Dim WkSource As Workbook, WkDest As Workbook
Dim Nom As String
Dim iSheets As Integer 'nbre feuille dans nouveau classeur
With Application
    iSheets = .SheetsInNewWorkbook
    .SheetsInNewWorkbook = 1
    .ScreenUpdating = False 'true
    .DisplayAlerts = False 'true
End With
Set WkDest = Workbooks.Add
Application.SheetsInNewWorkbook = iSheets
With liste
    For NB_List = 0 To .ListCount - 1
        Nom = .List(NB_List, 0) 'liste.Value
        Set WkSource = Workbooks.Open(Filename:=NomDossier & Nom)
        For NB_Sheet = 1 To Sheets.Count
          If Left(Sheets(NB_Sheet).Name, 4) = "Cash" Then
              If NB_List = 0 Then
                  WkSource.Sheets(NB_Sheet).Cells.Copy Destination:=WkDest.Sheets(1).Cells(1, 1)
                  Nom = Mid$(Nom, 1, InStr(1, Nom, "-") - 2)
                  If Len(Nom) > 31 Then Nom = Mid$(Nom, 1, 31)
                  WkDest.Sheets(1).Name = Nom
              Else
                  WkDest.Activate
                  Sheets.Add.Move After:=Sheets(Sheets.Count)
                  WkSource.Sheets(NB_Sheet).Cells.Copy Destination:=WkDest.Sheets(Sheets.Count).Cells(1, 1)
              End If
              Exit For
          End If
        Next NB_Sheet
      WkSource.Close
    Next NB_List
End With
WkDest.SaveAs Filename:=NomDossier & "Total" '& Left(Nom, 2)
WkDest.Close
  
With Application
    .ScreenUpdating = True ' False
    .DisplayAlerts = True 'False
End With
Set WkDest = Nothing
Set WkSource = Nothing
End Sub

Au passage ton code est vraiment comme dire ... chiant à lire. Pas d'identation propre des for, if, etc ...
Variables I, S, Z etc ...
Pas de set xx = nothing à la fin,
Etc ...

Bref pour moi qui n'ai pas bcp de temps en ce moment, il m'a fallut un peu de temps pour ré-ordonner tout ca, avant de comprendre la logique.

Essaie d'organiser mieux ton code, imagine quand tu le reprendras dans 1,5 ans !

A+

Creepy
 

VBA_DEAD

XLDnaute Occasionnel
Re : Modif 1 param. - macro de bebere - recup file

Salut CREEPY et Bebere

ne dit pas que le code n`est pas facile a lire stp! ;) C`est bebere qui l`a fait, la macro fonctionne bien donc deja je t`assure que je suis le + heureux. :D

CREEPY ta formulation marche pour le 1er onglet mais apres ca cale!

ca vient d`ou?

enfin faut se dire que l`on chauffe!! je sens que la soluce est proche LOL

VBA_DEAD
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 137
Membres
104 045
dernier inscrit
Megajoules