Microsoft 365 Import Donnes issu de fichier CSV

GClaire

XLDnaute Occasionnel
Supporter XLD
Salut les exceliennes(iens)

je continue sur le fichier de mon ami.

Il reçoit régulièrement de nouveaux thème.
Ces nouveaux thèmes sont dans un fichier CSV,

je tente désespérément d'importer ces données dans mon fichier, mais cela ne se passe pas comme il faut, lol

Ce que je cherche a faire

1) Rechercher le fichier (Qui n'aura jamais le même nom, mais sur le bureau) avec le juste chemin (Sans son nom) dans la cellule "B4" de la feuille "Paramètres", si rien est renseigné dans cette cellule, faire une recherche jusqu'au bureau.

2) Importer les données du fichier trouvé, dans la feuille "Nouveau Theme" de la colonne "A:G"

pour le moment cela importe, mais cela ne garde pas les colonnes comme dans le fichier, je me doute que c'est du fait que c'est un CSV, mais je ne vois pas ce qu'il faut faire.

Il y a peut être d'autres choses qui ne vont pas dans ce code, mais j'ai tenté de faire par rapport a ce que j'ai pu voir sur le forum et adapté.

Si vous avez la solution

Par avance, merci,

Passez une bonne soirée

G'Claire
 

Pièces jointes

  • Aide forum.xlsm
    25.1 KB · Affichages: 4
  • openquizzdb_259.zip
    18.1 KB · Affichages: 7

Staple1600

XLDnaute Barbatruc
Bonsoir @GClaire

Puisque tu utilises Office 365 pourquoi ne pas utiliser Power Query ?
(inclu dans Excel)
C'est très simple à utiliser

PS: Il y a d'autres tutos sur le net, notamment des videos
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Hello Staple 1600, le firum

Bonsoir @GClaire

Puisque tu utilises Office 365 pourquoi ne pas utiliser Power Query ?
(inclu dans Excel)
C'est très simple à utiliser

PS: Il y a d'autres tutos sur le net, notamment des videos
J’avais fais un test à la mano d’import, en tant que fichier CSV, il ne le faisait pas

Je comprends pas trop.

J’ouvre le fichier toutes les colonnes y sont, je l’importe via ce code, et bien ça fait n’importe quoi.

Merci

Bonne soirée

G’Claire
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Re

Je viens de retester, cela a fonctionné.

J'ai utilisé l'enregistreur de macro afin de voir ce que cela donnait.

VB:
Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.Queries.Add Name:="openquizzdb_259 (3)", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(File.Contents(""C:\Users\jz52353491\Desktop\openquizzdb_259.csv""),[Delimiter="";"", Columns=10, Encoding=65001, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Type modifié"" = Table.TransformColumnTypes(Source,{{""Column1"", Int64.Type}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}, {""Column5"", type text}, {""" & _
        "Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Type modifié"""
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""openquizzdb_259 (3)"";Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [openquizzdb_259 (3)]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "openquizzdb_259__3"
        .Refresh BackgroundQuery:=False
    End With
    ActiveSheet.ListObjects("openquizzdb_259__3").ShowHeaders = False
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
End Sub

Je vais essayer d'adapter pour que ce soit plus adapté au besoin, mais...

Merci

G'Claire
 

Staple1600

XLDnaute Barbatruc
Re

@GClaire
Pourtant cela fonctionne simplement (sans macro) avec Power Query en faisant
PowerQ.png

Ensuite il suffit de se laisser guider par l'Assistant.
 

job75

XLDnaute Barbatruc
Bonsoir GClaire, JM,

Avec une macro on peut choisir le fichier CSV à importer :
VB:
Sub ImporterDonneesCSV()
Dim fichier As Variant, x%, a$(), n&, b$(), i&
ChDir ThisWorkbook.Path
fichier = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Cells.Delete 'RAZ
Workbooks.OpenText fichier, semicolon:=True, Local:=True
ActiveSheet.UsedRange.Copy Feuil2.[A1]
ActiveWorkbook.Close
Columns.AutoFit 'ajustement largeurs
Application.ScreenUpdating = True
MsgBox "Données CSV importées avec succès"
End Sub
A+
 

Pièces jointes

  • Aide forum.xlsm
    20.6 KB · Affichages: 7
  • openquizzdb_259.zip
    18.1 KB · Affichages: 8

GClaire

XLDnaute Occasionnel
Supporter XLD
Stapple1600, le forum

Oui j'y suis arrivé

Cela marchotte, lol

J'ai crée avec l'enregistreur de macro, de manière a pour voir refaire avec automation, mais il me dit que la requête existe déjà, donc pour le moment je l'efface, mais pas le bon moyen je pense.

je peaufine

Merci

bonne soirée.

G'Claire
 

job75

XLDnaute Barbatruc
j'avais adapté un code qui le faisait, mais l'import, me met les caractères spéciaux.

Regarde la pièce jointe 1195057

Voili le soucis.
Ce n'est pas un souci, il suffit de les remplacer (je n'ai pas tout fait) :
VB:
Sub ImporterDonneesCSV()
Dim fichier As Variant, x%, a$(), n&, b$(), i&
ChDir ThisWorkbook.Path
fichier = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Cells.Delete 'RAZ
Workbooks.OpenText fichier, semicolon:=True, Local:=True
ActiveSheet.UsedRange.Copy Feuil2.[A1]
ActiveWorkbook.Close
Cells.Replace "Ã ", "à", xlPart
Cells.Replace "À", "À"
Cells.Replace "â", "â"
Cells.Replace "ç", "ç"
Cells.Replace "é", "é"
Cells.Replace "É", "É"
Cells.Replace "è", "è"
Cells.Replace "ê", "ê"
Cells.Replace "î", "î"
Cells.Replace "ô", "ô"
Cells.Replace "ü", "ü"
Cells.Replace "«", "«"
Cells.Replace "»", "»"
Columns.AutoFit 'ajustement largeurs
Application.ScreenUpdating = True
MsgBox "Données CSV importées avec succès"
End Sub
 

Pièces jointes

  • Aide forum.xlsm
    21.4 KB · Affichages: 4

GClaire

XLDnaute Occasionnel
Supporter XLD
job75, le forum

job75, merci

J'ai du remplacer :

VB:
Cells.Replace "Ã ", "à", xlPart

Par ca

Code:
Cells.Replace "Ã ", "à", xlPart

Par un copier coller d'une valeur dans d'une cellule car sinon cela me laissé Ã

Visuellement je ne vois aucune différance, bizard

Merci

Passe une bonne journée.

G'Claire
 

GClaire

XLDnaute Occasionnel
Supporter XLD
Re

Petite modif, pour que cela joue essentiellement avec la feuille "Import Theme" de mon classeur car sinon cela jouait sur la feuille active.

VB:
Sub ImporterDonneesCSV()

    Dim fichier As Variant
    Dim x As Long
    Dim a() As String
    Dim n As Long
    Dim b() As String
    Dim i As Long

    ChDir ThisWorkbook.Path
    fichier = Application.GetOpenFilename("Fichiers CSV (*.csv), *.csv")

    If fichier = False Then Exit Sub

    Application.ScreenUpdating = False

    ' Supprimez les données existantes sur la feuille "Import Theme"
    Sheets("Import Theme").Cells.Delete

    Workbooks.OpenText fichier, semicolon:=True, Local:=True
'    ActiveSheet.UsedRange.Copy Sheets("Import Theme").Range("A1")
    ActiveSheet.UsedRange.Copy Feuil2.[A1]
    ActiveWorkbook.Close

    ' Effectuez les remplacements de caractères
    With Sheets("Import Theme").Cells
        '.Replace "Ã ", "à", xlPart
        .Replace "Ã ", "à", xlPart
        .Replace "À", "À"
        .Replace "â", "â"
        .Replace "ç", "ç"
        .Replace "é", "é"
        .Replace "É", "É"
        .Replace "è", "è"
        .Replace "ê", "ê"
        .Replace "î", "î"
        .Replace "ô", "ô"
        .Replace "ü", "ü"
        .Replace "«", "«"
        .Replace "»", "»"
    End With

    ' Ajustez les largeurs des colonnes
    Sheets("Import Theme").Columns.AutoFit

    ' Supprimez les lignes qui ne sont pas en français
    SupprimerLignesNonFR

    ' Assignez des valeurs de niveau
    AssignerNiveauValeurs

    Application.ScreenUpdating = True

    MsgBox "Données CSV importées avec succès sur la feuille 'Import Theme'."

End Sub

Qu'en penses tu?

Merci

La j'essaye de voir pour choisir le dossier de recherche par rapport a la feuille "Paramètres" en "B4" et si vide que l'on aille chercher le fichier sur le bureau, puis renseigner la cellule du chemin "Sans le nom de fichier)

J'y arrivait presque, sauf que cela me mettait le chemin complet

Merci

Bonne journée.

G'Claire
 

Discussions similaires

Réponses
3
Affichages
295

Statistiques des forums

Discussions
313 322
Messages
2 097 141
Membres
106 850
dernier inscrit
benbeckman