Adressage défectueux dans une macro
Bonjour à tous,
L'adressage est défectueux pour plusieurs instructions
Voici un extrait de la macro qui lit des infos dans un fichier dénommé "FEMAC.XLS" pour les écrire dans un autre fichier dénommé
"feuilnationale.xls"
Windows("FEMAC.xls").Activate
Range("M1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("feuilnationale.xls").Activate
Range("b13").Select
ActiveSheet.Paste
l'affichage se fait en "F13"
Windows("FEMAC.xls").Activate
Range("n1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("feuilnationale.xls").Activate
Range("e13").Select
ActiveSheet.Paste
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End l'affichage se fait en "B13"
Windows("FEMAC.xls").Activate
Range("o1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("feuilnationale.xls").Activate
Range("f13").Select
ActiveSheet.Paste
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
l'affichage se fait en "E13"
Les erreurs se répètent pour trois autres noms .Ce que je devais obtenir est donc illisible
Que faire?
Merci pour votre aide
Rogerone
Bonjour Rogerone, bonjour le forum,
Peut-être comme ça :
Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Set CS = worksbooks("FEMAC.xls") 'définit le classeur source CS
Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS (à adapter a ton cas)
Set CD = worksbooks("feuilnationale.xls") 'définit le classeur destination CD
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD (à adapter a ton cas)
OS.Range("M1").Copy OD.Range("B13") 'copie M1 de l'onglet source et colle dans B13 de l'onglet destination
OS.Range("N1").Copy OD.Range("E13") 'copie N1 de l'onglet source et colle dans E13 de l'onglet destination
With OD.Range("E13")
'format d'alignement de E13
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
OS.Range("O1").Copy OD.Range("F13") 'copie O1 de l'onglet source et colle dans F13 de l'onglet destination
With OD.Range("F13")
'format d'alignement de D13
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
End SubBonjour,
J'avoue que je n'ai jamais travaillé en VBA.il est grand temps que je trouve un bon tutoriel pour m'éclairer.
J'ai essayé de comprende malgré tout. L'instruction "CS.Sheets("feuill") me pose problème.je ne comprends pas. Est-ce l'endroit où est stockée "FEMAC.XLS" c-à-d pour moi D:\tennis\.
AU fond ce sont l'onglet source et l'onglet destination qui me posent problèmes
Je n'ai pas pu tester votre solution par manque de connaissance.
Je me plonge dans l'étude de la formation VBA et sans doute comprendrai-je ce que sont l'onglet source et l'onglet destination.
Merci de m'avoir répondu .Je vous avertirai lorsque cette macro aura été testée
Un grand merci
Rogerone
Bonjour Rogerone, bonjour le forum,
Un classeur Excel contient plusieurs onglets (ou feuilles). Quand on travaille dans plusieurs classeurs en VBA il est préférable de soécifier le classeur et l'onglet de ce classeur (pour la source) et, de la même manière, le classeur et l'onglet de ce classeur (pour la destinatin). Ce n'est certes pas obligatoire. Si le nom de l'onglet n'est pas spécifié, le code utilisera par défaut l'onglet actif du classeur...
J'ai par habitude de stocker tout ça dans des variables CS (Classeur Source), OS (Onglet Source), CD (Classeur Destination) et OD (Onglet Destination) avec le code :
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Set CS = worksbooks("FEMAC.xls") 'définit le classeur source CS
Set OS = CS.Sheets("Feuil1") 'définit l'onglet source OS (à adapter a ton cas)
Set CD = worksbooks("feuilnationale.xls") 'définit le classeur destination CD
Set OD = CD.Sheets("Feuil1") 'définit l'onglet destination OD (à adapter a ton cas)Donc, SET OS = CS.Sheets("Feuil1), définit l'onglet du classeur source dans lequel tu vas copier les données. Dans le commentaire, entre parenthèses, j'ai précisé, à adapté à ton cas car ton code initial ne le mentionne pas et comme j'ai perdu ma boule de cristal...
De la même manière, Set OD = CD.Sheets("Feuil1"), spécifie l'onglet du classeur destination dans lequel tu vas coller les données.
Ça semble plus long toutes ces déclarations et définitions de variables mais ça permet par la suite un simple : OS.Range("M1").Copy OD.Range("B13")
que toi tu écris :
Windows("FEMAC.xls").Activate
Range("M1").Select
Application.CutCopyMode = False
Selection.Copy
Windows("feuilnationale.xls").Activate
Range("b13").Select
ActiveSheet.Paste