macro copier

J

Jan

Guest
Chers vous tous,

Je dois copier tout les mois des cellules d’un fichier dans un autre fichier (et ceci pour plusieurs fichiers).
Dans le fichier ci-joint, j’ai mis la source, les cellules qui doivent être copiées et le fichier et la destination où elles doivent être copiées.
Ce que j’essaie de faire, c’est une macro dans ce fichier grâce auquel je pourrais simplement changer le nom des fichiers de source et des fichiers destinataires en faisant un « remplace » et changer le mois….

Je ne sais pas si je m’explique bien, mais est-ce que vous pourriez m’aider ?

Merci d’avance !

Jan
 

Pièces jointes

  • Structure_Macro.zip
    8.3 KB · Affichages: 12
@

@+Thierry

Guest
Bonjour Jan, le Forum

Il y aurait plusieurs approches possibles pour faire ce que tu désires, voici déjà la plus simple à interprétrer à mon sens :

Il est entendu que tu as bien les classeurs existants dans les répertoires indiqué dans le réseau sur "I".... Il est aussi subordonné que tu corriges les colonnes "C" & "L" car il faut le dernier Anti-Slash pour le Path (I:\Jan\Resultats\ et pas I:\Jan\Resultats tout court)

Sinon ce code devrait tourner sans trop de souci vu que j'essaie aussi de gérer l'erreur en indiquant le mot erreur dans la ligne concernée sur la feuille au cas où l'un des deux fichiers n'existe pas... (ou les deux)...

Dim Cell As Range 'Variable Public en Top de Module

Sub TheParametersRecorder()
Dim WS As Worksheet
Dim Plage As Range
Dim SourcePath As String
Dim SourceFile As String
Dim SourceSheet As String
Dim SourceRange As String
Dim TargetPath As String
Dim TargetFile As String
Dim TargetSheet As String
Dim TargetRange As String

Set WS = ThisWorkbook.Sheets("Parameters")
Set Plage = WS.Range("C8:C26")

For Each Cell In Plage
If Cell <> "" Then
SourcePath = Cell
SourceFile = Cell.Offset(0, 2)
SourceSheet = Cell.Offset(0, 4)
SourceRange = Cell.Offset(0, 6)
TargetPath = Cell.Offset(0, 9)
TargetFile = Cell.Offset(0, 11)
TargetSheet = Cell.Offset(0, 13)
TargetRange = Cell.Offset(0, 15)

TheReporter SourcePath, SourceFile, SourceSheet, SourceRange, _
TargetPath, TargetFile, TargetSheet, TargetRange
End If
Next Cell
End Sub


Sub TheReporter(SP$, SF$, SS$, SR, TP$, TF$, TS$, TR$)
Dim TheArray As Variant

On Error GoTo Out1:
Workbooks.Open SP & SF
TheArray = ActiveWorkbook.Sheets(SS).Range(SR)
ActiveWorkbook.Close False

On Error GoTo Out2:
Workbooks.Open TP & TF
ActiveWorkbook.Sheets(TS).Range(TR) = TheArray
ActiveWorkbook.Close True

Exit Sub
Out1:
MsgBox "le Classeur Source " & SF & " est introuvable dans " & SP
Cell.Offset(0, -1) = "Erreur"
Exit Sub
Out2:
MsgBox "le Classeur Cible " & TF & " est introuvable dans " & TP
Cell.Offset(0, -1) = "Erreur"
End Sub


Bon Appétit
 
J

Jan

Guest
Merci beaucoup Thierry!!!!!

A première vue c'est tout à fait ce qu'il me faut!!!

J'ai néaumoins un petit problème avec la macro:
Quand un des fichiers n'existe pas, excel ne parvient pas à indiquer le mot erreur dans la ligne concernée sur la feuille, comme prévu dans la macro; au lieu de ça, VBA donne une erreur: "Run time error '424': Object required".
Quand je clique sur "Debug", la ligne suivante est marqué en jaune:

Cell.Offset(0, -1) = "Error"

Pourrait-tu éventuellement m'aider sur ce point?

Merci d'avance!!!!
 
@

@+Thierry

Guest
Re: macro copier... Chimpanzé ou Ourangoutan !!! LOL LOL LOL

Bonsoir Jan, le Forum

il n'était pas nécessaire de recopier ce Post dans ma BAL, je l'ai eu directement, la seule différence c'est que du bureau je ne vois pas mes mails, et que quand je rentre chez moi et que j'en vois deux çà m'énerve !

Bon sinon c'est absolument tres simple ! :

"Run time error '424': Object required" signifie que :

Cell.Offset(0, -1) = "Error"

N'existe pas !!!

En clair celà signifie que tu as modifié le fichier d'origine en déplaçant la colonne de départ qui était "C"....... that's all folk, this is VBA's Word !!!

Si ton tableau démarre en colonne "A" maintenant, même si tu as déplacé le reste des codes....... Cell.Offset(0, -1) t'enverra dans les mondes parallèles en dehors du tableau.... d'où une erreur.....

Voilà, c'est simple, quand vous postez un fichier exemple "stucturé" maintenez vous en à celui là et essayer de TOUT COMPRENDRE avant de transformer et de dire "J'ai néanmoins un petit problème avec la macro'...

Le boulot de développeur est en grande partie basé sur ce genre d'exemple... Savoir et prévoir... En autre language on dirait "on apprend pas aux vieux singes à faire des grimaces !!!"

Je ne t'en veux pas du tout mais parfois il faut que mes grimaces de vieux chimpanzé montre mes groces canines, sinon personne fait d'effort en me prenant pour un vieux ourangoutan dégarni et édenté !!! lol lol lol

Bonne soirée
@+Thierry
 
J

Jan

Guest
Bonjour le forum, bonjour @+Thierry,

@Thierry, excuse-moi de t'avoir recopié le message!!!

Concernant l'erreur, j'ai pas changé de colonne, j'ai juste ajouté des lignes, et adapté la macro de:

Set Plage = WS.Range("C8:C26")

à:

Set Plage = WS.Range("C8:C36")

Je croyais que c'était la chose la plus logique à faire, mais apparemment je me suis trompé?

Et soit en sûr, je n'ai à aucun moment voulu te prendre pour un vieux ourangoutan dégarni et édenté !!!!
Je sais pertinament bien que comme petit novice dans vba, je ne suis qu'une microbe dans la grande jungle ;-)

Bonne après-midi
Jan
 
@

@+Thierry

Guest
Bonjour Dan, Lapou, le Forum

Bien, alors je suis ravi d'être prix pour un chimpanzé alors !!! lol

BOn je viens de refaire le test sur ton fichier Lien supprimé en rajoutant des lignes (copiées/collées) jusqu'à 50 et en changeant le code comme tu l'as fait :
Set Plage = WS.Range("C8:C26")
à:
Set Plage = WS.Range("C8:C50")


=> Aucun souci ! (?)

Quelle version d'Excel utilises tu ?
@+Thierry
 

Discussions similaires

Réponses
6
Affichages
420

Statistiques des forums

Discussions
312 331
Messages
2 087 358
Membres
103 528
dernier inscrit
hplus