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