Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Anna_2013

XLDnaute Junior
Bonsoir,
Je souhaiterai indiquer dans la macro (voir fichier test vba1.xlsm) ci-dessous que je ne souhaite combiner dans un seul classeur excel que les feuilles qui commencent par NOTE. J'ai trouvé les codes suivants mais ne sais pas comment les adapter à la macro que j'ai construite.
Je ne connais pas non plus la syntaxe vba pour indiquer "copie les feuilles dont le nom commence par Note".
Je ne souhaite pas prendre les feuilles contenant d'autres libellés comme retrieves, performance ect...
Dim nbfeuille As Integer
Dim numfact As Integer
nbfeuille = Sheets.Count
numfact = nbfeuille + 1
Set Wl = ActiveWorkbook.Sheets(nbfeuille).Name = "NOTE" & (numfact)

Merci par avance pour votre aide,
Anna
 

Dranreb

XLDnaute Barbatruc
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Bonjour
Essayez une structure comme ça :
VB:
Dim Wl As Worksheet
For Each Wl In ActiveWorkbook.Worksheets
   If Left$(Wl.Name, 4) = "NOTE" Then
      … … …
      End If
   Next Wl
 

Dranreb

XLDnaute Barbatruc
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Vous testez Like "Note*", or il n'y a aucune feuille dans le second classeur dont le nom commence par "Note".
Il y en a deux qui commencent par quelque chose de très voisin, à savoir "NOTE", mais pas avec des minuscules. Si le nom des feuilles à copier peuvent commencer par des minuscules tester :
VB:
If  UCase(WS.Name) Like "NOTE*" Then
 

Anna_2013

XLDnaute Junior
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Bonsoir
J'ai ajouté NOTE aux fichiers à compiler.

La macro me permet de compiler en un seul fichier certains des onglets.
En effet elle commence à bugger lorsque que le message suivant apparait :
le nom est déjà utilisé par la feuille de destination. Veuillez la renommer (voir imprim écran 1 dans le word joint)

Je souhaiterais savoir s'il est possible de la modifier car pour l'instant elle m'oblige à chercher le chemin via le disque dur sur lequel sont enregistrés les fichiers. Pourriez vous svp m'indiquer comment faire pour ne pas avoir à le faire car le fichier commun est situé dans le même classeur que les autres fichiers à combiner.(word imprim écran 2).
 

Dranreb

XLDnaute Barbatruc
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Si vous voulez que le nom défini dans le classeur cible soit adopté pour les formules de la feuille copiée, je pense que Application.DisplayAlert = False devrait éviter l'avertissement et adopter cette solution. À tester.
Prenez la propriété Path du classeur cible alors. Si par exemple c'est aussi celui qui porte la macro : ThisWorkbook.Path donne son chemin.
Au lieu de ce test compliqué (entre autre Range("$A$1").Address, quelle ânerie ! C'est "$A$1" tout simplement !) essayez peut être If W1.UsedRAnge Is Nothing Then Exit Sub
 

Dranreb

XLDnaute Barbatruc
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Bonjour
Laquelle ? J'en ai proposé 3, et je ne vois pas comment je pourrais vous les expliquer mieux.
Je viens de tester la dernière, elle ne marche pas: il y a apparemment toujours une plage utilisée, même dans une feuille vide, mais alors son adresse est "$A$1". La condition c'est donc ExpressionWorksheet.UsedRange.Address = "$A$1", avec à la place de ExpressionWorksheet l'expression Worksheet représentant la feuille qu'on veut tester. Toute cette expression Boolean indique donc s'il n'y rien de renseigné d'autre dans la feuille que la cellule A1 éventuellement.

Pour synthétiser toutes mes propositions, essayez donc comme ça :
VB:
Sub CombineFiles()
Dim FileName        As String
Dim Wkb             As Workbook
Dim WS              As Worksheet
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
ChDrive ThisWorkbook.Path: ChDir ThisWorkbook.Path
FileName = Dir("*.xlsx", vbNormal)
Do Until FileName = ""
   If FileName <> ThisWorkbook.Name Then
      Set Wkb = Workbooks.Open(FileName:=FileName)
      For Each WS In Wkb.Worksheets
         If UCase(WS.Name) Like "NOTE*" Then
            If WS.UsedRange.Address <> "$A$1" Or Not IsEmpty(WS.[A1].Value) Then
               WS.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count): End If: End If: Next WS
      Wkb.Close False: End If
   FileName = Dir(): Loop
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
 

Anna_2013

XLDnaute Junior
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Merci beaucoup
La macro fonctionne effectivement mais elle me coupe le nom des onglets par exemple fichier joint Note 8.3.2

Comment puis je la modifier svp pour que le nom des onglets ne soit pas coupé?
 

Anna_2013

XLDnaute Junior
Re : Code VBA - Indiquer le nom des feuilles à copier vers un autre classeur

Par ailleurs lors de la concaténation dans le classeur commun rubrique données j'ai les liaisons avec les autres classeurs. De quelle manière est il possible de ne pas les charger lors du lancement de la macro?

Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 260
Membres
103 498
dernier inscrit
FAHDE