Recopier les colonnes d'un fichier vers un autre fichier

Bonjour la commu ! :)

Pour vous expliquer très simplement, j'ai deux fichiers, un fichier qui se nomme Matrix et un autre qui se nomme Diff.

Je souhaite recopier les colonnes Supplier label, Data Trouble Code (DTC), State of the activation of the strategy et enfin la colonne Detection class de mon fichier matrix pour les coller dans mon fichier Diff dans les colonnes A, C, D et E (qui ont les mêmes noms de colonnes que le fichier matrix sauf la E que j'ai nommé Activation state mais qui est bien State of the activation of the strategy du fichier matrix).

Concernant le copier-coller des colonnes je souhaite faire ça sans boucle si possible en copiant directement le contenu d'une colonne en utilisant la propriété .xlEnd.

Y'a t'il quelqu'un qui aurait une idée svp. J'arrive à faire en sorte d'ouvrir le fichier matrix à partir de mon fichier Diff mais il me reste à copier-coller le contenu des colonnes. Je veux savoir quelle est la meilleure optimisation possible (en utilisant la propriété .xlEnd).

Merci par avance ! ^^

4diff.xlsm (26.85 Ko)
7matrix.xlsm (236.97 Ko)
3fichier-xml-xml.zip (119.67 Ko)

Bonjour,

Une solution simple pour la base

image

Effectuez les différentes actions et arrêtez l'enregistreur

A+

Bonjour Bruno,

Merci pour l'information, la macro a bien été enregistré avec les différentes étapes que je souhaitais faire.

Maintenant je voulais savoir est-ce possible d'appeler ma fonction Sub Macro1() (qui permet de copier-coller les colonnes) dans mon autre macro de la feuille Diff à la suite du code qui permet d'ouvrir mon fichier matrix pour que les autres étapes puissent s'exécuter au fur et à mesure. Petite précision mon Sub Macro1() a été défini dans le même classeur que mon fichier Diff.

Pour résumer il ouvre le fichier matrix --> copier les colonnes et les coller dans Diff--> et exécuter les autres conditions pour que mon fichier Diff soit rempli avec les données qu'il faut (par rapport à mon code de base bien sûr).

Bonjour Abderrahmane, BrunoM45, le forum,

En supposant que les 2 classeurs soient dans le même répertoire, que la macro (nommée TRANSFERT) soit dans un module du classeur diff....

A tester:

Function FichOuvert(F As String) As Boolean
'myDearFriend!  -  www.mdf-xlpages.com
    On Error Resume Next
    FichOuvert = Not Workbooks(F) Is Nothing
End Function

Sub TRANSFERT()
 Dim tb, newtb()
 Dim k&, i&
     'If Not FichOuvert("matrix.xlsm") Then Workbooks.Open Filename:="C:\Users\maison\Desktop\" & "matrix.xlsm"
      If Not FichOuvert("matrix.xlsm") Then Workbooks.Open Filename:=ThisWorkbook.Path & "\" & "matrix.xlsm"
       tb = Workbooks("matrix.xlsm").Sheets("matrix").Range("B7:CV" & Workbooks("matrix.xlsm").Sheets("matrix").UsedRange.Rows.Count)

   Application.ScreenUpdating = False

   k = 0
   ReDim newtb(0 To UBound(tb, 1), 1 To 5)
    For i = 1 To UBound(tb, 1)
     If tb(i, 1) <> "" Then
       newtb(k, 1) = tb(i, 3)
       newtb(k, 3) = tb(i, 4)
       newtb(k, 4) = tb(i, 10)
       newtb(k, 5) = tb(i, 22)
       k = k + 1
     End If
    Next i

  If k > 0 Then
    With Workbooks("diff.xlsm").Sheets("Diff")
    On Error Resume Next
     .Cells.Borders.LineStyle = xlLineStyleNone
     .Range("A2").CurrentRegion.Offset(2, 0).ClearContents
     .Range("A3").Resize(k, 5).Value = newtb: .Columns.AutoFit
     .Range("A2").CurrentRegion.Offset(1, 0).Borders.Weight = xlThin
     .Activate
    End With
   Workbooks("matrix.xlsm").Close Savechanges:=False
  End If
 Erase tb: Erase newtb
End Sub

Cordialement,

Bonjour xorsankukai,

Merci pour ta participation à mon sujet, lors du test j'ai une erreur d'objet que je ne comprends pas, dois-je appeler ma fonction FichOuvert dans ma macro DiagMatrixCheck ?

image

Merci par avance !

2diff.xlsm (28.86 Ko)
0matrix.xlsm (236.97 Ko)

Re,

  1. Il faut recopier l'intégralité du code dans un module standard.
  2. Ensuite il suffit d'appeler la macro TRANSFERT

Cordialement,

Re

Merci pour les explication. Lorsque je run, ça fonctionne bien dans le sens où ça fait bien ce que je souhaite par contre à la fin de l'exécution j'ai toujours cette erreur et il n'exécute pas le code jusqu'à la fin..

image

Lorsque je regarde bien je ne trouve pas quel est l'objet que je n'ai pas bien déclaré avant.. aurais-tu une idée de ou cela peut provenir

3diff.xlsm (33.26 Ko)
2matrix.xlsm (236.97 Ko)

Re Bonjour BrunoM45,

J'ai testé avec l'enregistrement de la macro mais j'ai le même souci qu'au-dessus (avec ce que xorsankukai m'a envoyé) c'est à dire que lorsque je run ça fonctionne bien ça copie colle bien les colonnes au bon endroit mais après ça il s'arrête avec cet erreur (voir ci-dessous) et n'exécute pas le reste de la macro (il n'ouvre pas le fichier XML et ne compare pas les données comme mentionner dans mon code).

image

Bonjour,

Perso le problème, c'est que je ne sais absolument pas par quoi vous commencer et comment vous opérez

Donc sans explication, je ne peux pas vous aider, navré.

A+

Re,

Ma macro TRANSFERT:

  1. ouvre le classeur matrix si il ne l'est pas
  2. transfert les données de matrix dans le classeur dif
  3. referme le classeur matrix sans sauvegarde

Sans doute un conflit entre macro....

Que doit faire : DiagMatrixCheck ?

Cordialement,

Re BrunoM45,

Je me suis peut-être mal exprimé autant pour moi, pour faire simple, j'ai fait ce que vous m'avez conseillé de faire c'est à dire de crée une macro à l'aide de l'enregistrement de macro qui copie les actions que je fais, j'ai donc fait ça mais le souci c'est que lorsque je run mon code il me demande d'ouvrir le fichier ensuite il copie colle les colonnes qu'il faut et après il s'arrête subitement sans exécuter le reste de la macro DiagMatrixCheck (il n'ouvre pas le fichier XML, ne compare pas les données etc). Je te laisse les fichiers ci-dessous pour que tu puisses jeter un œil si tu le souhaites^^

2diff.xlsm (35.02 Ko)
1matrix.xlsm (237.00 Ko)

Re Xorsankukai,

Ta macro transfert fait ce que je souhaite merci pour ça ^^ cependant la macro DiagMatrixCheck par la suite doit charger le document XML avec MSXML2 et DOMDocument 60, ensuite faire une requête pour obtenir des nœuds "SW-INSTANCE" du fichier XML, elle va boucler sur chaque instance dans le fichier XML et exécuter les différentes conditions (qui permettent de comparer les données du fichier XML et ceux du fichier Diff.

Le problème c'est que peu importe ce qu'elle fait, la macro s'arrête après avoir copier, coller les colonnes du fichier matrix vers le Diff et c'est là que ça bloque. J'espère avoir été clair

Re,

Sub Transfert()
....
Call DiagMatrixCheck
End Sub

Re,

Concernant le

Call DiagMatrixCheck

Lorsque je run ça me met cette erreur :

image

Lorsque j'essaye de rajouter la référence pour trouver le nom de mon projet contenant la procédure j'ai ça comme message :

image image

Ma procédure (DiagMatrixCheck se trouve bien dans mon Diff qui est dans mon VBAProject) j'ai peut-être mal compris :/

Re,

Tout ce qui est dans la feuille Diff, doit être mis dans un module et non dans le feuille

A+

Rechercher des sujets similaires à "recopier colonnes fichier"