Problème de code

Bonjour,

J'ai tenté de rentrer un code VBA dans un fichier excel mais il m'affiche un message d'erreur.

probleme

Et ceci est le code de la photo:

Sub MergeSheets2()
    'Updated by Extendoffice 2019/2/20
    Dim xStrPath As String
    Dim xStrFName As String
    Dim xWS As Worksheet
    Dim xMWS As Worksheet
    Dim xTWB As Workbook
    Dim xStrAWBName As String
    Dim xI As Integer
    On Error Resume Next

    xStrPath = " C:\Users\DT168\Desktop\KTE\"
    xStrName = "Sheet1,Sheet3"

    xArr = Split(xStrName, ",")

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xTWB = ThisWorkbook
    xStrFName = Dir(xStrPath & "*.xlsx")
    Do While Len(xStrFName) > 0
    Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
    xStrAWBName = ActiveWorkbook.Name
    For Each xWS In ActiveWorkbook.Sheets
    For xI = 0 To UBound(xArr)
    If xWS.Name = xArr(xI) Then
    xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
    Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
    xMWS.Name = xStrAWBName & "(" & xArr(xI) & ")"
    Exit For
    End If
    Next xI
    Next xWS
    Workbooks(xStrAWBName).Close
    xStrFName = Dir()
    Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

Est-ce que quelqu'un sait d'où pourrait venir mon problème et me dire s'il y a a d'autre erreur?

Pour information, je voudrais pourvoir mettre dans un classeur hôte toutes les données de plusieurs classeurs sources. Or il peut y avoir une grosse grosse quantité de classeurs sources.

Par exemple, je veux pouvoir retrouver tous les noms et temps de chaque chantiers sur une même feuilles sur mon fichier hôte.

3chantier-a.xlsx (8.60 Ko)
1chantier-b.xlsx (8.58 Ko)
1chantier-c.xlsx (8.59 Ko)

Et voila le fichier de base, je dois pouvoir récupérer et isoler le nom du chantier, le temps qu'il a pris et la quantité de bois utilisé dans le première feuille "info chantier".

Bonjour Rispo,

De ce que je vois ta variable n'est pas déclaré, et comme tu as mis "Option Explicit", il te faut obligatoirement déclaré toutes tes variables.

bonjour

lire des données dans une collection de fichiers de même structure et tous dans le même répertoire, ça se fait par le menu Données/Obtenir de fichier "de classeur"

ici "classeur" veut dire "répertoire (Microsoft fait des âneries parfois ! )

ça les lit tous et ça les concatène

https://www.youtube.com/watch?v=a7E29H5ZUmE

ensuite tu ne conserve que les données qui t'intéresssent

essaye

amitiés

(Floriant53) Oui je sais qu'il faut que je déclare les variables. Or je ne suis pas programmeur et ce code je ne l'ai pas fait moi même du coup je ne sais pas comment je dois déclarer mes variables ni même qu'elles sont mes variables.

(JMD) Je sais que je peux tout réunir sous une même feuille grâce à ce procédé mais sauf qu'il faudrait que ce soit plus automatique que de devoir refaire la manip a chaque fois que j'en ai besoin.

Bonjour,

Florian a 100% raison ... !!!

Pour éliminer cette erreur, il te suffit d'ajouter

 Dim xStrName As String

en tout début de macro ...

Et accessoirement ne pas oublier de remercier ExtendOffice qui poste des macros sur Internet sans les tester ... !!!

J'imagine que c'est juste une coquille dans le code.

Change

xStrName = "Sheet1,Sheet3"

en

xStrFName = "Sheet1,Sheet3"

Re Vince,

S'il s'agit d'une coquille ...

Attention à l'instruction suivante .

xArr = Split(xStrName, ",")

ou alors ... pas une MAIS ... DEUX coquilles ...

Merci ExtendOffice ... !!!

(JMD) Je sais que je peux tout réunir sous une même feuille grâce à ce procédé mais sauf qu'il faudrait que ce soit plus automatique que de devoir refaire la manip a chaque fois que j'en ai besoin.

il FAUT tester et apprendre cet outil du présent et de l'avenir

et tu constateras qu'il suffit de cliquer "actualiser" pour mettre à jour (par ex si tu passes de 100 à 500 fichiers parce que tes collègue en ont soudainement pondu 400 de plus)

une actualisation prend environ... 1 seconde d'attente

amitiés

ou alors ... pas une MAIS ... DEUX coquilles ...

Effectivement, ma théorie tombe à l'eau , je ne pense pas que ce soit la même variable maintenant.

Alors là je crois que je sus tombée sur un os...

Je viens de régler le 1er problème mais il en survient un nouveau...

Maintenant il me dit la même chose mais mais avec xArr, il em dit que ma variable n'est pas définie...

Sub MergeSheets2()
    'Updated by Extendoffice 2019/2/20
    Dim xStrName As String
    Dim xStrPath As String
    Dim xStrFName As String
    Dim xWS As Worksheet
    Dim xMWS As Worksheet
    Dim xTWB As Workbook
    Dim xStrAWBName As String
    Dim xI As Integer
    On Error Resume Next

    xStrPath = " D:\Exemple"
    xStrFName = "Sheet1,Sheet3"

   xArr = Split(xStrName, ",")

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xTWB = ThisWorkbook
    xStrFName = Dir(xStrPath & "*.xlsx")
    Do While Len(xStrFName) > 0
    Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
    xStrAWBName = ActiveWorkbook.Name
    For Each xWS In ActiveWorkbook.Sheets
    For xI = 0 To UBound(xArr)
    If xWS.Name = xArr(xI) Then
    xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
    Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
    xMWS.Name = xStrAWBName & "(" & xArr(xI) & ")"
    Exit For
    End If
    Next xI
    Next xWS
    Workbooks(xStrAWBName).Close
    xStrFName = Dir()
    Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

as-tu lu mon message de 1:34 pm ?

Oui mais j'ai lu et j'essaie, mais une fois que tu as réuni toutes les feuilles d'un classeur sur une même feuille, comment tu fais pour faire des opérations sur ces informations?

L'avantage de tout mettre dans une feuille basique est que je sais comment elle marche et donc je saurais comment tout faire pour en arriver à mon but.

re

une fois toutes tes données dans une unique feuille, tu fais des tris, des filtres et surtout des TCD

c'est la base de l'analyse de données

à la rigueur des SOMME et SOMMEPROD (mais je préfère les TCD)

amitiés

Faut pas utiliser trop trop d'abréviation car c'est pas toujours compréhensible.

Mais en gros j'ai juste besoin de faire deux addition et je suis bloqué ici:

probleme 1

re

il vaudrait mieux un fichier exemple, court !

fais ce test : sur cette vue, clique sur le menu Accueil "fermer et charger"

Du coup je pense que je devrais arriver à me débrouiller avec ton lien youtube

Merci

reviens ici si problème, avec un peeeeetit fichier exemple

amitiés

Très bien merci

Re,

Au risque de me répéter :

Merci ExtendOffice ...!!! pour la très grande maitrise ...

Ci-joint leur macro débuggée ...

Sub MergeSheets3()
    'NOT Updated by Extendoffice 2019/2/20
    Dim xStrName As String
    Dim xStrPath As String
    Dim xStrFName As String
    Dim xArr
    Dim xWS As Worksheet
    Dim xMWS As Worksheet
    Dim xTWB As Workbook
    Dim xStrAWBName As String
    Dim xI As Integer
    On Error Resume Next

    xStrPath = " D:\Exemple"
    xStrName = "Sheet1,Sheet3"

    xArr = Split(xStrName, ",")

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xTWB = ThisWorkbook
    xStrFName = Dir(xStrPath & "*.xlsx")
    Do While Len(xStrFName) > 0
    Workbooks.Open Filename:=xStrPath & xStrFName, ReadOnly:=True
    xStrAWBName = ActiveWorkbook.Name
    For Each xWS In ActiveWorkbook.Sheets
    For xI = 0 To UBound(xArr)
    If xWS.Name = xArr(xI) Then
    xWS.Copy After:=xTWB.Sheets(xTWB.Sheets.Count)
    Set xMWS = xTWB.Sheets(xTWB.Sheets.Count)
    xMWS.Name = xStrAWBName & "(" & xArr(xI) & ")"
    Exit For
    End If
    Next xI
    Next xWS
    Workbooks(xStrAWBName).Close
    xStrFName = Dir()
    Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True

End Sub

Au final je n'y arrive pas.

Tu veux pas qu'on essaie mais avec mes exemple?

Rechercher des sujets similaires à "probleme code"