Rapport de message :*
 

Re: Copier coller colonnes d'un fichier à un autre

Titre du sujet : Re: Copier coller colonnes d'un fichier à un autre
par myDearFriend! le 23/12/2022 15:12:45

Bonjour Razmo, bienvenu sur XLpages Content(e)

 

Tu trouveras en pièce jointe une tentative de réponse à ta demande, sachant que je ne me suis préoccupé que de la partie du code dont tu parles...

 

1/ A mon avis, il y a visiblement une grosse confusion dans ton code entre les "objets" et les noms que tu leur donnes. ... Pas très simple à expliquer, mais je tente ma chance :

 

Par exemple, dans cette expression : 

Set MATRIX_WB = Workbooks.Open(Filename:=MATRIX_FILE, ReadOnly:=False)

MATRIX_WB est un objet (d'où la nécessité de l'instruction "Set" pour lui attribuer un contenu)

MATRIX_FILE est une variable chaine de caractère.

 

Si (plus loin dans ton code) tu écris quelque chose comme ça :

Workbooks("MATRIX_WB")
Ca ne peut plus avoir de signification pour VBA (car là, tu essaies de faire référence à un Classeur qui se nommerait textuellement "MATRIX_WB" et non au classeur lui-même !).
 

Par exemple, pour fermer le dit classeur, tu ferais simplement : MATRIX_WB.Close (et non pas Workbooks("MATRIX_WB").Close)

 

2/ Pour info, pour les déclarations de variables en VBA, lorsque tu écris :

Dim MATRIX_LABEL_H, MATRIX_DETECT_H, MATRIX_DTC_H As Range
 

Seul "MATRIX_DTC_H" est déclaré comme Range. Les 2 autres sont considérés comme Variant par VBA. Il faut obligatoirement indiquer le type de variable pour CHAQUE élément, même s'ils sont sur une même ligne Dim (c'est en particulier, une différence entre VB et VBA sauf erreur). En l'absence de Type, le code considère qu'il s'agit de Variant.

 

Par ailleurs, je pense sincèrement que nommer une variable "D7" (voir ton code) et en tant que Range qui plus est, ce n'est pas forcément un bonne idée (ça ressemblerait plus à une simple référence de cellule, mais c'est juste un point de vue personnel).

 

3/ En fonction de ce que j'ai compris de ton objectif, voici la partie du code que je te propose dans la pièce jointe :

 

En déclaration supplémentaire :

Dim MATRIX_LABEL_H_Datas As Range, MATRIX_DETECT_H_Datas As Range, MATRIX_STATE_H_Datas As Range, MATRIX_DTC_H_Datas As Range

Dim nbLignDatas&
Puis ...
...
...
...
'Set the header for every used column of the matrix
With MATRIX_WS
    Set MATRIX_LABEL_H = .Range("A6").EntireRow.Find("Supplier Label")
    Set MATRIX_DETECT_H = .Range("A6").EntireRow.Find("Detection Class")
    Set MATRIX_STATE_H = .Range("A6").EntireRow.Find("State of the activation of the strategy")
    Set MATRIX_DTC_H = .Range("A6").EntireRow.Find("Data Trouble Code (DTC)")
    
    'set Datas range for these columns
    nbLignDatas = .Cells(.Rows.Count, MATRIX_LABEL_H.Column).End(xlUp).Row - 6          '(car entête en ligne 6)
    Set MATRIX_LABEL_H_Datas = MATRIX_LABEL_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_DETECT_H.Column).End(xlUp).Row - 6
    Set MATRIX_DETECT_H_Datas = MATRIX_DETECT_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_STATE_H.Column).End(xlUp).Row - 6
    Set MATRIX_STATE_H_Datas = MATRIX_STATE_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_DTC_H.Column).End(xlUp).Row - 6
    Set MATRIX_DTC_H_Datas = MATRIX_DTC_H.Resize(nbLignDatas, 1).Offset(1, 0)
End With

'Define variables for Diff tab
Set DIFF_DETECT_H = DIFF_WS.Range("A2").EntireRow.Find("Detection Class")
Set DIFF_LABEL_H = DIFF_WS.Range("A2").EntireRow.Find("Supplier Label")
Set DIFF_DTC_H = DIFF_WS.Range("A2").EntireRow.Find("DTC code")
Set DIFF_STATE_H = DIFF_WS.Range("A2").EntireRow.Find("Activation state")

'Copy and paste column Matrix to Diff
MATRIX_LABEL_H_Datas.Copy Destination:=DIFF_LABEL_H.Offset(1, 0)
MATRIX_DETECT_H_Datas.Copy Destination:=DIFF_DETECT_H.Offset(1, 0)
MATRIX_STATE_H_Datas.Copy Destination:=DIFF_STATE_H.Offset(1, 0)
MATRIX_DTC_H_Datas.Copy Destination:=DIFF_DTC_H.Offset(1, 0)
 

 

En espérant t'avoir donné la bonne piste à suivre...

 

Bien cordialement,