Envoie de données d'un fichier A à B d'une macro

Bonjour à tous,

Je travaille sur la réalisation d'une macro qui a pour but d'envoyer les données d'un onglet vers un autre fichier portant le même nom d'onglet (KPI_22).

Le lien pour accéder au fichier en question a été copié et pourtant ça ne fonctionne pas...

Excel me dit le message suivant :

image
Sub CopyDataToOtherWorkbook()
    Dim srcWorkbook As Workbook
    Dim srcWorksheet As Worksheet
    Dim destWorkbook As Workbook
    Dim destWorksheet As Worksheet
    Dim data As Variant
    Dim lastRow As Long
    Dim destFilePath As String

    ' Chemin du fichier de destination
    destFilePath = "T:\Controle_de_Gestion\KPI Kévin\1_KPI_Macro\YTD\KPI_YTD_22_LEL.xlsx"

    ' Désactiver les mises à jour de l'écran et le recalcul automatique pour améliorer la vitesse d'exécution
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' Définir le classeur et la feuille source
    Set srcWorkbook = ThisWorkbook
    Set srcWorksheet = srcWorkbook.Sheets("KPI_22")

    ' Déterminer la dernière ligne de données de l'onglet source
    lastRow = srcWorksheet.Cells(srcWorksheet.Rows.Count, "A").End(xlUp).Row

    ' Copier les données dans un tableau en mémoire
    data = srcWorksheet.Range("A1:AI" & lastRow).Value

    ' Vérifier si le fichier de destination existe
    If Dir(destFilePath) = "" Then
        MsgBox "Le fichier de destination n'existe pas : " & destFilePath, vbCritical
        GoTo CleanUp
    End If

    ' Ouvrir le classeur de destination et définir la feuille
    On Error GoTo ErrHandler
    Set destWorkbook = Workbooks.Open(destFilePath)
    On Error GoTo 0

    ' Vérifier que la feuille de destination existe
    On Error Resume Next
    Set destWorksheet = destWorkbook.Sheets("KPI_22")
    On Error GoTo 0
    If destWorksheet Is Nothing Then
        MsgBox "La feuille 'KPI_22' n'existe pas dans le classeur de destination.", vbCritical
        destWorkbook.Close SaveChanges:=False
        GoTo CleanUp
    End If

    ' Copier les données du tableau en mémoire vers le classeur de destination
    destWorksheet.Range("A1").Resize(UBound(data, 1), UBound(data, 2)).Value = data

    ' Sauvegarder et fermer le classeur de destination
    destWorkbook.Save
    destWorkbook.Close

    MsgBox "Les données ont été copiées avec succès !", vbInformation

CleanUp:
    ' Réactiver les mises à jour de l'écran et le recalcul automatique
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    Exit Sub

ErrHandler:
    MsgBox "Erreur lors de l'ouverture du fichier de destination : " & Err.Description, vbCritical
    GoTo CleanUp
End Sub

Est-ce un caractère qu'il apprécie dans le nom du lien et où du dossier ?

Merci d'avance pour votre aide

Bonne journée,

Bonjour,

De base j'éviterais de mettre le nom de votre fichier dans la variable "destfilepath"

Ensuite relancez le code pour voir si vous avez toujours le message d'erreur

Si oui, vérifiez que vous avez bien un espace KPI et Kévin dans le répertoire

KPI Kévin

de base j'ajouterais un tiret car il n'y a rien de plus mauvais que de laisser des espaces dans le nom des dossiers surtout si vous faites appel à de la programmation

Crdlt

Bonjour,

Moi je commencerai par un :

? DIR'"T:\Controle_de_Gestion\KPI*,16)

...Dans la fenêtre d'exécution !

EDIT : Bonjour, Dan !

A+

Bonjour à tous les deux,

Désolé pour ma réponse tardive...

Merci pour vos conseils

Dan,

J'ai retiré le nom de mon fichier dans le "destfilepath" et il m'a de nouveau renseigné ce message d'erreur :

image

J'ai vérifié que j'avais bien un espace dans le répertoire KPI et Kévin (il était bien présent)

image

J'ai ensuite réessayé avec le tiret entre KPI et Kévin, comme ceci : T:\Controle_de_Gestion\KPI_Kévin\1_KPI_Macro\YTD

ça n'a pas fonctionné...

    ' Chemin du fichier de destination
    destFilePath = "T:\Controle_de_Gestion\KPI_Kévin\1_KPI_Macro\YTD\KPI_YTD_22_LEL.xlsx"

Mon fichier de destination est en registré en tant que Classeur Excel (prenant en charge les macros). Faut-il le préciser dans la macro ?

Galopin,

Je suis désolé mais j'ai pas comprit où tu voulais que je le mette dans la macro

Peux-tu me montrer l'emplacement exact stp (je début sur les macros donc je galère un peu...)

Merci encore pour votre aide !!

Bonjour,

Je laisse la mai à Dan qui était sur la même idée que moi...

A+

re

J'ai retiré le nom de mon fichier dans le "destfilepath" et il m'a de nouveau renseigné ce message d'erreur :

1. Essayez ceci :

destFilePath = "T:\Controle_de_Gestion\KPI Kévin\1_KPI_Macro\YTD"

en dessous

If Dir(destFilePath, vbdirectory) = "" Then
        MsgBox "Le fichier de destination n'existe pas : " & destFilePath, vbCritical
        GoTo CleanUp
    End If

2. Si cela ne fonctionne toujours pas, mettez votre fichier contenant le code dans le même répertoire que le fichier KPI_YTD_22_LEL.xlsx.
Ensuite, mettez ce nouveau code dans un module ou en dessous de votre code Sub copyData....() par exemple

Sub test()
MsgBox ThisWorkbook.Path
End Sub

exécutez le code Test --> Cela va vous donner le répertoire et vous pourrez vérifier si vous n'avez pas une erreur

Re,

1.

J'ai essayé de faire ce que vous m'avez dit et j'ai eu le même message et voilà comment c'est écrit dans la macro (je vous montre dans le cas où je l'aurais mal placé...)

Sub CopyDataToOtherWorkbook()
    Dim srcWorkbook As Workbook
    Dim srcWorksheet As Worksheet
    Dim destWorkbook As Workbook
    Dim destWorksheet As Worksheet
    Dim data As Variant
    Dim lastRow As Long
    Dim destFilePath As String

    ' Chemin du fichier de destination
    destFilePath = "T:\Controle_de_Gestion\KPI_Kévin\1_KPI_Macro\YTD"

    If Dir(destFilePath, vbDirectory) = "" Then
        MsgBox "Le fichier de destination n'existe pas : " & destFilePath, vbCritical
        GoTo CleanUp
    End If

    ' Désactiver les mises à jour de l'écran et le recalcul automatique pour améliorer la vitesse d'exécution
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' Définir le classeur et la feuille source
    Set srcWorkbook = ThisWorkbook
    Set srcWorksheet = srcWorkbook.Sheets("KPI_22")

    ' Déterminer la dernière ligne de données de l'onglet source
    lastRow = srcWorksheet.Cells(srcWorksheet.Rows.Count, "A").End(xlUp).Row

    ' Copier les données dans un tableau en mémoire
    data = srcWorksheet.Range("A1:AI" & lastRow).Value

    ' Vérifier si le fichier de destination existe
    If Dir(destFilePath) = "" Then
        MsgBox "Le fichier de destination n'existe pas : " & destFilePath, vbCritical
        GoTo CleanUp
    End If

    ' Ouvrir le classeur de destination et définir la feuille
    On Error GoTo ErrHandler
    Set destWorkbook = Workbooks.Open(destFilePath)
    On Error GoTo 0

    ' Vérifier que la feuille de destination existe
    On Error Resume Next
    Set destWorksheet = destWorkbook.Sheets("KPI_22")
    On Error GoTo 0
    If destWorksheet Is Nothing Then
        MsgBox "La feuille 'KPI_22' n'existe pas dans le classeur de destination.", vbCritical
        destWorkbook.Close SaveChanges:=False
        GoTo CleanUp
    End If

    ' Copier les données du tableau en mémoire vers le classeur de destination
    destWorksheet.Range("A1").Resize(UBound(data, 1), UBound(data, 2)).Value = data

    ' Sauvegarder et fermer le classeur de destination
    destWorkbook.Save
    destWorkbook.Close

    MsgBox "Les données ont été copiées avec succès !", vbInformation

CleanUp:
    ' Réactiver les mises à jour de l'écran et le recalcul automatique
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic

    Exit Sub

ErrHandler:
    MsgBox "Erreur lors de l'ouverture du fichier de destination : " & Err.Description, vbCritical
    GoTo CleanUp
End Sub

J'ai essayé avec le nom du fichier, en étant dans le même répertoire :

    ' Chemin du fichier de destination
    destFilePath = "T:\Controle_de_Gestion\KPI_Kévin\1_KPI_Macro\YTD\KPI_YTD_22_LEL.xlsm"

    If Dir(destFilePath, vbDirectory) = "" Then
        MsgBox "Le fichier de destination n'existe pas : " & destFilePath, vbCritical
        GoTo CleanUp
    End If

J'ai eu ce message-ci :

image

Les données ne sont pas présentes dans l'onglet du fichier voulu.

Faut-il préciser dans la macro que mon tableau est un tableau structuré (il a été créé à l'aide du raccourci Ctrl + L) ?

2.

En suivant vos conseils, j'ai créé un nouveau module pour y insérer le code et il m'a donné ceci :

image

Encore Merci pour vos conseils !!

Re

Vous commencez à l'envers là....

2. En suivant vos conseils, j'ai créé un nouveau module pour y insérer le code et il m'a donné ceci : ...

Le code vous renvoie le répertoire à utiliser pour votre variable desfilepath
Au vu de votre dernier code où vous avez corrigé le répertoire, en principe si vous remettez votre fichier à l'endroit précédent, vous ne devriez plus avoir l'erreur
NB : Si vous laissez votre fichier contenant ce code dans le même répertoire que le fichier de destination, votre variable peut être simplifiée

3. Faut-il préciser dans la macro que mon tableau est un tableau structuré

Evidement ! si vous êtes en tableau structuré cela ne va pas vraiment fonctionner avec le code que vous avez. A voir...

Question : le but de votre code c'est de copier la feuille KPI_22 entière du fichier contenant le code vers le fichier KPI_YTD_22 se trouvant dans le répertoire T:\... ?

Oui effectivement, j'ai voulu aller vite et je me suis trompé dans ma réponse...

J'ai essayé avec le fichier en commençant de l'endroit initial et je n'ai plus d'erreur

Enfaîte je suis un peu obligé de faire comme cela car j'ai deux destinations, (YTD et Month). Pour le moment je fais en YTD et par la suite il faudra que je fasse en Month mais je pensais repartir de chaque fichier YTD où je n'aurais plus qu'à éclater par mois et par secteur.

Ah

Je travaille sur un fichier de Retraitement qui éclate le chiffre d'affaires par secteur et prescripteur. Une fois que chaque onglet de Secteur Global est fait, j'aimerais que la Macro copie les données de l'onglet KPI_22 pour les envoyés vers le fichier KPI_YTD_22 dans l'onglet KPI_22 qui est un tableau structuré.

Pour simplifier la chose, je peux peut-être ne pas faire un tableau structuré et utiliser un tableau "basique" ?

Merci pour votre aide !!

Désolé mais j'ai un peu peine à comprendre

Je travaille sur un fichier de Retraitement qui éclate le chiffre d'affaires par secteur et prescripteur. Une fois que chaque onglet de Secteur Global est fait, j'aimerais que la Macro copie les données de l'onglet KPI_22 pour les envoyés vers le fichier KPI_YTD_22 dans l'onglet KPI_22 qui est un tableau structuré.

En gros si je pige, vous copiez les données de Onglet KPI_22 du fichier où se trouve le code vers le fichier KPI_YTD_22 dans lequel se trouve l'onglet KPI_22 ?
Si oui, je reviens à la question posée dans mon post précédent et à laquelle vous ne répondez pas...

Pour simplifier la chose, je peux peut-être ne pas faire un tableau structuré et utiliser un tableau "basique" ?

Vous pouvez toujours mais je ne pense pas que le souci vienne de là .... et sans voir le fichier, on est obligé d'imaginer ...

Oui je me doute c'est pas facile à comprendre car je ne vous met pas le fichier, malheureusement il faudrait que je retraite les données car il s'agit de données sensibles. Je vais le retraiter pour vous montrer ce que je souhaite faire.

En gros si je pige, vous copiez les données de Onglet KPI_22 du fichier où se trouve le code vers le fichier KPI_YTD_22 dans lequel se trouve l'onglet KPI_22 ?

Oui c'est exactement ça !!

Si oui, je reviens à la question posée dans mon post précédent et à laquelle vous ne répondez pas...

Normalement j'y ai répondu mais je me suis mal exprimé et j'avoue que ma réponse n'était pas très claire...

Maintenant que vous le dîtes c'est beaucoup plus simple de mettre mon fichier dans le même répertoire vu que par la suite je souhaite que mon YTD devienne un Month. (je sais pas si c'était clair )

La macro actuel que vous avez vu, je souhaite qu'elle envoie les données dans le YTD (Year to Date) et de chaque fichier YTD, j'aimerais le faire par Month

Rechercher des sujets similaires à "envoie donnees fichier macro"