OVH Cloud OVH Cloud

copie divers fichiers

40 réponses
Avatar
Manu
Bonjour,

J'ai fais une macro, mais j'ai un soucis... Le but de la macro est de copié
des donnés dans un autre fichier, j'explique...
Mon fichier où je recois la copie est toujours le même avec le même nom de
fichier et d'emplacement par consequent aucuns soucis ici. en revanche mon
fichier source n'ais pas toujoujours le même et le nom est different à
chaque fois, alors j'ai un soucis car quand j'ai fini ma copie et que je
reviens sur le fichier source pour continuer ma macro, il prend en compte le
nom du fichier actif et c'est ce que je veux pas. est t'il possible de
revenir sur le fichier source sans qu'il prenne en compte le nom du fichier.
Je pourrais ainsi envoyer ma macro de n'importe quel fichier source.

J'espere avoir été clair.

Merci

Manu

10 réponses

1 2 3 4
Avatar
DanielCo
Denis,
Considère le cas suivant :
1. la feuille "synthese" n'est pas la feuille active.
2. la feuille active est une feuille de graphique.
".Range" se réfère à la feuille synthese à cause du "With"
"Rows" se réfère à tort à la feuille de graphique.
Daniel


| With ActiveWorkbook.Sheets("synthese")
| ThisWorkbook.Sheets("Feuil1").Range("A1:A10").Copy _
| .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1)
| End With

.Range ET .Cells se réfèrent tous les 2 à la feuille "Synthese".
Si cette dernière est une feuille graphique, je ne vois pas
comment le "POINT" devant "Cells" permettrait à l'opération
de s'effectuer!!!

Cependant, le "POINT" devant "Cells" pourrait être utile si l'usager
à des fichiers .xls et (.xlsx ou xlsm ou xlsb) puisqu'ils n'ont pas le
même nombre de lignes.


MichD
---------------------------------------------------------------
Avatar
Manu
Merci, Tu disais :

'Wk1 est le fichier qui était ouvert au
'tout début de l'opération.
'Wk est le fichier que tu as ouvert

' With Wk1.Sheets("synthese")............
....................................

Alors, Si tu dis que Wk1 est mon fichier qui est en face de moi, c'est donc
mon fichier source celui de où je vais faire mes copies.

Et si Wk est le fichier dans lequel je vais coller. Celui ci ne me pause
aucun soucis car il aura toujours le même nom "Synthese.xlsx" dans la feuil
Synthese et toujours rangé au même endroit. On peux donc l'ouvrir sans avoir
à lui demander le nom du fichier (mais ta boite de dialogue pour l'ouvrir
est tout de même pratique car il est possible qu'un jour le nom change)

Je pense que tu à peut-etre confondu les Wk et Wk1
Car dans mon fichier source, celui qui est ouvert et de là où je copie, je
dois copier diverses cellules de diverses feuil qu'on nomera Toto ; Tata ;
Tutu et ces copies atterirons dans la derniere cellule vide de la feuil
synthese du fichier synthese.

En ce moment ton code bug sur cette ligne : With Wk1.Sheets("synthese") Ce
que je comprend car dans Wk1, (le fichier ouvert, il n'y a pas de feuil qui
se nomme synthese.

Merci

Manu


"MichD" a écrit dans le message de news:
krjc7f$h40$
Une seule chose à vérifier, dans ta présentation,
je ne suis pas sûr d'avoir identifier si la copie se
fait du fichier déjà ouvert vers le fichier que tu ouvres
ou l'inverse... j'espère ne pas les avoir inversé!


'-----------------------------------------------------
Sub test()
Dim Répertoire As String, LeFichier As String
Dim Wk As Workbook, Wk1 As Workbook

'Le répertoire par défaut à partir duquel l'usager
'choisit le ficher à ouvrir
Répertoire = "c:UsersMichDdocuments"

'Test si le répertoire désigné existe
If Dir(Répertoire, vbDirectory) <> "" Then

'Avant d'ouvrir un autre fichier, Wk désigne
'le fichier qui est déjà ouvert (celui à l'écran)
Set Wk1 = ActiveWorkbook

'Si dans la fenêtre ouvrante, l'usager
'clique sur annuler, la variable LeFichier = ""
LeFichier = BrowseFile(Répertoire)
If LeFichier = "" Then
MsgBox "Opération annulée"
Exit Sub
Else
'ouvre le fichier sélectionné :
Set Wk = Workbooks.Open(LeFichier)

'Wk1 est le fichier qui était ouvert au
'tout début de l'opération.
'Wk est le fichier que tu as ouvert

With Wk1.Sheets("synthese")
Wk.Sheets("Feuil1").Range("A1:A10").Copy _
.Range ("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
Wk.Close True
End If
Else
MsgBox "Le chemin indiqué n'existe pas.", _
vbCritical + vbOKOnly, "Attention"
End If
End Sub
'-----------------------------------------------------
Function BrowseFile(CheminEtTypeFichier) As String
With Application.FileDialog(msoFileDialogFilePicker)
'Définit un titre pour la boîte de dialogue
.Title = "Choisir le fichier BASE DE DONNÉES EXCEL"
'Empêcher la multi-sélection
.AllowMultiSelect = False
'Répertoire par défaut suivi du type de fichier par défaut
.InitialFileName = CheminEtTypeFichier
'Efface les filtres existants.
.Filters.Clear
'Définit une liste de filtres pour le champ "Type de fichiers".
.Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm"
'Définit le filtre qui s'affiche par
'défaut dans le champ "Type de fichiers "."
.FilterIndex = 1
'Indique le type d'affichage dans la boîte de dialogue
'(exemple visualisation des propriétés)
.InitialView = msoFileDialogViewProperties
'Affiche la boîte de dialogue
.Show
If .SelectedItems.Count > 0 Then
BrowseFile = .SelectedItems(1)
Else
BrowseFile = ""
End If
End With
End Function
'-----------------------------------------------------

MichD
---------------------------------------------------------------

Avatar
Manu
Oui, je met cette macro dans le classeur de macro personnal car le fichier
source (de où je copie) n'est pas toujours le même.


Manu

"MichD" a écrit dans le message de news:
krjc7f$h40$
Une seule chose à vérifier, dans ta présentation,
je ne suis pas sûr d'avoir identifier si la copie se
fait du fichier déjà ouvert vers le fichier que tu ouvres
ou l'inverse... j'espère ne pas les avoir inversé!


'-----------------------------------------------------
Sub test()
Dim Répertoire As String, LeFichier As String
Dim Wk As Workbook, Wk1 As Workbook

'Le répertoire par défaut à partir duquel l'usager
'choisit le ficher à ouvrir
Répertoire = "c:UsersMichDdocuments"

'Test si le répertoire désigné existe
If Dir(Répertoire, vbDirectory) <> "" Then

'Avant d'ouvrir un autre fichier, Wk désigne
'le fichier qui est déjà ouvert (celui à l'écran)
Set Wk1 = ActiveWorkbook

'Si dans la fenêtre ouvrante, l'usager
'clique sur annuler, la variable LeFichier = ""
LeFichier = BrowseFile(Répertoire)
If LeFichier = "" Then
MsgBox "Opération annulée"
Exit Sub
Else
'ouvre le fichier sélectionné :
Set Wk = Workbooks.Open(LeFichier)

'Wk1 est le fichier qui était ouvert au
'tout début de l'opération.
'Wk est le fichier que tu as ouvert

With Wk1.Sheets("synthese")
Wk.Sheets("Feuil1").Range("A1:A10").Copy _
.Range ("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
Wk.Close True
End If
Else
MsgBox "Le chemin indiqué n'existe pas.", _
vbCritical + vbOKOnly, "Attention"
End If
End Sub
'-----------------------------------------------------
Function BrowseFile(CheminEtTypeFichier) As String
With Application.FileDialog(msoFileDialogFilePicker)
'Définit un titre pour la boîte de dialogue
.Title = "Choisir le fichier BASE DE DONNÉES EXCEL"
'Empêcher la multi-sélection
.AllowMultiSelect = False
'Répertoire par défaut suivi du type de fichier par défaut
.InitialFileName = CheminEtTypeFichier
'Efface les filtres existants.
.Filters.Clear
'Définit une liste de filtres pour le champ "Type de fichiers".
.Filters.Add "Classeurs Excel", "*.xls; *.xlsx; *.xlsm"
'Définit le filtre qui s'affiche par
'défaut dans le champ "Type de fichiers "."
.FilterIndex = 1
'Indique le type d'affichage dans la boîte de dialogue
'(exemple visualisation des propriétés)
.InitialView = msoFileDialogViewProperties
'Affiche la boîte de dialogue
.Show
If .SelectedItems.Count > 0 Then
BrowseFile = .SelectedItems(1)
Else
BrowseFile = ""
End If
End With
End Function
'-----------------------------------------------------

MichD
---------------------------------------------------------------

Avatar
MichD
Modifie seulement cette section comme ceci :

'-------------------------------
With Wk.Sheets("synthese")
Wk1.Sheets("Feuil1").Range("A1:A10").Copy _
.Range ("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
Wk.Close True
'-------------------------------

MichD
---------------------------------------------------------------
Avatar
MichD
Je suis d'accord avec toi, on peut toujours
créer un scénario... disons que personnellement
je n'utilise pas beaucoup des objets comme
"ActiveWorkbook" et "ActiveSheet"


MichD
---------------------------------------------------------------
Avatar
Manu
Je l'avais deja tenté, mais ca bug sur cette ligne :
Wk1.Sheets("Feuil1").Range("A1:A10").copy _
.Range ("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)


"MichD" a écrit dans le message de news:
krk92u$3n1$
Modifie seulement cette section comme ceci :

'-------------------------------
With Wk.Sheets("synthese")
Wk1.Sheets("Feuil1").Range("A1:A10").Copy _
.Range ("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
Wk.Close True
'-------------------------------

MichD
---------------------------------------------------------------
Avatar
MichD
|mais ca bug sur cette ligne :

As-tu vérifié le nom de chaque feuille pour chacun
des classeurs? Leur orthographe?
Est-ce qu'une des feuilles est protégée?
Quel est le message d'erreur?


MichD
---------------------------------------------------------------
Avatar
Manu
Oui Mich, j'ai fais très attention aux noms des feuil et il n'y a aucune
protection.

Le message d'erreur est :

Erreur d'execution '-2147221080 (800401a8)':
Erreur automation

Manu

"MichD" a écrit dans le message de news:
krknu2$cmp$
|mais ca bug sur cette ligne :

As-tu vérifié le nom de chaque feuille pour chacun
des classeurs? Leur orthographe?
Est-ce qu'une des feuilles est protégée?
Quel est le message d'erreur?


MichD
---------------------------------------------------------------

Avatar
MichD
Essaie comme ceci. Assure-toi que le symbole "_"
est présent dans Range("A1:A10") _

'-------------------------------
With Wk.Sheets("synthese")
Wk1.Sheets("Feuil1").Range("A1:A10") _
.Copy .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
'-------------------------------

MichD
---------------------------------------------------------------
Avatar
Manu
Bonsoir,

Merci à Tous, ca fonctionne nickel ! Mais j'ai compris pourquoi ca ne
fonctionnais pas, enfin je crois....
Ca devait être parce que j'avais mon fichier destination (où on colle) avec
rien dans la colonne A et le code lui demandais de chercher la derniere
cellule pleine. Et comme il y en avais pas....
Ca devait être cela.

Un grand merci à vous tous !!!

Manu

"MichD" a écrit dans le message de news:
krm1mb$9ar$
Essaie comme ceci. Assure-toi que le symbole "_"
est présent dans Range("A1:A10") _

'-------------------------------
With Wk.Sheets("synthese")
Wk1.Sheets("Feuil1").Range("A1:A10") _
.Copy .Range("A" & .Cells(.Rows.Count, 1).End(xlUp).Row + 1)
End With
'-------------------------------

MichD
---------------------------------------------------------------

1 2 3 4