A voir également:
- Pb code pour Copie de fichiers cvs dans onglets d'excel
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Restaurer onglets chrome - Guide
- Formule excel - Guide
- Code asci - Guide
4 réponses
Bonjour f894009,
Après des semaines de travail acharnées, il semble que la ligne de commande que j'utilisais pour faire le copy/Paste n'était pas approprié. Le programme avait du mal à identifier d'où il partait et où il arrivait.
Avec de l'aide extérieur je suis parti sur une approche plus simple du type : "on active la workseek"
"on sélectionne la feuille à copier ou la gamme"
"on copie la selection", "on active la workseet de destination"
"on sélectionne la gamme d'arrivée"
"on colle la selection"
Cette approche a très bien fonctionné, et j'ai donc pu faire mon copier/coller et ajouter la mise en forme que je voulais pour ma feuille.
Merci de m'avoir aidé à débeuguer les premières étapes.
Pour les personnes qui auraient eues le même problème que moi, voici la version finale de mon code :
Après des semaines de travail acharnées, il semble que la ligne de commande que j'utilisais pour faire le copy/Paste n'était pas approprié. Le programme avait du mal à identifier d'où il partait et où il arrivait.
Avec de l'aide extérieur je suis parti sur une approche plus simple du type : "on active la workseek"
"on sélectionne la feuille à copier ou la gamme"
"on copie la selection", "on active la workseet de destination"
"on sélectionne la gamme d'arrivée"
"on colle la selection"
Cette approche a très bien fonctionné, et j'ai donc pu faire mon copier/coller et ajouter la mise en forme que je voulais pour ma feuille.
Merci de m'avoir aidé à débeuguer les premières étapes.
Pour les personnes qui auraient eues le même problème que moi, voici la version finale de mon code :
Sub demo() 'creation de la liste des fichiers contenu dans le repertoire qui contient ce même fichier Dim MyWay As String, FichierXl As String, CompteurDeFichier As Integer Dim MessageFinDeTraitement As String, MaFeuille As Worksheet Dim Repertoire As FileDialog, monchemin As String 'Selection d'un repertoire Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker) Repertoire.Show If Repertoire.SelectedItems.Count > 0 Then MyWay = Repertoire.SelectedItems(1) 'chemin du dossier dans variable my way Else MsgBox "Aucun Répertoire Sélectionné" End If CompteurDeFichier = 0 'initialisation du compteur FichierXl = Dir(MyWay & "\*.csv") 'on commence la récupération des fichiers .xls Do While Not FichierXl = "" 'on boucle tant que la variable FichierXl n'est pas vide CompteurDeFichier = CompteurDeFichier + 1 'incrémentation du compteur If CompteurDeFichier <> 0 Then ' au premier fichier trouvé On Error Resume Next 'en cas d'erreur sur la prochaine ligne monchemin = MyWay & "\" & FichierXl Set MaFeuille = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' on ajoute un nouvel onglet 'on lui donne son nom MaFeuille.Name = FichierXl ' On ouvre le fichier cvs trouvé par le compteur et on initialise le séparareur comme étant la virgule On Error GoTo 0 'annule le precedent on error Call ConversionCVS(monchemin) 'ActiveSheet.Range("A2:G511").Select ' Si tu préfère sélectionner des cellules spécifiques ActiveSheet.Cells.Select 'Sélectionne toute les cellules de la feuille Selection.Copy ' Copy toute les cellules Windows("Classeur1.xlsm").Activate ' On se place dans l'autre classeur MaFeuille.Select ActiveSheet.Paste Application.CutCopyMode = False Windows(FichierXl).Activate ActiveWorkbook.Close False End If FichierXl = Dir 'on passe au fichier suivant DoEvents 'en cas de problème on pourra toujours sortir de la boucle avec la touche [échap] Loop If CompteurDeFichier = 0 Then ' si pas de fichier MessageFinDeTraitement = "Aucun Fichier trouvé dans le répertoire spécifié ! " Else 'si un fichier ou plus a/on été trouvé(s) MessageFinDeTraitement = CompteurDeFichier & " fichier(s) trouvé(s) " End If ' on affiche un message en fin de traitement MsgBox MessageFinDeTraitement End Sub Sub ConversionCVS(monchemin) 'Ouverture d'un fichier Excel Workbooks.OpenText Filename:=monchemin, Origin:=xlWindows, _ StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlNone, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True ' MISE EN FORME DES DONNEES ' Suppression des données inutiles Rows("1:219").Select Selection.Delete Shift:=xlUp Columns("C:E").Select Selection.Delete Shift:=xlToLeft ' Données des différents Vd mises côte à côtes Range("C99:D195").Select Selection.Cut Range("E2:F98").Select ActiveSheet.Paste Range("C196:D292").Select Selection.Cut Range("G2:H98").Select ActiveSheet.Paste ' Supression des données superflues Range("A99:B292").Select Selection.Delete Shift:=xlUp ' On mets les titres sur chaque colonnes Range("C1").Select ActiveCell.FormulaR1C1 = "Id - Vd -0,1" Range("D1").Select ActiveCell.FormulaR1C1 = "Ig - Vd -0,1" Range("E1").Select ActiveCell.FormulaR1C1 = "Id- Vd -0,5" Range("F1").Select ActiveCell.FormulaR1C1 = "Ig-Vd-0,5" Range("G1").Select ActiveCell.FormulaR1C1 = "Id -Vd-0,9" Range("H1").Select ActiveCell.FormulaR1C1 = "Ig -Vd-0,9+" Range("H1").Select ActiveCell.FormulaR1C1 = "Ig -Vd-0,9" ' Supression des données superflues Columns("A").Select Selection.Delete Shift:=xlUp End Sub
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
4 oct. 2015 à 12:08
4 oct. 2015 à 12:08
Bonjour,
un exemple en partant d'une partie de votre code (choix du repertoire):
https://www.cjoint.com/c/EJekhfBRetf
un exemple en partant d'une partie de votre code (choix du repertoire):
https://www.cjoint.com/c/EJekhfBRetf
Bonjour f894009
J'ai essayé votre code ce week end mais n'arrivais pas à le faire fonctionner sur mon ordi. Jusqu'à ce matin pour une raison que j'ignore.. (du coup je re-regarderai ça)
En parallèle j'ai modifié mon code d'origine en essayant de m'inspirer de votre façon de faire. A part une ligne, j'ai presque réussi à faire ce que je voulais, il faudra juste que j'implémente le formatage que je veux sur mon fichier (formatage que j'ai préalablement enregistrer avec la fonction "enregistrer" de vba). Mon programme ne semble pas comprendre ce qu'est Fichier Xl dans
Alors que FichierXl a bien été défini dans la fonction précédente. Je ne comprends pas pourquoi il ne l'accepte pas. Que dois-je faire pour corriger ça ? Pourquoi il ne le prend pas ?
Merci de votre aide !
Mon code
J'ai essayé votre code ce week end mais n'arrivais pas à le faire fonctionner sur mon ordi. Jusqu'à ce matin pour une raison que j'ignore.. (du coup je re-regarderai ça)
En parallèle j'ai modifié mon code d'origine en essayant de m'inspirer de votre façon de faire. A part une ligne, j'ai presque réussi à faire ce que je voulais, il faudra juste que j'implémente le formatage que je veux sur mon fichier (formatage que j'ai préalablement enregistrer avec la fonction "enregistrer" de vba). Mon programme ne semble pas comprendre ce qu'est Fichier Xl dans
Workbooks.OpenText Filename:="FichierXl",
Alors que FichierXl a bien été défini dans la fonction précédente. Je ne comprends pas pourquoi il ne l'accepte pas. Que dois-je faire pour corriger ça ? Pourquoi il ne le prend pas ?
Merci de votre aide !
Mon code
Sub demo() 'creation de la liste des fichiers contenu dans le repertoire qui contient ce même fichier Dim MyWay As String, FichierXl As String, CompteurDeFichier As Integer Dim MessageFinDeTraitement As String, MaFeuille As Worksheet Dim Repertoire As FileDialog 'Selection d'un repertoire Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker) Repertoire.Show If Repertoire.SelectedItems.Count > 0 Then MyWay = Repertoire.SelectedItems(1) 'chemin du dossier dans variable my way Else MsgBox "Aucun Répertoire Sélectionné" End If CompteurDeFichier = 0 'initialisation du compteur FichierXl = Dir(MyWay & "\*.csv") 'on commence la récupération des fichiers .xls Do While Not FichierXl = "" 'on boucle tant que la variable FichierXl n'est pas vide CompteurDeFichier = CompteurDeFichier + 1 'incrémentation du compteur If CompteurDeFichier = 1 Then ' au premier fichier trouvé On Error Resume Next 'en cas d'erreur sur la prochaine ligne Set MaFeuille = Worksheets.Add(after:=Worksheets(Worksheets.Count)) ' on ajoute un nouvel onglet 'on lui donne son nom MaFeuille.Name = "Test" & CompteurDeFichier ' On ouvre le fichier cvs trouvé par le compteur et on initialise le séparareur comme étant la virgule On Error GoTo 0 'annule le precedent on error End If FichierXl = Dir 'on passe au fichier suivant DoEvents 'en cas de problème on pourra toujours sortir de la boucle avec la touche [échap] Loop If CompteurDeFichier = 0 Then ' si pas de fichier MessageFinDeTraitement = "Aucun Fichier trouvé dans le répertoire spécifié ! " Else 'si un fichier ou plus a/on été trouvé(s) MessageFinDeTraitement = CompteurDeFichier & " fichier(s) trouvé(s) " End If ' on affiche un message en fin de traitement MsgBox MessageFinDeTraitement End Sub Sub ConversionCVS(FichierXl) 'Déclaration des variables pour l'importation du cvs Dim appExcel As Excel.Application 'Application Excel Dim wbExcel As Excel.Workbook 'Classeur Excel Dim wsExcel As Excel.Worksheet 'Feuille Excel 'Ouverture de l'application Set appExcel = CreateObject("Excel.Application") 'Ouverture d'un fichier Excel Workbooks.OpenText Filename:="FichierXl", Origin:=xlWindows, _ StartRow:=2, DataType:=xlsDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True Set wbExcel = appExcel.ActiveWorkbook Set wsExcel = wbExcel.ActiveSheet wsExcel.UsedRange.Copy Destination:=MaFeuille.Range("A" & Rows.Count).End(xlUp).Offset(0) wbExcel.Close End Sub
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
Modifié par f894009 le 5/10/2015 à 10:08
Modifié par f894009 le 5/10/2015 à 10:08
Bonjour,
FichierXl est une variable, pas du texte, enlevez les doubles cotes !!!!!
pourquoi ceci:
vous ne prendrez que le premier fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
FichierXl est une variable, pas du texte, enlevez les doubles cotes !!!!!
pourquoi ceci:
If CompteurDeFichier = 1 Then
vous ne prendrez que le premier fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Naknak
>
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
5 oct. 2015 à 12:58
5 oct. 2015 à 12:58
Bonjour,
J'ai fait les modifications suivantes :
- Pour le compteur
- ajouter un appel à ma sub "concersionCVS" dans ma boucle
- enlever les guillements pour FichierXl :
Là mon programme beug à ce niveau là. je suppose que la commande "
Merci !
J'ai fait les modifications suivantes :
- Pour le compteur
If CompteurDeFichier <> 0 Then
- ajouter un appel à ma sub "concersionCVS" dans ma boucle
- enlever les guillements pour FichierXl :
'Ouverture d'un fichier Excel Workbooks.OpenText Filename:=FichierXl, Origin:=xlWindows, _ StartRow:=2, DataType:=xlsDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Là mon programme beug à ce niveau là. je suppose que la commande "
Workbooks.OpenText Filenamen'est pas correcte. quelle commande serait appropriée pour ouvrir ma variable "FichierXl" du coup ?
Merci !
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
>
Naknak
5 oct. 2015 à 13:22
5 oct. 2015 à 13:22
Re,
DataType:=xlsDelimited----> y a un s en trop
xlDelimited
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
>
Naknak
Modifié par f894009 le 5/10/2015 à 14:47
Modifié par f894009 le 5/10/2015 à 14:47
Re,
j' ai oublie ceci:
Je viens de retester, l'un ou l'autre le fichier s'ouvre, mais fichier de chez moi pas de chez vous
toujurs le même bug arrive ... Et lequel ??????????????????????????
j' ai oublie ceci:
TextQualifier:=xlNonepas
xlDoubleQuote
Je viens de retester, l'un ou l'autre le fichier s'ouvre, mais fichier de chez moi pas de chez vous
toujurs le même bug arrive ... Et lequel ??????????????????????????
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
5 oct. 2015 à 16:34
5 oct. 2015 à 16:34
Re,
En regardant votre code (Naknak 5 oct. 2015 à 09:59) de plus pres,
En regardant votre code (Naknak 5 oct. 2015 à 09:59) de plus pres,
FichierXlne contient que le nom du fichier avec extention pas le chemin complet, c'est peut-etre la que ca coince.....
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
>
Naknak
Modifié par f894009 le 5/10/2015 à 17:17
Modifié par f894009 le 5/10/2015 à 17:17
Re,
Dans mon "magnifique fichier" (eh! oui, les melons poussent meme en automne), j'ai fait ceci:
faites de meme avant l'appel de, que je ne trouve pas dans votre code
et ensuite
faites ceci
Dans mon "magnifique fichier" (eh! oui, les melons poussent meme en automne), j'ai fait ceci:
Chemin_et_Fichier = MyWay & "\" & FichierXl
faites de meme avant l'appel de, que je ne trouve pas dans votre code
Call ConversionCVS(FichierXl)
et ensuite
faites ceci
Call ConversionCVS(Chemin_et_Fichier)
On s'approche. Me guidant avec votre fichier (qui est ma bible bien sûr en ce moment ;-)
J'avais bien ajouté le "call" comme indiqué dans mon commentaire du 5/10 à 12h58, je n'ai juste pas recopié tout le code en entier.
J'ai passé le problème de chemin de fichier. Là le code marche (il importe bien les données avec le bon séparateur) mais m'affiche "erreur d'exécution '91': variable objet de bloc with non définie". Il bloque à la ligne
Là le code me créé carrément une nouvelle feuille excel alors que j'aimerais qu'il travaille à partir de celle d'où j'ai lancé le code. Avant de vous embêter plus je vais essayer de chercher comment résoudre ça.
J'en suis là pour l'instant :
J'avais bien ajouté le "call" comme indiqué dans mon commentaire du 5/10 à 12h58, je n'ai juste pas recopié tout le code en entier.
J'ai passé le problème de chemin de fichier. Là le code marche (il importe bien les données avec le bon séparateur) mais m'affiche "erreur d'exécution '91': variable objet de bloc with non définie". Il bloque à la ligne
Set wsExcel = wbExcel.ActiveSheet
Là le code me créé carrément une nouvelle feuille excel alors que j'aimerais qu'il travaille à partir de celle d'où j'ai lancé le code. Avant de vous embêter plus je vais essayer de chercher comment résoudre ça.
J'en suis là pour l'instant :
Sub demo() 'creation de la liste des fichiers contenu dans le repertoire qui contient ce même fichier Dim MyWay As String, FichierXl As String, CompteurDeFichier As Integer Dim MessageFinDeTraitement As String, MaFeuille As Worksheet Dim Repertoire As FileDialog, monchemin As String 'Selection d'un repertoire Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker) Repertoire.Show If Repertoire.SelectedItems.Count > 0 Then MyWay = Repertoire.SelectedItems(1) 'chemin du dossier dans variable my way Else MsgBox "Aucun Répertoire Sélectionné" End If CompteurDeFichier = 0 'initialisation du compteur FichierXl = Dir(MyWay & "\*.csv") 'on commence la récupération des fichiers .xls Do While Not FichierXl = "" 'on boucle tant que la variable FichierXl n'est pas vide CompteurDeFichier = CompteurDeFichier + 1 'incrémentation du compteur If CompteurDeFichier <> 0 Then ' au premier fichier trouvé On Error Resume Next 'en cas d'erreur sur la prochaine ligne Set MaFeuille = Worksheets.Add(after:=Worksheets(Worksheets.Count)) ' on ajoute un nouvel onglet 'on lui donne son nom MaFeuille.Name = "Test" & CompteurDeFichier ' On ouvre le fichier cvs trouvé par le compteur et on initialise le séparareur comme étant la virgule On Error GoTo 0 'annule le precedent on error monchemin = MyWay & "\" & FichierXl Call ConversionCVS(monchemin) End If FichierXl = Dir 'on passe au fichier suivant DoEvents 'en cas de problème on pourra toujours sortir de la boucle avec la touche [échap] Loop If CompteurDeFichier = 0 Then ' si pas de fichier MessageFinDeTraitement = "Aucun Fichier trouvé dans le répertoire spécifié ! " Else 'si un fichier ou plus a/on été trouvé(s) MessageFinDeTraitement = CompteurDeFichier & " fichier(s) trouvé(s) " End If ' on affiche un message en fin de traitement MsgBox MessageFinDeTraitement End Sub Sub ConversionCVS(monchemin) 'Déclaration des variables pour l'importation du cvs Dim appExcel As Excel.Application 'Application Excel Dim wbExcel As Excel.Workbook 'Classeur Excel Dim wsExcel As Excel.Worksheet 'Feuille Excel 'Ouverture de l'application Set appExcel = CreateObject("Excel.Application") 'Ouverture d'un fichier Excel Workbooks.OpenText Filename:=monchemin, Origin:=xlWindows, _ StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlNone, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True Set wbExcel = appExcel.ActiveWorkbook Set wsExcel = wbExcel.ActiveSheet wsExcel.UsedRange.Copy Destination:=MaFeuille.Range("A" & Rows.Count).End(xlUp).Offset(0) wbExcel.Close End Sub
f894009
Messages postés
17185
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
15 avril 2024
1 702
>
Naknak
Modifié par f894009 le 7/10/2015 à 09:59
Modifié par f894009 le 7/10/2015 à 09:59
Bonjour,
Vous n'avez pas besoin de creer une application EXCEL puisque vous etes deja en EXCEL et vu que que vous ne fermez pas les excel ouverts, vous en aurez autant que de fichiers trouves
supprimez ces lignes
Là le code me créé carrément une nouvelle feuille excel Ben oui, puisque c'est ecrit pour faire et c'est ce que vous avez demande au debut:
Naknak - 3 oct. 2015 à 21:28
Les ouvrir et les copier dans des onglets différents [BUG]
Donc expliquez un peu mieux ce que vous voulez !!!!
Vous n'avez pas besoin de creer une application EXCEL puisque vous etes deja en EXCEL et vu que que vous ne fermez pas les excel ouverts, vous en aurez autant que de fichiers trouves
supprimez ces lignes
Dim appExcel As Excel.Application 'Application Excel 'Ouverture de l'application Set appExcel = CreateObject("Excel.Application")
Là le code me créé carrément une nouvelle feuille excel Ben oui, puisque c'est ecrit pour faire et c'est ce que vous avez demande au debut:
Naknak - 3 oct. 2015 à 21:28
Les ouvrir et les copier dans des onglets différents [BUG]
Donc expliquez un peu mieux ce que vous voulez !!!!