Erreur 91 impossible à corriger

C'est parfait, ça marche.
Je cherche maintenant à faire une version qui permet de coller les données importées sur une nouvelle feuille (chaque fichier importé aura sa feuille associée) dans la fenêtre Excel où a été exécutée la macro.
Je détaillerai mon avancement si j'y parviens et demanderai la clôture de ce topic.

Merci pour votre aide

Je cherche maintenant à faire une version qui permet de coller les données importées sur une nouvelle feuille (chaque fichier importé aura sa feuille associée) dans la fenêtre Excel où a été exécutée la macro.

Essayez ceci

Sub CsvImportMAC()
Dim LastLig As Long, NewLig As Long
Dim Wbcsv As Workbook
Dim c As Range
Dim i As Integer
Dim Tablo
Dim feuille As Worksheet

Application.ScreenUpdating = False 'Inhibe le rafraichissement affichage

Application.Dialogs(xlDialogOpen).Show

For i = Workbooks.Count To 1 Step -1

    Set Wbcsv = ActiveWorkbook

    If Right(Workbooks(i).Name, 3) = "csv" Then

        With ThisWorkbook
            .Worksheets.Add after:=Sheets(Sheets.Count)
            Set feuille = .ActiveSheet
        End With

        LastLig = Wbcsv.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
        With feuille
            For Each c In Wbcsv.Sheets(1).Range("A2:A" & LastLig) 'Pour chaque cellule de A2:Axxx
                NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'La première cellule vide de la colonne 1 de Feuil1 de ce classeur
                Tablo = Split(c.Value, ",") 'On sépare les données par rapport au séparateur (ICI LA VIRGULE)
                .Range(.Cells(NewLig, 1), .Cells(NewLig, UBound(Tablo) + 1)).Value = Tablo 'On copie
            Next c
        End With
        Wbcsv.Close
        Set Wbcsv = Nothing
    End If
Next i
End Sub

On reste dans le même type de code en modifiant juste deux ou trois lignes

Si vous conservez l'ancien code que vous avez posté pour l'OS windows, il faudra ajouter un code qui repère si vous êtes sous MAC ou Windows

Le code réalise exactement les mêmes actions que l'ancien.
Pour 1 csv sélectionné à importer. Un nouveau fichier Excel est créé.
Pour 2 csv sélectionnés à importer. 2 nouveaux fichiers Excel distincts sont crées.

Je cherche aussi de mon coté, mais je n'ai pas votre expérience, je ne suis pas aussi efficace. Ne pensez pas que j'attends que le code tombe tout cuit.

EDIT :

For i = Workbooks.Count To 1 Step -1
        With ThisWorkbook
            .Worksheets.Add after:=Sheets(Sheets.Count)
            Set feuille = .ActiveSheet
        End With
    Set Wbcsv = ActiveWorkbook

    If Right(Workbooks(i).Name, 3) = "csv" Then

        

When you use it with the dot notation (.Worksheets.Add), it implies that you're working with the workbook represented by ThisWorkbook.

1e problème résolu en remontant le With au dessus de :

Set Wbcsv = ActiveWorkbook

Ainsi, on créé bien une nouvelle feuille de calcul dans le fichier où la macro a été exécuté. Le problème c'est que le code créé un deuxième fichier, où les données sont collées. Je m'attaque à ce nouveau problème

Je cherche aussi de mon coté, mais je n'ai pas votre expérience, je ne suis pas aussi efficace. Ne pensez pas que j'attends que le code tombe tout cuit.

Pas de soucis.

1e problème résolu en remontant le With au dessus de :

Pour la correction ce n'est pas correct car là si vous avez un autre fichier non CSV ouvert, le code va créer une feuille de trop


EDIT : dans le code que je vous ai donné, supprimez la ligne

Set Wbcsv = ActiveWorkbook

Ensuite mettez la ligne ci-dessous juste après la ligne If Right(Workbooks(i).Name, 3) = "csv" Then

Set Wbcsv = Workbooks(i)


Cela ne marche toujours pas, exportation des données dans un nouveau fichier. De plus, aucune feuille excel n'est créée...

Cela ne marche toujours pas, exportation des données dans un nouveau fichier. De plus, aucune feuille excel n'est créée...

je viens de tester.... Reprenez le code que je vous ai proposé en modifiant simplement ce que je vous ai écrit dans l'EDIT de mon post précédent

Sub CsvImportMAC()
Dim LastLig As Long, NewLig As Long
Dim Wbcsv As Workbook
Dim c As Range
Dim i As Integer
Dim Tablo
Dim feuille As Worksheet

Application.ScreenUpdating = False 'Inhibe le rafraichissement affichage

Application.Dialogs(xlDialogOpen).Show

For i = Workbooks.Count To 1 Step -1

    If Right(Workbooks(i).Name, 3) = "csv" Then

        Set Wbcsv = Workbooks(i)

        With ThisWorkbook
            .Worksheets.Add after:=Sheets(Sheets.Count)
            Set feuille = .ActiveSheet
        End With

        LastLig = Wbcsv.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
        With feuille
            For Each c In Wbcsv.Sheets(1).Range("A2:A" & LastLig) 'Pour chaque cellule de A2:Axxx
                NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1 'La première cellule vide de la colonne 1 de Feuil1 de ce classeur
                Tablo = Split(c.Value, ",") 'On sépare les données par rapport au séparateur (ICI LA VIRGULE)
                .Range(.Cells(NewLig, 1), .Cells(NewLig, UBound(Tablo) + 1)).Value = Tablo 'On copie
            Next c
        End With
        Wbcsv.Close
        Set Wbcsv = Nothing
    End If
Next i
End Sub

Je suis catégorique, ça ne marche. J'ai même essayé de changer l'indentation du Set Wbcsv...

For i = Workbooks.Count To 1 Step -1
    With ThisWorkbook
            .Worksheets.Add after:=Sheets(Sheets.Count)
            Set feuille = .ActiveSheet
        End With

    If Right(Workbooks(i).Name, 3) = "csv" Then

        Set Wbcsv = Workbooks(i)

        LastLig = Wbcsv.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
        With feuille

Avec cette structure j'ai bien création d'une feuille de calcul dans le fichier ouvert mais l'écriture des données se fait sur une nouvelle feuille.
Si je sélectionne 2 fichiers à importer, j'ai bien création de 2 nouvelles feuilles; mais l'écriture se fait toujours sur une nouvelles feuilles (distincte pour chaque fichier).

Là je ne vous comprends pas...

J'exécute le code, cela me demande de choisir les fichiers
Je choisis 2 csv
Le code me crée une feuille pour chaque CSV avec les données de chaque CSV


Avec cette structure j'ai bien création d'une feuille de calcul dans le fichier ouvert mais l'écriture des données se fait sur une nouvelle feuille.

Là vous créé systématiquement une feuille alors que dans ce que je vous propose on ne crée la feuille que si workbook(i) est un fichier CSV
je ne vois pas comment vous pouvez créer deux fichiers alors qu'aucune ligne ne demande de créer un nouveau fichier à chaque CSV
bizarre...

Avez-vous essayé en pas à pas ?

Comme il est dans la boucle for, il créé une feuille à chaque itération de la boucle non ?

EDIT :

Voici en image le résultat, pour lever toute ambiguïté.

image

Exécution de la Macro depuis le fichier import csv Macro.
Pas de création de nouvelle feuille, mais création d'un nouveau fichier.

Comme il est dans la boucle for, il créé une feuille à chaque itération de la boucle non ?

Oui mais il crée toujours une feuille même si votre fichier n'est pas CSV. Ce qui n'est pas correct. Comme je vous ai dit, vous ne devez créer une feuille que un fichier CSV est trouvé
Le code correct est celui que vous avez mis ici --> https://forum.excel-pratique.com/s/goto/1168755
Je viens encore de tester.


Voici en image le résultat, pour lever toute ambiguïté.

Exécution de la Macro depuis le fichier import csv Macro.

Mais votre code est placé dans quel fichier ?

image

Il est placé dans le fichier où je souhaite collecter mes données

Mais ce n'est pas dans le fichier CSV qu'il faut placé le code évidemment

Mais je comprends la subtilité que vous faites, en écrivant ça ainsi. Mais de mon coté, je n'ai pas le résultat souhaité. Je me suis peut être mal exprimé.
Avez vous le bon résultat de votre coté.

Objectif Macro reformulation :
Import d'une macro dans un fichier (on le nommera A) où je souhaite traiter des données. Cette macro doit me permettre de d'importer N fichiers CSV que je souhaite traiter sur le fichier A en créant N feuilles sur A

EDIT : la macro n'est pas dans le fichier csv

Import d'une macro d'un fichier (on le nommera A) où je souhaite traiter des données.
Cette macro doit me permettre de d'importer N fichiers CSV que je souhaite traiter sur le fichier A en créant N feuilles sur A
Avez vous le bon résultat de votre coté.

C'est ce que le code fait et j'ai le bon résultat

Vous exécutez le code via un bouton ?
Ou Alors faites l'exécution en mode pas à pas.

Pas du tout, depuis exécuter dans le menu déroulant où sont présent les macros.
Alors, je suis content que ça marche pour vous. Mais ça reste un mystère de mon côté

Bon voici trois fichiers

- le fichier Tomtom contient un bouton sur lequel il vous suffit de cliquer pour exécuter le code
Je vous ai aussi mis les explications de chaque ligne

- 2 fichier CSV

Mettez ces deux fichiers sur le Desktop. Ouvrez le fichier Tomtom puis cliquez sur le bouton

16tomtom.xlsm (22.49 Ko)
7classeur1.csv (81.00 Octets)
9classeur2.csv (81.00 Octets)

J'effacerai éventuellement les fichiers après votre test

Ça ne marche pas, toujours le même constat

Je vais me replonger dans le topic que vous m'avez link hier, concernant des problèmes d'autorisation.
Je ne vois plus que ça, même fichiers, même programmes : résultat différent sur nos 2 machines....

Pourrait-il y avoir un rapport avec le message ?

image

Je ne comprends pas pourquoi cela marche avec votre premier code et pas le second
Il n'y a rien de différent à part que l'on crèe une feuille dans le fichier pour chaque fichier CSV

Pourrait-il y avoir un rapport avec le message ?

Il y a une différence entre les fichier CSV windows et MAC je pense.
En faisant un enregistrer sous on voit cela

Sinon je vous ai dit de faire du pas à pas dans le code. cela vous permet de voir ce qu'il se passe

Ou donnez-moi votre fichier que j'analyse


Edit : au fait une autre question : vous ouvrez bien les 2 CSV en même temps ?

Essayez aussi en faisant ceci

- Supprimez les instructions --> set wbcsv = workbooks(i) et Set Wbcsv = Nothing
- remplacez tous les wbcsv par Workbooks(i)

En effectuant pas à pas, ça n'a rien donné.
Voici le fichier : (le titre de la macro est suffisamment explicite).
J'ai apporté les modifications recommandés, toujours le même résultat...

Rechercher des sujets similaires à "erreur impossible corriger"