VBA : copie de lignes sous conditions vers d'autres onglets

Bonjour à tous,

je me débrouille plutôt bien sur Excel pour tout ce qui est basique, mais je n'ai jamais fait de VBA...

Je sollicite votre aide précieuse car je dois réaliser un tableau avec copies de lignes automatiques et je ne sais pas du tout comment faire...!

Je vous joins le fichier pour que vous puissiez voir à quoi il ressemble.

Pour vous donner des détails :

Il faut que quand on rentre "A" dans la colonne "accepté refusé", la ligne se copie automatiquement vers un autre onglet, mais la répartition doit se faire en fonction de la date mentionnée dans la colone "date de remise".

Par exemple, si je mets "A" en cellule "H7", il faut que la ligne "7" se copie entièrement dans l'onglet "03.2015".

Je vous remercie par avance pour le temps que vous voudrez bien me consacrer

Bonjour, un fichier test...C'est impératif de respecter l'ordre des onglets dans lequels ils sont...sinon bah...Plus de macro!

C'est super, Force Rouge !

C'est exactement ce que je voulais, merci beaucoup pour votre aide

Je vais continuer à travailler sur le tableau de base, parce que j'ai des colonnes supplémentaires à crééer.

Si ça empêche la macro de fonctionner correctement, je me permettrai de revenir vers vous

Si vous allez rajouter des colonnes prenez alors se code là :

Sub macro()
    Dim dl&, dc&, i%, trouve As Range
    dl = Feuil1.Range("a" & Rows.Count).End(xlUp).Row
    dc = Feuil1.Cells(3, Columns.Count).End(xlToLeft).Column
    With Feuil1
        Set trouve = .Range("h2:h" & dl).Find("A", LookIn:=xlValues, lookat:=xlWhole)
        If Not trouve Is Nothing Then
            firstAddress = trouve.Address
            Do
                Range(Cells(trouve.Row, 1), Cells(trouve.Row, dc)).Copy Sheets(Month(trouve.Offset(0, -1)) + 1).[A65536].End(xlUp)(2)
                Set trouve = .Range("h2:h" & dl).FindNext(trouve)
            Loop While Not trouve Is Nothing And trouve.Address <> firstAddress
        End If
    End With
End Sub

il permettra de copier toutes les colonnes que vous rajouterez dans votre feuille 1 (dans le premier code j'ai mis un arrêt sur la colonne N)

D'accord, merci bien !

flute! J'ai oublié. et si la colonne où il y a les "A" change il faudra le spécifier dans la macro sur cette ligne là

Set trouve = .Range("h2:h" & dl).Find("A", LookIn:=xlValues, lookat:=xlWhole) et changer les h en couleur par la lettre de la nouvelle colonne

Bonjour Force Rouge, et aux autres personnes qui passeraient par ici

Je me permets de revenir vers vous, car de nombreuses modifications ont été apportées au tableau de base sur lequel nous avions travaillé.

J'ai essayé de modifier le code comme j'ai pu, mais je n'arrive pas à faire fonctionner la macro... (Même avec le code que vous m'aviez donné par la suite).

En PJ, voici le tableau actualisé.

J'ai essayé de faire un code, mais comme vous pouvez le constater, ça ne fonctionne pas comme je le voudrais !

Dans l'idéal, il faudrait que lorsqu'on écrit "A" en colonne J, la ligne entière soit copiée dans les onglets, cette fois-ci en fonction de la colonne O "mois prévisionnel".

Si possible, j'aimerai saisir dans la colonne O, non pas une date entière, mais simplement le n° du mois (par exemple, 1 pour Janvier, 7 pour Juillet...).

Et j'ai quelques questions supplémentaires :

  • est-il possible de renommer les onglets autrement que par le nom du mois ? Par exemple, au lieu de "Juillet", "FACT JUILLET" ?
  • dans les onglets où la copie est effectuée, est-il possible de rajouter des colonnes sans que cela perturbe la copie ? (Je suppose qu'on peut les crééer dans les colonnes "après" la copie, mais je préfère demander ).
  • surtout : est-il possible d'avoir d'autres onglets dans le fichier en plus des onglets "mois" où la copie doit être effectuée ?

Je vous remercie par avance, bonne journée !

Bonjour , pour la redirection en faveur de la colonne O le problème est partiellement résolu parce que :

- est-il possible de renommer les onglets autrement que par le nom du mois ? Par exemple, au lieu de "Juillet", "FACT JUILLET" ?

--> C'est possible il faut essayer, ceci dit il faudra que tous les autres onglets soit écrit pareille car ensuite il faut trouver une solution pour dire à excel que 8 = "FACT AOUT"..

- dans les onglets où la copie est effectuée, est-il possible de rajouter des colonnes sans que cela perturbe la copie ? (Je suppose qu'on peut les créer dans les colonnes "après" la copie, mais je préfère demander ).

--->Aucune incidence à ma connaissance.

- surtout : est-il possible d'avoir d'autres onglets dans le fichier en plus des onglets "mois" où la copie doit être effectuée ?

--> Oui c'est possible.

Bonjour, et merci pour la réponse !

Que les onglets soient tous écrits sur le même principe ne pose pas de souci, donc je peux partir sur 8 = FACT AOUT.

(Mais comment faire comprendre ça à Excel ? )

Que pensez-vous de ce code, que j'ai légèrement modifié ?

Sub COPIEMOISPREVISIONNEL()

Dim dl&, i%, trouve As Range

dl = Feuil1.Range("a" & Rows.Count).End(xlUp).Row

With Feuil1

Set trouve = .Range("j2:j" & dl).Find("A", LookIn:=xlValues, lookat:=xlWhole)

If Not trouve Is Nothing Then

firstAddress = trouve.Address

Do

Range(Cells(trouve.Row, 1), Cells(trouve.Row, 18)).Copy Sheets(Month(trouve.Offset(0, -1)) + 1).[A65536].End(xlUp)(2)

Set trouve = .Range("j2:j" & dl).FindNext(trouve)

Loop While Not trouve Is Nothing And trouve.Address <> firstAddress

End If

End With

End Sub

Avec ce code, la copie est bien effectuée mais uniquement vers le mois de Novembre, comment ça se fait....?

Désolée, je n'ai jamais pratiqué, et même si ça m'intéresse, je suis complètement perdue

hum...

"Trouve" va renvoyer une cellule de la colonne J. DOnc si vous écrivez trouve.offset(0,-1) vous allez vous décaller d'une colonne vers la gauche. Dans cette colonne de gauche il y a des "1" puis vous écrivez "Sheets(Month(trouve.Offset(0, -1)) + 1" et excel considère ça (apparement) comme du texte et donc n'incrémente pas et agit bêtement en collant du texte + du texte soit 1(le 1 qui est dans la cellule i) + 1 ce qui fait 11 d'où la copie dans le mois de novembre...

oui je sais c'est compliqué...moi même je découvre des choses en vous aidant...

Pour prendre en compte la colonne O comme mois de destination c'est celle-ci de macro qu'il faut

Sub COPIEMOISPREVISIONNEL()
    Dim dl&, i%, trouve As Range
    dl = Feuil1.Range("a" & Rows.Count).End(xlUp).Row
    With Feuil1
        Set trouve = .Range("j2:j" & dl).Find("A", LookIn:=xlValues, lookat:=xlWhole)
        If Not trouve Is Nothing Then
            firstAddress = trouve.Address
            Do
                Range(Cells(trouve.Row, 1), Cells(trouve.Row, 18)).Copy Sheets(Month(trouve.Offset(0, 4)) - 2).[A65536].End(xlUp)(2)
                Set trouve = .Range("j2:j" & dl).FindNext(trouve)
            Loop While Not trouve Is Nothing And trouve.Address <> firstAddress
        End If
    End With
End Sub

Mais il faudra la remanier en fonction des nouveaux onglets et de la façon dont vous allez les renomer

D'accord.....!

Effectivement c'est TRES compliqué, surtout pour les non initiés... Je patauge, mais j'essaye !

A priori, la 1ère partie du code fonctionne très bien, puisqu'il copie uniquement les lignes dans lesquelles "A" est écrit en colonne J, donc c'est déjà bien !

Par contre, il me copie des données uniquement dans la feuille correspondant au mois d'Août cette fois-ci, "FACT AOUT" !

(En pièce-jointe, le tableau avec le nouveau code)

C'est normal que sa beug...Car avant on pouvais transformer la feuille novembre en mois. Car excel connais "novembre" comme une référence de mois. Mais excel ne connais " FACT NOVEMBRE" comme une référence de mois parce qu'il y a FACT...

Effectivement...

Que peut-on faire pour y remédier ?

Y'a-t-il un moyen en laissant "FACT" ?

Ou sinon tant pis, je remodifie le nom des onglets... Faut-il une typologie particulière ?

A priori, sur le fichier précédent il reconnaissait le mois écrit en entier et en minuscule.

DAns l'immédiat j'ai pas la solution, je cherche mais sans succès, il y en a une et quelqu'un la trouvera. On va attendre un petit peu avant de modifier quoi que ce soit.

D'accord, merci beaucoup pour votre aide en tout cas !

C'est très gentil d'y avoir consacré du temps

J'ai envie de dire...Est-ce important d'avoir " FACT " mais c'est vrai que s'il y a d'autres onglets...

Non, ce n'est pas indispensable !

Si le fait d'enlever "FACT" permet à la macro de fonctionner, je crois qu'on pourra s'en passer !!

(Les onglets supplémentaires devraient se limiter à ceux présents dans le fichier que j'ai joint : graphique et récap)

Le souci c'est que quand je modifie les noms des onglets sur mon tableau ("janvier, juillet..."), la macro ne fonctionne pas non plus...

Je dois faire quelque chose de travers...

On peut laisser FACT JUILLET , mais après cela demande une rigueur dans la tenu du fichier car :

on peut appeler une feuille par son "nom" ou alors par sa position dans le fichier.

Exemple : en premiere position il y a "registre", en deuxième position il y a "graphique" et en troisième position il y "fact janvier".

La feuille janvier, on sait qu'elle est en troisième position donc si ont doit chercher le mois 8, on va compter 8 feuille à partir de la feuille janvier. Celle-ci étant en 3eme position dans le fichier, dans notre macro, on saura qu'il faut faire référence à la 11eme feuille car on va se referer à la position de la feuille dans le classeur et non le nom...

Je sais que les fichiers sont évolutifs donc cette solution m'embête car elle demande d'être vigilant(e) mais l'un dans l'autre, c'est pas réellement difficile de modifier la macro en cas d'ajout de nouvel onglet...

A vous de voir ce que vous voulez faire

Bonjour !

Ca me semble très astucieux comme solution

Il suffira que la position des onglets reste la même...

Le fichier est conçu sur une année entière, donc il ne sera probablement pas modifié !

Est-ce simple à mettre en place ?

Ah oui, j'abuse un peu, mais...

Serait-il possible d'effacer la ligne déjà copiée dans un onglet à partir du moment où on modifie le mois dans la colonne "O" ?

Par exemple, une prestation qui devait être réalisée en Juillet, (ligne déjà copiée par le biais de la macro), mais qui ne sera finalement faite qu'en Août.

Si on met "8" au lieu de "7", est-il possible que ça se copie en 8 et que ça s'efface en 7 ?

Rechercher des sujets similaires à "vba copie lignes conditions onglets"