Aide modification macro de trie

Bonjours tout le monde. Je suis nouveau sur le forum, mais j’espère y trouver l’aide dont j’ai besoin !

Je viens vous voir car dans le cadre de mon activité, j’extrais des données « brutes » à partir de mon logiciel de suivi de commande. Pour m’aider à suivre ces commandes, j’utilise depuis quelque temps une macro (à la suite du message) qui me permet de simplifier mes traitements.

Voilà comment elle fonctionne : JE prends les données de mon logiciel, que je place dans mon fichier excel. Puis la macro fait le traitement : Elle sélectionne l’année qui m’intéresse et réparti les commandes au mois par mois dans les feuilles correspondantes. Pour éviter de copier deux fois la même ligne de commande, la macro colore la ligne en rouge, et elle ne lit pas les lignes en rouge par la suite. Ainsi, cela me permet de rajouter des lignes au fur et a mesuré, sans qu’elles ne soient copiées/collées à chaque fois. (j’espère que vous me suivez toujours ^^’)

Mais maintenant, j’ai un autre besoin. Je dois faire une mise en forme différente dans mon fichier excel… J’ai donc eu l’idée de reprendre ma macro, mais de la diviser en deux parties. Cela permettra de copier les commandes pour l’année qui m’intéresse dans une autre feuille (dans la page « traitement ») ; puis je fais la mise en forme ; ensuite les lignes sont copiées/collées au mois par mois, dans les feuilles correspondantes.

Je tiens beaucoup à cette macro, car les lignes copiées une fois (sont colorées en rouge) ne sont pas copiées de nouveau ! Ainsi quand je fais des modifications (adresse, modification de commande…), pas besoin de tout refaire après une importation. Les nouvelles lignes sont copiées à la suite des autres, sans remplacer les premières.

D’où la raison pour laquelle je viens vous voir : Ce n’est pas moi qui ai fait cette macro, et je ne sais pas du tout comment marchent ces choses (le VBA et moi ça fait 2, mais j’y travaille !).

Donc voila la macro dont je vous parlai, est ce quelqu’un peut m’aider à la modifier ?

Sub Traitement()
Dim pl As Range 'déclare la variable pl (Plage)
Dim cel As Range 'déclare la variable cel (Cullule)
Dim a As String 'déclare la variable a (Année)
Dim an As Integer 'déclare la variable an (Année du classeur)
Dim m As String 'déclare la variable m (Mois)
Dim dest As Range 'décalre la variable dest (Destination)

an = Sheets("Feuille1").Range("e3").Value 'définit la variable an
Set pl = Sheets("Commandes").Range("B2:B" & Sheets("Commandes").Cells(Application.Rows.Count, 3).End(xlUp).Row) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules éditées cel de la plage pl
    'condition 1 : si l'année de la cellule est égale a la variable an et si la cellule n'est pas rouge
    If Year(cel.Value) = an And cel.Interior.ColorIndex <> 3 Then

        m = Format(cel.Value, "mmmm") 'définit la variable m
        On Error Resume Next 'en cas d'erreur passe à la ligne suivante

        With Sheets(m) 'prend en compte l'onglet m (si cet onglet n'existe pas cela provoque une erreur)
            If Err > 0 Then 'condition 2 : si une erreur a été provoquée
                MsgBox "l'onglet " & m & " n'existe pas dans ce classeur vous devez le créer !" 'message
                Exit Sub 'sort de la procédure
            End If 'fin de la condition 2

            Set dest = .Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination

        End With 'fin de la prise en compte de l'onglet m

        With cel.EntireRow 'prend en compte la ligne entière de la cellule cel
            .Copy dest 'la copie dans la cellule de destination
            .Interior.ColorIndex = 3 'la colore de rouge (pour eviter de remettre ces données si la macro est relacée)
        End With 'fin de la prise en compte de la ligne entière de la cellule cel
    End If 'fin de la condition 1
Next cel 'prochaine cellule cel de la boucle

End Sub

Je place mon fichier à la suite (j’ai du enlever des données pour raison de confidentialité…).

Je vous remercie du temps que vous voudrez bien m’accorder !

À bientôt

9clasr2.zip (38.67 Ko)

Bonjour

Comprends pas trop ton soucis

Avant : Tu copiais les données dans ton fichier ensuite tu lançais la macro qui dispatchait les données

Maintenant : Tu copies les données dans ton fichier, tu fais une mise en forme quelconque, ensuite tu lances la macro

Quel changement il y a ?

J'ai du louper un épisode, car je vois pas le problème

Dans ton fichier mets un exemple de ce que tu as et ce que tu veux

A suivre

Banzai64 a écrit :

Avant : Tu copiais les données dans ton fichier ensuite tu lançais la macro qui dispatchait les données

Oui!

Mais après je ne peut pas appliquer la mise en forme sur la page "commande", car par la suite je continuerai à rajouter des lignes de commandes chaque jours (donc si la mise en forme est déjà faite, tout serais décalé !).

(d'autant plus que je souhaite conserver la liste des données dans la page "commande" telles qu’elles sont car ça m'aide à me repérer ^^').

J'ai donc pensé à faire en sorte que les nouvelles données (celles qui ne seront pas en rouge) soient copiées dans une nouvelle feuille où je pourrai faire ma mise en forme sans me soucier de modifier les lignes de commandes précédentes. Puis une fois mises en forme, elles serons réparties au mois par mois.

J'ai un peut de mal à expliquer ce que je veux dire.

Je te renvoi un autre fichier: les anciennes données sont en rouge, donc elles ne sont pas copiées. Les données pas en rouge sont placées dans la feuille "traitement" où j'applique ma mise en forme (normalement la macro les colore en rouge une fois qu'elles sont copiées! mais on comprendrai pas si je l'avais fait). Puis elles sont réparties au bon mois (ici avril).

Voilà, encore désolé si j'ai mal expliqué

15clasr3.zip (39.15 Ko)

Bonjour

Tu veux juste modifier la colonne J qui passe en H ?

Ou il y a d'autres modifications ?

Que fait tu des données en page "Traitement" une fois la recopie faite ?

Tu peux à partir de la page "commandes" copier dans les bonnes colonnes dans les feuilles mensuelles, cela simplifiera le traitement

Dans ta macro tu recherches la date en colonne C, mais dans le fichier la date est en colonne B

A suivre

Salut, merci pour ton intérêt.

Alors, pour les traitement, le fichier que j'ai envoyé est "anonymé" donc on ne voit pas la nécessite des traitements; mais effectivement il y en a d'autres à faire (conversion de données, fusion de cellules...) et pas seulement des déplacements.

C'est pour cela que j'ai penser à créer une étape intermédiaire qui se passerai sur la page "traitement". Une fois que les données auront étés mises en forme et réparties au mois par mois, la page "traitement" est vidée (car je n'en ait plus d'utilité).

Ah oui, désolé, j'ai copié la macro d'origine et pas celle que j'utilise dans mon fichier excel. Mais c'est mis à jours !

Voila voila, à bientot

Bonsoir

A tester

salut, je te remerci pour ton travail

le traitement 1 marche tréés donc pas de pb

en revanche, pour le traitement2 il y a un petit souci: la première ligne de commande de chaque mois disparaît. Serait il possible de faire en sorte que les cellules soient collées à partir de la ligne 2? (si c'est bien ça le problème)

tu peut le voir, en empêchant la suppression de la page traitement après l’exécution de la macro traitement2, la commande ayant pour numéro 489 disparaît.

Merci beaucoup, A bientot

Bonsoir

Oui j'ai vu et mea culpa

Remplaces la ligne dans la macro Sub Traitement_Phase2()

For J = 2 To Ws01.Cells(Rows.Count, 2).End(xlUp).Row

par celle-ci

For J = 1 To Ws01.Cells(Rows.Count, 2).End(xlUp).Row

Désolé

Rechercher des sujets similaires à "aide modification macro trie"