Nom d'une variable déja utilisé

Hello la team,

J'ai un petit souci mineur mais qui a son importance.

L’objectif :

Il y a 2 types de fichiers, plusieurs fichiers source qui contiennent les données et un autre qui doit les récupérer via un filtre de date et de nom du fichier source.

Le code récupère copie les données venant du fichier source et les coller dans une nouvelle feuille du fichier destination et nomme la feuille au nom du fichier source.

Le code fonctionne mais si on recharge les données d'un fichier source dont la feuille existe déjà dans le fichier destination, le code plante à cause du nom ( qui est déjà existant ). Meme avec un morceau de code qui vérifie si une feuille existe.

Auriez vous une feinte à me conseiller ?

Je suis encore assez débutant donc si vous avez des remarques ou des propositions d'amélioration je suis bien évidement preneur!

Merci bien

Je vous joins le code

Sub FileBrFinal()

'----------------------------------------déclaration de variable-------------------------------------------------------------

Dim Datedebut As String

Dim Datefin As String

Dim FilePath As String, ticker As String

Dim wbTicker As Workbook, wbAssetFile As Workbook

Dim wsTicker As Worksheet, wsAssetFile As Worksheet

Dim Rng As Range, entete As Range

Application.ScreenUpdating = False


'---------------------------------------Code--------------------------------------------------------------------------------

Set wbAssetFile = Workbooks("fichierDestination.xlsm")

Set wsAssetFile = wbAssetFile.Sheets("Request")



Datedebut = wsAssetFile.Range("B1").Value

Datefin = wsAssetFile.Range("B2").Value


ticker = wsAssetFile.Range("B3").Value

FilePath = "C:\ProjetData\" & ticker & ".xlsx"

Set wbTicker = Workbooks.Open(FilePath)

Set wsTicker = wbTicker.Sheets("Feuil1")



With wsTicker

.AutoFilterMode = False

.Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Format(Datedebut, "mm/dd/yyyy"), _
Operator:=xlAnd, Criteria2:="<=" & Format(Datefin, "mm/dd/yyyy"), VisibleDropDown:=False

Set Rng = .AutoFilter.Range
Set entete = .Range(Range("A3"), Range("A3").End(xlToRight))


With wbAssetFile

If .Sheets(ticker) Is Nothing Then

.Sheets.Add after:=.Sheets(Sheets.Count)

.Sheets(Sheets.Count + 1).Name = ticker ' ligne d'erreur ou le nom est déja attribué

Else: .Sheets(ticker).Cells.Clear

End If

entete.Copy .Sheets(ticker).Range("A1")

Rng.Copy .Sheets(ticker).Range("A2")



End With

End With



wbTicker.Close SaveChanges:=False

Application.ScreenUpdating = True

Set wbAssetFile = Nothing: Set wsAssetFile = Nothing: Set wbTicker = Nothing: Set wsTicker = Nothing: Set Rng = Nothing: Set entete = Nothing


End Sub

Bonjour,

une solution à mettre au début du code après la variable ticker

dim ws as worksheet

For each ws in wbAssetFile.worksheets 
       If ws.name=ticker  then exit sub
next

Merci du retour Mus54!!

Désolé je me suis mal exprimé. Dans l'idée je souhaite que le fait de recharger des données sur une feuille déja existante écrase les anciennes données

Par exemple : si je lance la macro avec une Datedebut = 15/07, DateFin 30/07 avec un ticker

et que je relance la macro avec Datedebut = 13/07 au DateFin =16/07 avec le meme ticker, que cela écrase les anciennes données sur la feuille du ticker déjà existante .

D’où le fait de tester si la feuille existe déjà mais le nom du ticker déjà attribué pose problème.

Alors que si j'ai bien compris votre code il permet de sortir de la macro si la feuille existe déjà dans le fichier de destination

Mon soucis se situe sur ce morceau de code qui teste l'existence de la feuille

With wbAssetFile

If .Sheets(ticker) Is Nothing Then

.Sheets.Add after:=.Sheets(Sheets.Count)

.Sheets(Sheets.Count + 1).Name = ticker ' ligne d'erreur ou le nom est déja attribué

Else: .Sheets(ticker).Cells.Clear

End If

c'est louche,

as tu un fichier d'exp à nous joindre ?

3m0usheur.xlsx (9.67 Ko)

Voici

J'ai changé le code en mettant une petite macro qui teste l’existence de la feuille au lieu de la boucle If avec Nothing

merci de prendre le temps !

J'avais pensé a supprimer la feuille si elle existe et puis la remplacer par une nouvelle mais le souci perdure

If FeuilleExiste(ticker) = True Then

.Sheets(ticker).Delete


Else: .Sheets.Add after:=.Sheets(Sheets.Count)

.Sheets(Sheets.Count + 1).Name = ticker

End If

je te laisse voir ça.

j'ai appliqué ce que j'avais dis premièrement.

mets les deux fichiers dans le même classeur

3m0usheur.xlsx (9.67 Ko)

a+

J'avais pensé a supprimer la feuille si elle existe et puis la remplacer par une nouvelle mais le souci perdure

Remplace le code par celui ci pour supprimer la feuille.

Sub gerantFileBrFinal()
Application.ScreenUpdating = False

'----------------------------------------déclaration de variable-------------------------------------------------------------
Dim Datedebut As String
Dim Datefin As String
Dim ws As Worksheet
Dim FilePath As String, ticker As String
Dim wbTicker As Workbook, wbAssetFile As Workbook
Dim wsTicker As Worksheet, wsAssetFile As Worksheet
Dim Rng As Range, entete As Range
'---------------------------------------Code--------------------------------------------------------------------------------

Set wbAssetFile = Workbooks("fichierdestination.xlsm")
Set wsAssetFile = wbAssetFile.Sheets("Request")

Datedebut = wsAssetFile.Range("B1").Value
Datefin = wsAssetFile.Range("B2").Value

ticker = wsAssetFile.Range("B3").Value
FilePath = ThisWorkbook.Path & "\" & ticker & ".xlsx"

Set wbTicker = Workbooks.Open(FilePath)
Set wsTicker = wbTicker.Sheets("Feuil1")

With wsTicker
    .AutoFilterMode = False
    .Range("A2").AutoFilter Field:=1, Criteria1:=">=" & Format(Datedebut, "mm/dd/yyyy"), _
    Operator:=xlAnd, Criteria2:="<=" & Format(Datefin, "mm/dd/yyyy"), VisibleDropDown:=False
    Set Rng = .AutoFilter.Range
    Set entete = .Range(Range("A3"), Range("A3").End(xlToRight))
    With wbAssetFile
        For Each ws In wbAssetFile.Worksheets
            If ws.Name = ticker Then
                ws.Delete
            End If

        Next
        .Sheets.Add after:=.Sheets(Sheets.Count)
        .Sheets(Sheets.Count + 1).Name = ticker ' ligne d'erreur ou le nom est déja attribué
        entete.Copy .Sheets(ticker).Range("A1")
        Rng.Copy .Sheets(ticker).Range("A2")
    End With
End With

wbTicker.Close SaveChanges:=False
Application.ScreenUpdating = True
Set wbAssetFile = Nothing: Set wsAssetFile = Nothing: Set wbTicker = Nothing: Set wsTicker = Nothing: Set Rng = Nothing: Set entete = Nothing
End Sub

Cela marche nickel !! merci de vos retours Mus54

J'ai "complété" le code aussi avec des displayAlerts

With wbAssetFile

        Application.DisplayAlerts = False

        For Each ws In wbAssetFile.Worksheets

            If ws.Name = ticker Then
                ws.Delete
            End If

        Next

        Application.DisplayAlerts = True

Bien à vous !!

Rechercher des sujets similaires à "nom variable deja utilise"