Importer des données d'un autre fichier

bonjour à tous,

j'explique mon objectif et problème:

Objectif = supprimer le contenu d'un onglet de ma base onglet Calls Database (OK)
ouvrir le fichier externe (calendrier-ao-final) d'où je souhaite importer les nouvelles données (OK)
copier les lignes nouvelles à importer (OK)
les coller dans ma base et plus spécifiquement l'onglet Calls Database (pas OK)

soucis:

le problème semble venir de ma ligne de collage vers ma base

Workbooks(ThisWorkbook.Path & "\TBD 9.4.xlsm").Worksheets("Calls Database").Range ("A1")

cela m'indique: erreur d'exécution 9, l'indice n'appartient pas à la sélection..

Voici la macro en question:

Private Sub Call_Database_sync()

localisation = Worksheets("Administrator").Cells(9, 32)
If (localisation = "Portable") Then

 'Empêche le rafraichissement de l'écran
Application.ScreenUpdating = False

'on supprime les calls précédemments indiqués
With Worksheets("Calls Database")
.Range("A2:M400").EntireRow.Delete '--- nettoyage
End With

'on détermine le fichier source
chemin = "C:\Users\darkangel\Desktop\"
fichier = "calendrier-ao FINAL.xlsm"

'Ouverture du fichier
Set wb = Workbooks.Open(chemin & fichier)
Application.DisplayAlerts = False
With wb.Sheets("Calls")
fin = .Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To fin
.Rows(i).EntireRow.Copy
Workbooks(ThisWorkbook.Path & "\TBD 9.4.xlsm").Worksheets("Calls Database").Range ("A1")

Next

wb.Close
Application.ScreenUpdating = True
End With
    End If
End Sub

Bonsoir Darkangel,

Je te propose d'aménager ta macro de la façon suivante :

Private Sub Call_Database_sync()
    Const cSheetCibleName = "Calls Database"
    localisation = Worksheets("Administrator").Cells(9, 32)
    If (localisation = "Portable") Then
         'Empêche le rafraichissement de l'écran
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False

        'on supprime les calls précédemments indiqués - Modifié GVS
        On Error Resume Next
        Set osheet = ThisWorkbook.Worksheets(cSheetCibleName)
        If Not osheet Is Nothing Then
            osheet.Delete
        End If
        On Error GoTo 0

        'on détermine le fichier source
        chemin = "C:\Users\darkangel\Desktop\"
        fichier = "calendrier-ao FINAL.xlsm"

        'Ouverture du fichier
        Set wb = Workbooks.Open(chemin & fichier)
        With wb.Sheets("Calls")
            'Copie de la feuille dans une nouvelle feuille du classeur actuel
            .Copy Before:=ThisWorkbook.Sheets(1)
            Set osheet = ThisWorkbook.Worksheets(1)
            osheet.Name = cSheetCibleName
            wb.Save
            wb.Close
        End With
        ThisWorkbook.Save
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
    End If
End Sub

Bonjour Gérard,

Merci pour votre retour et cette proposition de révision.
cependant je ne veux pas supprimer la feuille pour en récréer une derniere sinon cela fausse ma gestion de mot de passe.

Aussi mon but est d'effacer le contenu de Calls Database et d'y coller ce qui est récupérer depuis le fichier externe

Hi Darkangel,

Peux-tu en dire plus sur

cela fausse ma gestion de mot de passe

pour ma Security settings and rights

dans ma partie admin j'attribue des rôles suivant les pages et je récupère le noms des onglets via

=SIERREUR(STXT(CELLULE("nomfichier";'Calls Database'!A1); TROUVE("]"; CELLULE("nomfichier";'Calls Database'!A1))+1;255);"")

mais si je supprime call database pour le régénérer bah cela génère un problème de ref

Darkangel,

Pour être franc, je n'ai pas tout compris concernant ta méthode de protection. Toutefois, j'ai compris que tu ne voulais pas supprimer la feuille cible. Aussi je te fais une nouvelle proposition :

Private Sub Call_Database_sync()
    Const cSheetCibleName = "Calls Database"
    localisation = Worksheets("Administrator").Cells(9, 32)
    If (localisation = "Portable") Then
         'Empêche le rafraichissement de l'écran
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False

        'on supprime les calls précédemments indiqués - Modifié GVS
        Set osheet = ThisWorkbook.Worksheets(cSheetCibleName)
        osheet.Cells.Clear

        'on détermine le fichier source
        'chemin = "C:\Users\darkangel\Desktop\"
        chemin = ThisWorkbook.Path & "\"
        fichier = "calendrier-ao FINAL.xlsm"

        'Ouverture du fichier
        Set wb = Workbooks.Open(chemin & fichier)
        'Copier toute la feuille "Calls"
        With wb.Sheets("Calls")
            .Cells.Copy
            osheet.Paste
        End With
        ThisWorkbook.Save
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True3
    End If
End Sub

Dis-moi si ça convient...

merci mais cela me génère une erreur 1004

l'ouverture et copie se passe bien mais pas le paste à priori

Darkangel,

Désolé, j'ai oublié d'enlever la ligne de code pour mes tests. Essayes avec :

Private Sub Call_Database_sync()
    Const cSheetCibleName = "Calls Database"
    localisation = Worksheets("Administrator").Cells(9, 32)
    If (localisation = "Portable") Then
         'Empêche le rafraichissement de l'écran
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False

        'on supprime les calls précédemments indiqués - Modifié GVS
        Set osheet = ThisWorkbook.Worksheets(cSheetCibleName)
        osheet.Cells.Clear

        'on détermine le fichier source
        chemin = "C:\Users\darkangel\Desktop\"
        'chemin = ThisWorkbook.Path & "\"
        fichier = "calendrier-ao FINAL.xlsm"

        'Ouverture du fichier
        Set wb = Workbooks.Open(chemin & fichier)
        'Copier toute la feuille "Calls"
        With wb.Sheets("Calls")
            .Cells.Copy
            osheet.Paste
        End With
        ThisWorkbook.Save
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True3
    End If
End Sub

Avec ma version EXCEL 365, ce code fonctionne...

merci à vous

j'avais dores et déjà modifié la ligne du chemin .

le problème vient bien de : osheet.Paste

en fait meme si je fais osheet.Range("A1").Select cela fait la meme erreur.

tout ce qui touche au fichier sur lequel on doit coller ne fonctionne pas

pourtant si ( "osheet.Paste) je sélectionne le ficher à la main et fait CRTL v cela fonctionne...

bon j'ai réussi par moi même

j'ai remplacé le osheet.paste par

 .Cells.Copy ThisWorkbook.Worksheets("Calls Database").Range("A1")

et cela fonctionne

merci à vous pour votre aide

Rechercher des sujets similaires à "importer donnees fichier"