Macro Excel pr concatener plusieurs fichiers

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour tout le monde,

C'est mon premier post ici alors je ne sais pas trop si je suis au bon endroit. D'avance je m'excuse.

Je viens vous demander un peu d'aide (beaucoup en fait !). Je viens de découvrir les macros sous Excel. Je sais qu'il existe 2 manière de procéder : sois en programmant par code sois en enregistrant une macro action par action de manière automatique. Je suis donc vraiment novice.

Voila mon objectif :

Dans un dossier disponible sur le pc, j'enregistre plusieurs fichiers .txt (14 fichiers environs). Ces fichiers ont la particularité d'avoir TOUJOURS le même nombre de colonnes (5 colonnes) mais pas forcément le même nombre de lignes (de 0 à 3000 lignes).
Ci après je vous donne un exemple d'un fichier pour mieux voir.

FICHIER 1 :
0 2 4 9 2,2
3 6 7 1 5,6

FICHIER 2 :
3 0 2 3 10
3 2 4 7 89
2 1 1 3 0,01
3 4 1 3 2

Donc le nombre de colonnes est fixe, le nombre de lignes variable et le contenu est exclusivement du nombre.

Je peux avoir plusieurs fichiers de ce type avec plus de lignes. J'aimerais disposer d'un fichier Excel avec une seule Macro à l'intérieure. A partir de l'onglet Formulaire d'Excel j'aimerais insérer un gro bouton qui serait la seule interface avec l'utilisateur. Pour que sa sois simple. Jusque la j'ai réussi à trouver mon bonheur (facile pour vous ? Je sais lol)

La ou sa se corse... Lorsque que je clique sur ce bouton formulaire j'aimerais déclencher ma Macro qui me demande alors de sélectionner mon premier fichier qui se trouve dans un dossier quelconque du PC. Ensuite le contenu du fichier s'ouvre dans un NOUVEAU fichier Excel. Puis automatiquement la macro me demande de sélectionner le fichier suivant qui vas alors s'ouvrir dans le même fichier Excel précédant ET à la suite de l'autre.
La encore pour mieux comprendre je vous donne le résultat estompé.

FICHIER 3 :
0 2 4 9 2,2
3 6 7 1 5,6
3 0 2 3 10
3 2 4 7 89
2 1 1 3 0,01
3 4 1 3 2

La Macro doit permettre de stopper le processus d'importation des fichiers à un moment. C'est à dire si je veux importer 2 fichiers, et bien que je puisse à un moment dire stop, j'ai tout mes fichiers voulu.

C'est une sorte de concaténation que je demande.

Alors j'ai bien évidement cherché sur le net des éléments de réponse et voila ce que j'ai trouvé :

-Il est possible de programmer une Macro permettant à l'utilisateur de sélectionner un fichier dans une arborescence. J'ai testé j'y suis arrivé (et oui même moi lol)

-Il est possible de demander l'ouverture successive de plusieurs fichiers à la suite. Sauf que je ne suis pas arrivé à les mettre sur UNE SEULE feuille Excel ET à la suite les un des autres.

J'ai donc trouvé à travers le net des petits bouts de réponse particulièrement intéressant mais encore trop complexe pour moi. Certains code sont compréhensible de loin mais les fonctions et le langage bien trop compliqué pour que je puisse modifier moi même le code source.


Je ne pense pas que sa sois une mission impossible pour un expert de vba. De même je ne pense pas que cela prenne bien plus de 30 min pour coder tout sa.
Ce que je vous demande est alors un peu de votre temps pour m'aider sur ce projet. J'ai d'autres idées en tête avec cette Macro mais pour le moment je procède étape par étape. Si j'arrive à faire ce que je demande je serais bien assez content pour démarrer.

Pour terminer je fais donc un dernier rappel très concis :
-Je veux un fichier Excel avec un seul bouton qui est lié à une ou plusieurs Macro(s)
-Je veux pouvoir parcourir plusieurs fichiers dans une arborescence et concaténer les fichiers les un après les autres

Est possible ? Je le pense à 90%

Bien amicalement,

André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Merci Kiki29 de te pencher un peu sur mon problème. C'est vraiment sympa de ta part.

J'ai commencé à lire en Z pour l'instant. Sa me parraît pas mal !

Je vais analyser sa plus en détail ce soir et je te tiens au courant si sa m'aide ou pas.

Donc merci
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Bien finalement je n'ai pas pu résister à ma curiosité... J'ai craké et je me suis plongé un peu plus dans un code vba proposé par un utilisateur.

D'ailleurs j'ai remarqué que le code proviens de toi justement Kiki29 lol. Je ne sais pas si s'est toi qui l'a généré ce code mais sa à l'air costaux. Tu dois t'y connaître ne serais ce que pour savoir lire ce fichier !
Pour les autres utilisateurs qui voudraient voir ce code je viens de le replacer en pièce jointe ici même.

Ce code proposé par Kiki29 deviens le modèle de base de ma macro. J'aimerais qu'on améliore ensemble ce code pour qu'il convienne parfaitement à mon besoin (enfin si possible bien sur).

Mes premières remarques permettant de simples modifications :

-Ce code permet d'ouvrir des fichiers .xls uniquement. Alors il permet l'ouverture de plusieurs fichier .xls et s'est parfait. Sauf que je cherche à ouvrir des fichiers dont l'extension est .dat uniquement. Du coup avec ce code je ne peux pas ouvrir mes fichiers .dat. J'ai donc cherché un peu dans le code et je vois que sa se passe ici :

Dim Fichier As Variant, i As Long

ChDir ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Excel ,*.xls", 1, _
"Sélectionner un ou plusieurs fichier(s)", , True)

Il faut changer Excel et .xls. Quand j'ai fait sa, et quand j'ouvre mes fichiers .dat, sa me marque que le format de la table n'est pas celui espéré. Aie ! Comme je le pensais je n'ai pas les capacités pour intervenir au niveau du code. Je me doute bien qu'en changent le format de fichier d'entré sa doit forcément suivre derrière...Mais je sais pas trop à quel moment.

Première question : Serait-il facilement possible de modifier ce code pour que déjà il permette d'ouvrir les fichiers .dat voir même .dat+.xls+.txt ??? Je pense qu'il faut rester sur l'unique format .dat sinon on vas avoir un problème de format de table non reconnu.


-De plus j'ai vu que le fichier Excel (disponible en pièce jointe) contient 2 macros. La première sert à ouvrir plusieurs fichiers et j'en ai besoin, la deuxième sert pour les dossiers et si je peux m'en passer alors je m'en passe. D'ou ma deuxième question.

Deuxième question : Est il possible de supprimer la deuxième macro relative à l'ouverture des dossiers ? Car je suis certains que je n'en ai pas besoin. J'ai déjà supprimé cette macro et tout se passe bien. Sauf que comme je ne suis pas allé au bout du processus je ne peux pas dire si le programme à besoin ou non plus tard de cette macro pour fonctionner. Donc peut-on supprimer la fin du code qui n'est pas utile ?

voila deux modifications très simples qui permanentons dans un premier temps de mieux cibler le besoin.

Merci à tous ceux qui voudrons m'aider ou m'aiguiller.

Bien cordialement,

André
 

Pièces jointes

  • FICHIER UNIQUE RECAP .zip
    36.9 KB · Affichages: 122
  • FICHIER UNIQUE RECAP .zip
    36.9 KB · Affichages: 126
  • FICHIER UNIQUE RECAP .zip
    36.9 KB · Affichages: 128

JNP

XLDnaute Barbatruc
Re : Macro Excel pr concatener plusieurs fichiers

Bonjour le fil :),
Personnellement, je suis parti de la lecture pure et dure du .dat :p.
A tester
Code:
Sub Test()
Dim fd As FileDialog, Chemin As String
Dim I As Long, Import As String, Tableau As Double
Cells.Clear
I = 1
Chemin = "TEST"
While Chemin <> ""
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "Textes", "*.dat", 1
.FilterIndex = 1
If .Show = -1 Then
Chemin = .SelectedItems(1)
Else
GoTo Fin
End If
End With
Open Chemin For Input As #1
Do While Not EOF(1)
Line Input #1, Import
Range("A" & I & ":E" & I).Value = Split(Replace(Import, ",", "."), Chr(9))
I = I + 1
Loop
Close #1
Wend
Fin:
If I = 1 Then Exit Sub
Range("F1") = 1
Range("F1").Copy
Range("A1:E" & I - 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F1").Clear
End Sub
Pour moi, le séparateur dans ton texte est une tab. Si c'est un espace, il faut modifier Chr(9) en Chr(32) :rolleyes:...
Bonne soirée :cool:
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Salut JNP,

J'ai essayé de lancer ton code mais sa me met une erreur "Erreur de compilation : Type défini par l'utilisateur non défini". Cela concerne les premières lignes de code "Dim fd As FileDialog".

Du coup je ne peux pas tester. Mais d'après la lecture de ton code sa n'as pas l'air trop mal. Je vois que l'idée est de sélectionner un ensemble de fichier .dat et de les ouvrir un par un en copiant l'intégralité des cellules. Mais je peux pas test lol.

Une idée peut être ?

Merci
 

JNP

XLDnaute Barbatruc
Re : Macro Excel pr concatener plusieurs fichiers

Re :),
Bizarre, testé sous 2003 et 2010, les 2 fonctionnent :rolleyes:...
Je te mets le fichier en PJ, dis moi ce qu'il en est :p...
Bonne soirée :cool:
 

Pièces jointes

  • Test Import DAT.xls
    23.5 KB · Affichages: 169

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

JNP, je viens de télécharger ton fichier Excel mais je rencontre exactement le même problème à la compilation.

Je viens de vérifier, j'utilise une version Excel 2000 (la pouasse lol). Je testerais ton code ce soir sur mon pc avec un Excel 2007. On verra bien.

Ce qui est dommage c'est que sa ne marche pas, apparemment, sous toutes les versions Excel.

Peut être suffirait il de modifier le type de variable que tu utilise ? "Dim fd As FileDialog". Tu n'as pas un equivalent proche de "FileDialog" ? Si sa se trouve sa ne viens même pas de la lol.

On vas déjà attendre ce soir, avant de s'affoler le cerveau je pense...

Merci bien à vous deux pour le moment JNP et Kiki29 pour votre aide

Ps : J'utilise bien une tabulation comme séparation dans mes fichiers .dat lors de l'importation dans excel.
 

JNP

XLDnaute Barbatruc
Re : Macro Excel pr concatener plusieurs fichiers

Re :),
On a pas idée d'être en 2000 (on est quand même en 2011 :rolleyes:...).
Bon, j'ai modifié avec GetOpenFileName, à tester
Code:
Sub Test2()
Dim Chemin As String
Dim I As Long, Import As String, Tableau As Double
Cells.Clear
I = 1
Chemin = "TEST"
While Chemin <> ""
Chemin = Application.GetOpenFilename("Texte, *.dat")
If InStr(Chemin, "\") = 0 Then
GoTo Fin
End If
Open Chemin For Input As #1
Do While Not EOF(1)
Line Input #1, Import
Range("A" & I & ":E" & I).Value = Split(Replace(Import, ",", "."), Chr(9))
I = I + 1
Loop
Close #1
Wend
Fin:
If I = 1 Then Exit Sub
Range("F1") = 1
Range("F1").Copy
Range("A1:E" & I - 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F1").Clear
End Sub
Bonne soirée :cool:
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Whaou JNP !!!

Ben je sais pas trop quoi te dire. Sa fait bizarre de pouvoir ENFIN lancer un code qui exécute ce que je veux. Après toutes mes recherches j'y étais pas encore arrivé. Et en plus ton code est plutôt concis. S'est le top je trouve. Franchement merci.

Maintenant j'ai le début de ma macro qui fonctionne parfaitement. C'est génial, et j'aimerais la faire évoluer encore un peu. Alors la encore, je ne demande pas grand chose. Je procède étape par étape de manière à ce que sa soit très simple.

Voila ce que la marco de JNP ma fait actuellement :

Je lance la macro, on me demande d'ouvrir un fichier .dat, je parcours l'arborescence et sa colle le contenu du fichier dans la même feuille Excel de départ que j'utilise. Puis on me demande d'ouvrir un autre fichier .dat dont le contenu viens se coller juste à la suite des données de mon premier fichier. Cette boucle est parfaite !

Voila maintenant la petite modification que j'aimerais apporter :

Lors de l'ouverture de chaque fichier, j'aimerais commencer à appliquer de la mise en forme en quelque sorte. C'est à dire que parmi les 5 colonnes de mon fichier .dat seuls les 2 dernières colonnes m'intéressent. c'est à dire que les colonnes 1,2,3 sont à supprimer lors du collage sur ma feuille Excel.

Voila pour commencer.


Je propose 2 voies de solutions pour réaliser cette opération. Sois on ouvre chaque fichier et on spécifie l'importation des colonnes numéros 4 et 5 seulement. Sois on peut aussi ouvrir le fichier .dat et importer toutes les données comme la macro de JNP le fait très bien et ensuite seulement faire supprimer les colonnes 1,2,3. Je pense qu'importer toutes les données et ensuite faire une suppression de colonnes n'est pas la meilleure solution car sa fait des opérations inutiles en plus. L'idéal serait de faire ouvrir le fichier à l'utilisateur et de ne copier seulement que les colonnes 4 et 5. Ensuite ces colonnes 4 et 5 peuvent êtres copiées sur la feuille Excel en tant que colonnes 1 et 2. Ou alors on laisse les colonnes 1,2,3 vides et on colle au même endroit les colonnes 4 et 5. Sa n'as pas d'importance.

Résumé : Lors de l'ouverture de chaque fichier, il ne faut coller que les colonnes 4 et 5 dans la feuille Excel. Sa doit être un jeu d'enfant pour toi particulièrement JNP et pour d'autres aussi.

Dans tous les cas je te remercie JNP car tu as fait du super boulot. Clair, rapide et concis. Je suis bluffé la.
Thanks
 

JNP

XLDnaute Barbatruc
Re : Macro Excel pr concatener plusieurs fichiers

Re :),
Je pense qu'importer toutes les données et ensuite faire une suppression de colonnes n'est pas la meilleure solution car sa fait des opérations inutiles en plus.
Pas vraiment d'accord car là je t'envoie directement la ligne, sinon, il faudra 2 opérations par ligne, donc
Code:
Sub Test2()
Dim Chemin As String
Dim I As Long, Import As String, Tableau As Double
Application.ScreenUpdating = False
Cells.Clear
I = 1
Chemin = "TEST"
While Chemin <> ""
Chemin = Application.GetOpenFilename("Texte, *.dat")
If InStr(Chemin, "\") = 0 Then
GoTo Fin
End If
Open Chemin For Input As #1
Do While Not EOF(1)
Line Input #1, Import
Range("A" & I & ":E" & I).Value = Split(Replace(Import, ",", "."), Chr(9))
I = I + 1
Loop
Close #1
Wend
Fin:
If I = 1 Then Exit Sub
Range("F1") = 1
Range("F1").Copy
Range("A1:E" & I - 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("F1").Clear
Range("A:C").Delete
Application.ScreenUpdating = True
End Sub
Bonne soirée :cool:
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Comme d'hab JNP tu vise juste et du premier coup avec ton code ! J'ai rien à en redire si ce n'est que l'amélioration a bien été prise en compte et qu'elle fonctionne SUPER bien !

J'étais en train de me battre avec la fonction "Range("A:C").Delete". Mais j'arrivais même pas à faire sa ! Je suis vraiment trop novice pour me lancer en codage, malgré que je sache décrire mon besoin et lire les lignes de codes. Je ne connais malheureusement pas les fonctions ni la syntaxe qui vas bien. Il devait me manquer "Range("F1").Clear" je pense.

Bref pendant que je galère à modifier mon code, toi tu as le tps de le modifier, de le tester, de l'approuver et de répondre par mail. Ben dis donc lol.

Donc encore une fois, Sympa JNP !

J'ai encore quelques améliorations simples que j'aimerais apporter à ma macro. Mais j'ai peur d'en demander trop après ! (sniff)

Pour ne pas donner l'impression que j'ai 36 000 améliorations à apporter, je vais dire de suite ce que j'aimerais modifier. Mais j'aimerais procéder pas à pas pour bien comprendre les modifications apportées pour que je comprenne l'influence de tous les paramètres. Et oui le but c'est que je ne sois pas noyé dans un code tout prêt tout beau. Aucun intérêt personnel.

Très brièvement ce qu'il reste à faire : Lors de l'importation des données d'un fichier .dat dans la feuille Excel et après suppression des colonnes 1,2,3 j'aimerais qu'avant de passer au fichier suivant, il y ai une boite de dialogue qui s'ouvre invitant l'opérateur à saisir une valeur (type entier ex : 100,200,300,10000, etc.). Et que cette valeur remplisse une nouvelle colonne. Ci-après je donne un exemple pour mieux cibler.

Premier fichier .dat collé sous Excel :
1 3
4 8
1 2
3 6

L'utilisateur est amené à saisir une valeur. Il entre "70". Le fichier se transforme alors en :

Deuxième fichier .dat collé sous Excel :
1 3 70
4 8 70
1 2 70
3 6 70

L'utilisateur importe son deuxième fichier .dat qui viens se greffer sous le premier existant.

1 3 70
4 8 70
1 2 70
3 6 70
5 4
3 6

L'utilisateur est amené à saisir une valeur. Il entre "20". Le fichier se transforme alors en :

Fichier Excel

1 3 70
4 8 70
1 2 70
3 6 70
5 4 20
3 6 20

Finalement je pense que s'est bien assez compliqué comme sa. On vas continuer à avancer doucement, pas à pas. Il reste 3 petites évolutions du même style. Donc rien de méchant. Il ne faut pas compliquer trop le problème sinon sa deviens déroutant et on se prends la tête. Ce n'est pas le but. Le but étant d'avancer doucement, clairement et simplement de manière à comprendre.


La suite au prochain épisode alors.

JNP si ta besoin de plus d'explications sur ce nouveau besoin hésite pas, j'essaierais d'être encore plus claire.

Merci
 

JNP

XLDnaute Barbatruc
Re : Macro Excel pr concatener plusieurs fichiers

Re :),
Il devait me manquer "Range("F1").Clear" je pense.
Aucun rapport avec la choucroute :rolleyes:...
Mon code commenté pour que tu le comprennes bien
VB:
Sub Test2()
Dim Chemin As String
Dim I As Long, Import As String, Tableau As Double
Application.ScreenUpdating = False ' Désactive l'affichage
Cells.Clear ' Vide la feuille
I = 1 ' Initialise la première ligne
Chemin = "TEST" ' Pour que la boucle ne s'arrête pas tout de suite
While Chemin <> "" ' Tant que Chemin n'est pas vide
Chemin = Application.GetOpenFilename("Texte, *.dat") ' Boite de dialogue
If InStr(Chemin, "\") = 0 Then ' Si Chemin n'a pas de \ donc que l'opérateur a fait annuler
GoTo Fin ' Va à l'étiquette Fin:
End If ' Fin du test
Open Chemin For Input As #1 ' Ouvre un fichier en lecture
Do While Not EOF(1) ' Tant qu'on est pas à la dernière ligne
Line Input #1, Import ' Lit la ligne et la stocke dans Import
Range("A" & I & ":E" & I).Value = Split(Replace(Import, ",", "."), Chr(9))
' Copie dans la ligne I colonnes A à E la ligne importée où les "," sont remplacées par des "."
' et Split crée un tableau en fonction des tabulations (Chr(9))
' C'est là qu'on pourrait faire appel aux 2 dernières valeurs du tableau, mais ce serait plus lourd
I = I + 1 ' On augmente le N° de la ligne
Loop ' On boucle dans le fichier
Close #1 ' On ferme le fichier
Wend ' On boucle sur l'ouverture de fichier
Fin: ' Etiquette pour quand on sort de la boucle
If I = 1 Then Exit Sub ' Si on a pas importer de fichier, on quitte la Sub
' Le problème, c'est que le Split envoie des nombres au format texte, d'où le traitement complémentaire
Range("F1") = 1 ' Met 1 en F1
Range("F1").Copy ' Copie F1
Range("A1:E" & I - 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
' Collage spécial en multiplication par 1 qui transforme les valeurs textes en nombres
Application.CutCopyMode = False ' Désactive la sélection du copier
Range("F1").Clear ' Ote le 1 en F1
Range("A:C").Delete ' Supprime les 3 colonnes
Application.ScreenUpdating = True ' Rétablit l'affichage
End Sub
Maintenant, pour la suite des événements, il est effectivement plus sûr que tu fasses tes modifications toi même :p...
Les conseils :
Pour demander à l'utilisateur une valeur, utilises InputBox (plus exactement, regardes du côté d'Application.InputBox qui te donne la possibilité de choisir le type de réponse que tu attends), mais fais le avant de demander le chemin du fichier, comme cela, il te suffira de la mettre dans Range("F" & I) dans la boucle :rolleyes:...
Au revoir Mademoiselle (et oui, si tu est claire, et non pas clair :p...)
Bonne soirée :cool:
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Et bien voila, je savais que je serais obligé de revenir par ici lol. Tout d'abord merci JNP pour ton code avec les explications. Je ne comprends pas forcément vraiment tout mais j'en saisi bien le sens.

J'ai donc essayé à mon tour de programmer un peu en vba (attention c'est ma première fois, donc dsl si c'est un masacre).

Mon objectif, pour rappel, était de pouvoir demander à l'utilisateur de saisir une valeur et de faire remplir la dernière colonne par cette fameuse valeur sur autant de ligne que chaque fichier possède. Je me suis entraîné et voila ce que j'ai pondu :

Sub Test()
Dim Ctr As Integer
Dim H As Integer
Dim Reponse As Integer
Reponse = InputBox("VEUILLEZ SELECTIONE UNE VALEUR")
H = Application.CountA(Range("D:D"))
For Ctr = 1 To H
Cells(Ctr, 6) = Reponse
Next
End Sub

Et sa marche en plus !! Bon je m'enflamme un peu mais je sais que s'est pas grand chose. D'autant plus que je ne suis pas arrivé à placer ce bout de code dans le code proposé par JNP. Je ne sais pas à quel endroit exactement. J'ai fait des tentatives mais j'ai tout fait planter en fait lol. Du coup je vous donne ce code que j'aimerais faire fonctionner en complément du code source général.

Bien évidement, je sais qu'il existe beaucoup de méthode pour implémenter ce que j'ai fait. JNP tu m'as conseillé "imputbox" et sa marche. Mais pour le reste je n'ai pas compris ou tu voulais en venir. Je pense que c'est pour gagner du tps sur le programme et ne pas déclarer de variables supplémentaires. Mais c'est un peu trop pour moi dsl. J'ai fait la tout ce que j'ai pu avec ce bout de code (1 heure pour sa !sniff)

Pourriez-vous intégrer mon bout de code au bon endroit du code général ou alors proposez une solution moins pire que la mienne et qui fasse la même chose ?

Sinon mon bout de code fonctionne parfaitement. Il suffit simplement de savoir sur quelle colonne on compte et sa je ne le sais pas car mon fichier initial possède 5 colonnes et mon fichier Final ne possède plus que 2 colonnes.


Merci à ceux qui m'aideront, je galère pas mal en effet mais je ne lâche pas l'affaire.
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Macro Excel pr concatener plusieurs fichiers

Ayé on ne m'arrête plus sous Vba il me semble lol ^^

Je viens d'en profiter pour coder un nouveau petit code dont j'aimerais également l'intégrer sur code source.

Il s'agit d'une des petites modifications dont je parlais. Et j'avais raison de dire que c'était de petites modifications car même moi j'y suis arrivé lol. Je suis refait.

Bref de quelle modification s'agissait-il...

Alors une fois que mon premier fichier .dat est chargé puis copié sur ma feuille Excel, j'avais demandé à supprimer certaines colonnes inutiles. Jusque la tout marche.

Ensuite j'ai demandé à ce que l'utilisateur aie la possibilité de remplir une colonne spécifique par une seule et unique valeur et autant de fois qu'il y a de lignes. ( Il s'agit du code que j'ai mis sur la réponse précédente). Ce bout de code fonctionne parfaitement mais je n'arrive pas à le placer de manière correcte dans le code source. Sa me génère des erreurs de type ou des bugs.

Une fois tout sa réalisé, j'aimerais pouvoir encadrer les valeurs de ma première colonne par deux valeurs fixes. C'est à dire que les données contenues dans la colonne A appartiennent à l'intervalle [300;50]. Toutes les lignes situées avant ou après ces valeurs sont supprimées. Sa me permet de travailler sur une table encadrée et sur une table n'ayant pas les premières valeurs qui sont des parasites.

Voici le code que je viens de mettre en place :

Sub encadrer()
n = Cells(65536, 1).End(3).Row
Application.ScreenUpdating = False
For i = n To 1 Step -1
If Cells(i, 1) > 300 Then Rows(i).Delete
If Cells(i, 1) < 50 Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub


Encore une fois, j'arrive à faire fonctionner ce code mais pas à l'intégrer au code source qui est donné un peu plus haut. C'est le même problème que pour le dernier message que j'ai posté. Je ne sais pas à quel moment de la boucle je peux insérer mon code de manière à travailler sur la feuille Excel qui est générée.

Remarque : Si je ne désactive pas l'écran ma marco met environs 30 sec pour terminer l'effacement des lignes. Si je rajoute l'option pour désactiver l'écran la macro met 10 sec pour effacer toutes mes lignes. J'ai environ 2000 lignes par fichier. Alors 10 sec ce n'est pas très long mais lorsqu'il faut importer 14 fichier sa commence à faire long entre chaque fichier. Bizarre que sa mette autant de tps je trouve...

Je pense que le problème viens du chiffre "65536" présent dans la ligne "n = Cells(65536, 1).End(3).Row"
J'ai l'impression que ce chiffre correspond bizarrement au nombre total de lignes qu'Excel peut recevoir non ? En gros que la macro vérifie toutes les lignes même si elles ne sont pas remplies. En commençant par la toute dernière ligne qu'Excel peut donner.

J'ai essayé le code ci-après pour gagner du tsp lors de l'effacement mais sa ne marche pas. Je n'arrive pas à forcer le changement de ce chiffre "65536".

Sub encadrer()
Dim H As Integer
H = Application.CountA(Range("A:A"))
n = Cells(H, 1).End(3).Row
Application.ScreenUpdating = False
For i = n To 1 Step -1
If Cells(i, 1) > 300 Then Rows(i).Delete
If Cells(i, 1) < 50 Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub

Ce qui permettrait de se placer directement sur la dernière ligne de ma table et non la dernière ligne qu'Excel peut fournir. Qu'en pensez vous ?


J'aimerais résoudre mes deux problèmes avant de continuer car comme je l'ai dit plus haut si je mélange ne serais ce que 2 problèmes de codes les gens vont s'y perdre.

Quelqu'un pourrait-il donc m'aider à insérer mes 2 codes dans le code source disponible un peu plus haut dans les messages et si possible améliorer mes deux codes pour qu'ils se déroulent plus vites ?

Pour rappel :
-Premier code, permet de faire saisir à l'utilisateur une certaine valeur qui est ensuite remplie sur une colonne nouvelle.
-Deuxième code, permet d'encadrer la table en travaillant sur les valeurs de la première colone

Merci encore à vous tous.

PS : Ce forum porte ses fruits car il y a 2 jours je ne connaissait même pas la programmation en vba ni même les macro et ce soir je créer et compose mes propres codes. Et j'y prends plaisir malgré que je pêche sur plusieurs points encore. Donc merci à vous.
 

Statistiques des forums

Discussions
312 203
Messages
2 086 196
Membres
103 153
dernier inscrit
SamirN