• Initiateur de la discussion Initiateur de la discussion Jan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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!!!!
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
384
Retour