VBA Importation de données d'un autre classeur
Bonjour,
Je travail actuellement sur une macro Excel afin d'importer des erreurs à l'aide d'un fichier ".csv", et une base de données qui me permet par la suite de faire correspondre les erreurs avec leur libellé (j'ai utilisé la foncton VLookUp).
Pour travailler j'importe donc les deux Worksheets qui sont dans 2 Workbooks différents, dans mon WorkBook. Je n'ai aucun problème lors de l'importation des 3 colonnes de ma BDD (base de données) qui est dans un fichier (.xlsx). Cependant lorsque j'ouvre mon fichier d'erreur en ".csv" avec ma macro il change automatiquement le format des cellules.
Voici le morceau de Code :
Dim a As Variant, Recepteur As String, Emetteur As String
Dim FinalRow As Integer
'---------------------------------------- Importation Feuille excel ---
Recepteur = ActiveWorkbook.Name 'Le classeur sur lequel je travail
ChDrive "C:" ' Choix du lecteur
ChDir "C:\" 'Choix du répertoire
a = Application.GetOpenFilename("fichier excel (*.csv), *.csv", _
, "Sélection de vos fichiers excel", , True) 'Variable tableau comprenant le chemin d'accès au classeur Emetteur
Select Case TypeName(a)
Case Is = "Boolean"
Exit Sub
Case Else
For b = LBound(a) To UBound(a)
Workbooks.Open a(b)
Next
End Select
'------------------------- A partir d'ici le classeur Emetteur est deja ouvert et les cellules ont deja changees
Emetteur = ActiveWorkbook.Name ' nom du classeur qui contient les donnees que je souhaite récupérer
FinalRow = Range("A" & Rows.Count).End(xlUp).Row 'Derniere ligne de la colonne A du classeur Emetteur
Cells.Select 'Selectionne toutes les celulles
Selection.Copy 'Copie la Selection dans le Presse Papier
Windows(Recepteur).Activate 'Place le classeur Recepteur
Worksheets("Feuil3").Activate 'Sur la feuille 3
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False' Selectonne la case A1 puis fait un collage
'Activation puis desactivation des messages d erreurs
Application.DisplayAlerts = False
Windows(Emetteur).Close 'Ferme le classeur Emetteur
Application.DisplayAlerts = True
Je n'ai rien inventé dans ce morceau de code, que j'ai trouvé plusieurs fois sur internet, cependant je n'ai pas trouvé un problème similaire au miens.
Je ne comprend pas pourquoi la macro concatène mes cellules en 2. Je vous joins mes 2 fichiers excel.
Je vous remercie par avance pour votre aide.
bonsoir,
ce code-ci, qui met les données en colonnes, était en commentaire.
'---------------------------------------- Tri_point_virgule Macro ---
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 4), Array(10, 1), Array(11, 1)), _
TrailingMinusNumbers:=True
'----------------------------------------pourquoi a-t-il été désactivé ?
J'ai mis cette partie de code concernant le traitement des données sur ma page après l'importation en commentaire car mon problème avais déjà eu lieu. En effet mon problème intervient lorsque j'ouvre mon workbook qui contient les données à importer. Ces données sont normalement dans les colonnes "A:K" , mais quand j'ouvre le workbook avec ma macro les colonnes se concaténant entre ("A:B") et mes virgules deviennent des underscore ce qui me crée des problèmes par la suite. Sinon les colonnes se séparent avec un ";" et je peux les séparer avec le code que tu as réactivé. Cependant en faisant ça, la colonne "TPS_Total" contient des temps intraitable (_11 ou bien 5_88)...
De plus le fait que les virgules deviennent des underscore me fait subir des pertes de données sur certaines lignes. Cela ne se voit pas car j'ai donné un fichier d'erreur qui ne contenait que 200 erreurs au lieux des 5000 habituelles. Je joins donc un fichier ou j'ai mis en tête les lignes qui perdent des données lors du transfert (une dizaine).
Ces données étant envoyées par MES il m'est évidemment impossible de changer leur format.
Au plaisir de vous lire'
Bonjour,
une proposition de correction de ta macro de lecture du fichier erreur
Salut,
Premièrement je vous remercie d'avoir pris le temps de traiter ma demande et qui plus est d'avoir réussis à résoudre mon problème. Mon travail maintenant est donc de comprendre votre code afin de parvenir à le réaliser moi même la prochaine fois. En relisant votre travail j'ai compris plusieurs partis mais certaines reste floues à mes yeux, je vais donc vous poser quelques questions.
dl = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To dl
j = 2
While Cells(i, j) <> ""
Cells(i, 1) = Cells(i, 1) & "," & Cells(i, j)
j = j + 1
Wend
Next iEn lisant cette partie de code je comprend que vous placez le contenu de chaque colonne non vide d'une ligne dans la première cellule de la ligne en séparant le contenu des colonnes avec une virgule.
Set Cible = New DataObject
Cible.SetText ""
Cible.PutInClipboard
Set Cible = NothingCette partie du code est bien plus abstraite pour moi, je comprend que vous utilisez une alternative au Presse-Papiers qui est active seulement pendant l'utilisation du Workbook à l'inverse du Presse-Papiers. Vous imposez un format texte à cette objet et vous l'utiliser lors du transfert des données. Ce que je ne comprends pas, c'est qu'à aucun moment, je vous vois appelé cet objet, je ne comprend donc pas comment il fonctionne.
Cordialement,
Alexian'
Salut,
Premièrement je vous remercie d'avoir pris le temps de traiter ma demande et qui plus est d'avoir réussis à résoudre mon problème. Mon travail maintenant est donc de comprendre votre code afin de parvenir à le réaliser moi même la prochaine fois. En relisant votre travail j'ai compris plusieurs partis mais certaines reste floues à mes yeux, je vais donc vous poser quelques questions.
dl = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To dl j = 2 While Cells(i, j) <> "" Cells(i, 1) = Cells(i, 1) & "," & Cells(i, j) j = j + 1 Wend Next iEn lisant cette partie de code je comprend que vous placez le contenu de chaque colonne non vide d'une ligne dans la première cellule de la ligne en séparant le contenu des colonnes avec une virgule.
correct
Set Cible = New DataObject Cible.SetText "" Cible.PutInClipboard Set Cible = NothingCette partie du code est bien plus abstraite pour moi, je comprend que vous utilisez une alternative au Presse-Papiers qui est active seulement pendant l'utilisation du Workbook à l'inverse du Presse-Papiers. Vous imposez un format texte à cette objet et vous l'utiliser lors du transfert des données. Ce que je ne comprends pas, c'est qu'à aucun moment, je vous vois appelé cet objet, je ne comprend donc pas comment il fonctionne.
pour moi cette partie-ci est inutile, mais je l'ai laissée car elle faisait partie de ton code et ne pose pas de problème.