Ne pas répéter le code

Faites plus simple. Là pas besoin de variable. Supprimez "nomonglet" et mettez comme ceci :

With Worksheets(1)

Ah ben oui.

Sinon séparez déjà le code de transformation du CVS en XLS. Là vous avez mis tout en un seul

j'ai essayé.

Également copier le tableau trié, coller uniquement les valeurs puis enregistrer en .xlsm pour appliquer votre macro ensuite. Mais le problème reste le même.

je vous joint le .csv.

Merci pour tout.

Lorsque vous ouvrez le fichier CSV vous faites un copier coller des informations dans votre fichier ?

Expliquez moi ce que vous faites après avoir ouvert le fichier CSV

J'ouvre le fichier j'applique le début de la macro pour la conversion en xls (e m'arrête juste avant la suppression des colonnes).

je copie les données colles les valeurs dans un nouveau fichier, l'enregistre en .xlsm. ferme et réouvre le .xlsm pour appliquer la macro que vous m'avez envoyée, de la création de l'onglet 2 a la fin.

toute la macro se déroule sans erreur mais a la fin les linges 10 11 et 12 de chaque onglet sont vides. Elles sont bien misent en forme avec leur couleur mais n'ont aucune valeurs rentrées dedans.

Bonjour,

Merci de vos précisions.
1. On peut faire un code qui vous permet d'aller chercher le fichier CSV et de l'importer dans votre fichier afin de mettre en forme les données avant la création des feuilles et importation en ligne 10, 11 et 12

Votre avis ?

2. Dans votre code dd_TL_V4_DAN vous avez cette ligne Range("D3:D34").Cut Range("E35:E66"). est-ce que ces lignes sont toujours identiques ? En fait pourquoi on coupe de la ligne 3 à 34 alors que la colonne contient des données jusque la ligne 194 ?

toute la macro se déroule sans erreur mais a la fin les linges 10 11 et 12 de chaque onglet sont vides. Elles sont bien misent en forme avec leur couleur mais n'ont aucune valeurs rentrées dedans.

Logique si dans votre colonne B le nom des feuilles n'est pas d'ordre numérique. Dans votre premier fichier vous aviez nommé 1,2,3... temoin1, temoin2...
Là sur base de votre fichier CSV on voit des xxxxx.... ou deux noms 01_blanc_mix, ...

Il faut une règle fixe. Dites moi

Crdlt

Bonjour Dan,

1- je ne comprends pas bien ce que vous voulez dire. Je ne comprends pas dans quel fichier vous voulez importer le .csv. Pour moi il n'y a qu'un fichier, le .csv (format initial) qui est ensuite converti durant la macro.

2-Ces lignes coupées sont toujours les mêmes oui. Chaque ligne du groupe supprimé est en fait un double de la ligne du groupe restant. Il n'y a qu'une seule valeur qui change. On a donc copié la seule valeur d’intérêt et collé dans une nouvelle cellule de sa ligne jumelle. Toute les autres valeurs étant identiques, on supprime les lignes. Comme si vous faisiez un répertoire téléphonique avec nom, prénom, adresse et téléphone. On aurait pour une même personne 2 lignes avec le même nom, prénom, et adresse mais dans la case téléphone on aurait dans une ligne un mobile et dans l'autre un fixe. Ici on a donc pris le numéro du fixe qu'on a collé dans une nouvelle colonne juste à cote du numéro de mobile puis supprimé la ligne ou il y avait le fixe. Ceci pour tout un groupe de personne.

3- Je pense que je comprends. Les valeurs attendues normalement étant des chiffres là il ne comprend pas le caractère Alphabet. Du coup, si je renomme les lignées xxxxxxxxx par 1xxxxxxxx, cela devrait rectifier la règle et la repasser en numérique. Ainsi il n'y aura plus qu'une même règle, c'est bien ça?

1- je ne comprends pas bien ce que vous voulez dire. Je ne comprends pas dans quel fichier vous voulez importer le .csv. Pour moi il n'y a qu'un fichier, le .csv (format initial) qui est ensuite converti durant la macro

Oui, je sais qu'il n'y a qu'un fichier CSV. Ce que je vous expliquais, c'est depuis le fichier final contenant les macros, on va aller ouvrir le fichier CSV par code et importer la feuille dans votre fichier. Une fois fait, on continue la macro qui met en forme le tableau (ce que je suis en train de vous faire)
Mettez ce code dans votre fichier et faites le test. Vous allez constater que la feuille du fichier CSV est importée dans votre fichier.

Sub Importation()
Dim nomfichier As String

Workbooks.Open Application.GetOpenFilename("CSV FIles(*.csv),*.csv")'on sélectionne le fichier source CSV
nomfichier = ActiveWorkbook.Name

With Workbooks(nomfichier)
    .Sheets(1).Copy Before:=ThisWorkbook.Sheets(1) 'on copie la feuille du fichier source en premier position
    Workbooks(nomfichier).Close False 'si le fichier source est ouvert on le ferme
End With
End Sub

2. Oui j'avais compris ce que vous faisiez. Mais ce sera donc toujours en ligne 3 et 34 pour n'importe quel fichier. Pas de risque que ce soit une autre fois entre ligne 3 et 40 par exemple ?


3. Oui vous avez compris. Le code duplique les feuilles si la colonne B contient un chiffre uniquement. Afin d'éviter de créer des feuilles lorsque le code passe sur Témoin1 et Témoin2, j'ai dû contourner dans le code. Dans votre dernier fichier vous avez mis xxxxx295 et là le code considère cela comme texte.
Si par exemple vous avez toujours un X dans le nom des feuilles à créer, on peut demander au code de renommer en 1, 2 , 3 ou autre chose.
D'où ce que je vous écrivais au sujet d'avoir une règle de création.

1- d'accord je pense que j'ai compris ce qu vous voulez faire. je vais tester.

2- Oui toujours ces mêmes lignes car elles sont le résultat du trie. Pas de changement prévu.

3- Je vais remodifier le fichier pour que le premier caractère soit un chiffre et donc que la cellule soit bien considéré en numérique et plus en alpha.

Merci pour tout ça.

3- Je vais remodifier le fichier pour que le premier caractère soit un chiffre et donc que la cellule soit bien considéré en numérique et plus en alpha.

C'est dans le fichier CSV que vous devez avoir cela.
Ne me donnez pas de code car j'ai modifié le votre ou alors dites moi ce que vous faites, j'adapterai

Après j'ai encore deux questions.
Une fois le tableau traité :
4. Une fois le tableau traité, le code actuel ne met pas de nom de colonne B2, C2 et D2. Est-ce normal ?
5. Il reste un M à coté des valeurs en colonne C (donc dans votre dernier fichier --> - 59 M, - 156 M). Est-ce bon ?

Bonjour Dan,

Je vous joint le fichier avec la notation 1xxxxxxxx pour le problème discuté précédemment.

Je pense que je n'ai pas bien compris où vous vouliez que je colle la <Sub Importation()>. je l'ai mise au tout début juste après la désactivation du rafraichissement. J'ai essayé sur le .csv directement et sur un Excel vierge mais je n'ai pas réussi à le faire fonctionner. Pouvez vous me repréciser la manip à faire avec ce code s'il vous plait.

3- oui bien sûr, je parlais bien d'un changement dans le fichier .csv

4- Non ce n'est pas normal il y a une petite erreur qui fait que les lignes des colonnes A à D sont une ligne trop haute. je vais me charger de cette erreur. Merci pour votre vigilance.

5- Oui tout à fait la lettre M est bien dans cette case. A ce niveau tout est correct.

Bonjour,

Je pense que je n'ai pas bien compris où vous vouliez que je colle la . je l'ai mise au tout début juste après la désactivation du rafraichissement.
J'ai essayé sur le .csv directement et sur un Excel vierge mais je n'ai pas réussi à le faire fonctionner. Pouvez vous me repréciser la manip à faire avec ce code s'il vous plait.

Non ne mettez pas tout dans une seule macro. Faites une macro séparée pour cela. Il vaut mieux avoir de petites macro plutôt qu'une seule qui fait tout.
Mettez la macro au-dessus du code Sub dd_TL_V4 puis juste avant le END SUB, rajoutez une instruction CALL avec le nom de la macro suivante.
Pour comprendre, voyez la vue ci-dessous :

presse papier02

ensuite il suffit d'associer un bouton à la macro Importation. A cette fin je vous conseille de prévoir une feuille spéciale qui contiendra le bouton. Donc votre fichier au départ contiendra une feuille et suite à l'importation le code fera l'importation du fichier CSV puis la création des feuilles (via un autre bouton éventuellement)

3- oui bien sûr, je parlais bien d'un changement dans le fichier .csv

J'ai vu votre 1 devant mais vous avez toujours les X mais je vais corriger le code pour que cela fonctionne. Merci de confirmer que aurez toujours les deux lettres 1x

Edit : aussi de me donner le nom que vous voulez pour la feuille qui importe les données. Sinon par défaut ce sera le nom de la feuille du fichier CSV

D'accord je vais tester,

3- Non les nom dans cette colonne 3 formes. Les mesures sous la forme 1111XX000111. Les témoins sous la forme 01_xxxx_xxx et 02_1111xx00011.

0 et 1 représentant des chiffres aléatoires et X une lettre aléatoire. Il seront toujours sous cette forme la mais les lettres et les chiffres varient.

3- Non les nom dans cette colonne 3 formes. Les mesures sous la forme 1111XX000111. Les témoins sous la forme 01_xxxx_xxx et 02_1111xx00011.

Ok. je corrige mais dans votre fichier posté vous avez mis 1x au lieu de 11

6. Pouvez-vous me donner le nom que vous voulez pour la feuille qui importe les données. Sinon par défaut ce sera le nom de la feuille du fichier CSV

7. on peut aussi prévoir la suppression des feuilles dans le fichier avant une nouvelle importation si vous voulez

J'ai ouvert mon csv, ajouter une feuille vierge, créé un bouton relier à la macro importation.

Je clic sur le bouton, je sélectionne le csv déjà ouvert. Du coup je clic sur "oui" rouvrir et là l'erreur qui survient dit "la méthode Copy de la classe Worksheet a échoué"

Ok. je corrige mais dans votre fichier posté vous avez mis 1x au lieu de 11

Oui X remplaçait n’importe quel chiffre mais je n'avais pas pensé au changement de classe de la cellule du coup. Je peux vous l'envoyer avec le 11 mais ce ne sera pas toujours ce chiffre la au début. Le nom des mesures évoluent. c'est gênant?

6. Pouvez-vous me donner le nom que vous voulez pour la feuille qui importe les données. Sinon par défaut ce sera le nom de la feuille du fichier CSV

Vous pouvez laisser le nom que vous voulez cela importe peu. feuil1 par exemple fera très bien l'affaire.

7. on peut aussi prévoir la suppression des feuilles dans le fichier avant une nouvelle importation si vous voulez

Si c'est nécessaire mais je ne pense pas, si?

Je clic sur le bouton, je sélectionne le csv déjà ouvert. Du coup je clic sur "oui" rouvrir et là l'erreur qui survient dit "la méthode Copy de la classe Worksheet a échoué"

Vous ne devriez pas avoir d'erreur dans ce cas.

3. Oui X remplaçait n’importe quel chiffre mais je n'avais pas pensé au changement de classe de la cellule du coup. Je peux vous l'envoyer avec le 11 mais ce ne sera pas toujours ce chiffre la au début. Le nom des mesures évoluent. c'est gênant?

Tant que vous avez le chiffre 1 en premier. C'est bon.

6. Vous pouvez laisser le nom que vous voulez cela importe peu. feuil1 par exemple fera très bien l'affaire.

Dans le fichier joint, j'ai réservé une feuille nommée "Accueil" pour les boutons et ai placé deux boutons. Un pour l'importation et le traitement des données et un autre pour la création des feuilles.
- les codes pour l'importation et le traitement du CSV sont dans le module "module_importation"
- les codes pour la création des feuilles et l'import des données sont le module "module_creation"

7. on peut aussi prévoir la suppression des feuilles dans le fichier avant une nouvelle importation si vous voulez
Si c'est nécessaire mais je ne pense pas, si?

Bah vous verrez à l'utilisation mais c'est sûr qu'avant une nouvelle importation, il faudra avoir seulement 1 feuille (celles qui contient les boutons). Cela c'est important.

Ok, je vais tester tout ça a tête reposée.

Le chiffre 1 au début du nom n'est pas prêt de changer oui (sauf modification complète de la nomenclature) on a le temps de voir venir.

Merci beaucoup Dan.

Le chiffre 1 au début du nom n'est pas prêt de changer oui (sauf modification complète de la nomenclature) on a le temps de voir venir.

Ok. Alors cela doit fonctionner.

Dans l'attente de votre retour

Crdlt

Bonjour Dan,

Désolé j'ai mis un peu de temps à revenir sur ce projet.

j'ai testé ce que vous m'avez envoyé, tout à l'heure et ça fonctionne très bien.

Je me suis juste permis de corrigé le nomonglet = activesheet.name en nomonglet = sheets(1).name de la sub dd_TL du module "importation" pour qu'il aille bien chercher le nom de l'onglet dans la colonne B de l'onglet 1et non de la feuille active.

Merci beaucoup pour tout votre temps et cette solution qui fonctionne très bien.

Rechercher des sujets similaires à "pas repeter code"