Erreur d'exécution VBA

Bonjour à tous,

Je commence à utiliser VBA en réalisant de simples macro.

Je suis confrontée à une erreur d'exécution que je ne comprends pas.

Je souhaite ouvrir un classeur excel afin de copier une feuille déjà existante et la coller dans mon classeur de travail.

Mon problème est que je rencontre une erreur au niveau de la ligne soulignée ci-dessous et je ne comprends pas pourquoi...

Voici la macro que j'ai faite :

Sub test()
Dim classeurSource As Workbook
Dim classeurActuel As Workbook
Dim FeuilleSource As Worksheet
Dim FeuilleInsere As Worksheet

'Définition du chemin d'accès et le nom du classeur source
Dim cheminSource As String
cheminSource = Sheets("Procédure").Range("CHEMIN_RDD_SAL_COURANT").Value
classeurSource = Sheets("Procédure").Range("NOM_RDD_SAL_COURANT").Value

'Définition du nom de la feuille à insérer
Dim nomFeuille As String
nomFeuille = "RDD_SAL_COURANT"

'Vérifier si le classeur source est ouvert, sinon l'ouvrir
On Error Resume Next
Set classeurSource = Workbooks(nomFeuille)
On Error GoTo 0

If classeurSource Is Nothing Then
Set classeurSource = Worksbooks.Open(cheminSource)
End If

'Vérif si la feuille source existe dans le classeur source
On Error Resume Next
Set classeurSource = classeurSource.Sheets(nomFeuille)
On Error GoTo 0

If FeuilleSource Is Nothing Then
MsgBox "La feuille spécifiée n'existe pas dans le classeur source"
Exit Sub
End If

'Référence au classeur actuel
Set classeurActuek = ThisWorkbook

'Insérer une nouvelle feuille dans le classeur actuel
Set feuilleInseree = classeurActuel.Sheets.Add(After:=classeurActuel.Sheets(classeurActuel.Sheets.Count))

'Copier le contenu de la feuille source dans la feuille insérée
FeuilleSource.Copy Before:=feuilleInseree

'Fermer le classeur sans enregistrer les modifications
classeurSource.Close SaveChanges:=False

End Sub

Edit modo : merci de mettre le code entre balises SVP avec le bouton </>

Merci de votre aide!

Marie

le résultat de la ligne sera normallement un string ou numérique et jamais un workbook.
Ce fichier est-il déjà ouvert ???

set classeurSource = workbooks(Sheets("Procédure").Range("NOM_RDD_SAL_COURANT").Value) ???

le reste de la macro est vague, quel sont les noms de la feuille et du fichier ? Ces plages nommées, elles existent ? Pouvez-vous nous joindre votre fichier ?

Bonjour Bart,

Non le fichier n'est pas ouvert!

Bart,

Cela m'ennuie de joindre le fichier car ce sont des données professionnelles. Néanmoins les plages définies existent bien :

Sheets("Procédure").Range("CHEMIN_RDD_SAL_COURANT") : correspond au chemin du fichier

classeurSource = Sheets("Procédure").Range("NOM_RDD_SAL_COURANT") : correspond au nom du fichier excel que je veux ouvrir

Bonjour à tous,

oui mais tu as définis classeurSource As Workbook, il attend donc un objet classeur (ouvert)
Sers-toi de tes chaine chemins/nom classeur pour l'ouvrir et l'affecter à ta variable classeurSource.
eric

Bonjour Eric,

Merci pour ta réponse. Cependant je suis désolée je ne comprends pas ce que tu veux dire. Je suis débutante en VBA et ça reste encore un peu confus pour moi :(

Marie

Bonjour,

utiliser l'outil <code> quand tu en mets qu'il soit lisible :

image

J'ai mis des '**** sur les lignes ajoutées ou modifiées.
Il reste peut-être des erreurs, on ne sait pas ce que contiennent tes cellules faute de classeur, et je n'ai pas regardé au-delà de ton erreur

Sub test()
    Dim classeurSource As Workbook ' ***** c'est un objet classeur
    Dim classeurActuel As Workbook
    Dim FeuilleSource As Worksheet
    Dim FeuilleInsere As Worksheet

    'Définition du chemin d'accès et le nom du classeur source
    Dim cheminSource As String
    Dim nomFichierSource As String '!**** c'est une chaine
    cheminSource = Sheets("Procédure").Range("CHEMIN_RDD_SAL_COURANT").Value
    nomFichierSource = Sheets("Procédure").Range("NOM_RDD_SAL_COURANT").Value '!****** chaine

    'Définition du nom de la feuille à insérer
    Dim nomFeuille As String
    nomFeuille = "RDD_SAL_COURANT"

    'Vérifier si le classeur source est ouvert, sinon l'ouvrir
    On Error Resume Next
    Set classeurSource = Workbooks(nomFichierSource) '**** 
    On Error GoTo 0

    If classeurSource Is Nothing Then
        Set classeurSource = Worksbooks.Open(cheminSource & "\" & nomFichierSource) '!****** objet classeur
                                         ' ne pas ajouter & "\" s'il est déjà inclus dans cheminSource (?)
    End If '

    'Vérif si la feuille source existe dans le classeur source
    On Error Resume Next
    Set classeurSource = classeurSource.Sheets(nomFeuille) ' !*****????? classeurSource pour une feuille ?????
    On Error GoTo 0

    If FeuilleSource Is Nothing Then
        MsgBox "La feuille spécifiée n'existe pas dans le classeur source"
        Exit Sub
    End If

    'Référence au classeur actuel
    Set classeurActuek = ThisWorkbook '*******??????

    'Insérer une nouvelle feuille dans le classeur actuel
    Set feuilleInseree = classeurActuel.Sheets.Add(After:=classeurActuel.Sheets(classeurActuel.Sheets.Count))

    'Copier le contenu de la feuille source dans la feuille insérée
    FeuilleSource.Copy Before:=feuilleInseree

    'Fermer le classeur sans enregistrer les modifications
    classeurSource.Close SaveChanges:=False

End Sub

Tu dois copier directement la feuille, pas besoin d'en insérer une qui restera vierge.
Sheets("Feuil1").Copy Before:=Workbooks("Classeur2").Sheets(Sheets.Count)

eric

Bonjour Eric,

Merci pour tes explications et les correction!

Je vois déjà une amélioration, la macro va maintenant sans erreur jusqu’à la vérification du nom de la feuille dans mon fichier source.

En revanche j’ai un message disant que la feuille source n’existe pas alors que si… étonnant.

Bonjour,

Iil faut dire quelle ligne en erreur et le message.
Possiblement une faute de frappe, ou une espace dans le nom de l'onglet
Si possible joindre un fichier anonymisé réduit au minimum avec le pb
Pense à utiliser l'outil </> si tu colles un code.
eric

Bonjour Eric,

Voici l'endroit où la ligne de code bug :

    If FeuilleSource Is Nothing Then
        MsgBox "La feuille spécifiée n'existe pas dans le classeur source"
        Exit Sub
    End If

J'ai vérifié mon fichier source, le nom est exactement le même.

J'ai préparé deux fichiers que je joins à ce message en réduisant les infos au maximum pour qu'effectivement tu puisses comprendre ce je souhaite faire.

D'autre part ici je dis d'insérer la feuille copiée :

 'Insérer une nouvelle feuille dans le classeur actuel
    Set feuilleInseree = classeurActuel.Sheets.Add(After:=classeurActuel.Sheets(classeurActuel.Sheets.Count))

    'Copier le contenu de la feuille source dans la feuille insérée
    FeuilleSource.Copy Before:=feuilleInseree

Après réflexion ce que je veux faire c'est copier la feuille RDD_SAL_COURANT de mon fichier source et la coller dans l'onglet effectif de mon fichier de destination. Ainsi la feuille effectif de mon fichier de destination sera rafraichie à chaque lancement de la macro.

fichier-source.xlsm

Je remets les fichiers ici car j'ai l'impression que cela n'a fonctionné.

3fichier-source.xlsm (166.58 Ko)

Bonjour,

Merci d'indiquer le nom de la macro et le module ou elle est`.
J'ai commencé à chercher mais ça m'a saoulé. C'est à toi de fournir tous les détails sans qu'on ait à les demander...

Après réflexion ce que je veux faire c'est copier la feuille RDD_SAL_COURANT de mon fichier source et la coller dans l'onglet effectif de mon fichier de destination. Ainsi la feuille effectif de mon fichier de destination sera rafraichie à chaque lancement de la macro.

C'est ce que fait l'unique ligne de code que je t'ai mise.
Il faut juste adapter les noms
eric

Rechercher des sujets similaires à "erreur execution vba"