[XL2007]Fractionner des lignes selon une variable

Bonjour à tous!

Alors, voilà mon problème. Dans le cadre d'un stage, je dois créer un outil de planning pour le petit musée dans lequel je suis. Mon tableau comporte donc une date de A à D, le type de prestation (visite guidée, atelier...) que les médiateurs vont faire tel ou tel jour, le nombre d'entrée pour chaque prestation, les détails de chaque prestation et le total de visiteur pour la journée en L... Le problème c'est qu'il est possible qu'il y ait plusieurs prestations sur la même journée. J'ai donc ajouté une colonne en F, le "nombre de prestation" qui indique pour tel jour le nombre de prestation prévues. Et ainsi commence les ennuis

J'aurais aimé que selon le nombre X qu'ils remplissent dans la colonne F, X lignes soient sautées dessous puis que les colonnes A, B, C, D, E, F, K et L des X lignes soient fusionnées puisqu'elles contiennent des éléments communs à chacune des nouvelles lignes. Par exemple, si en F5 on écrit 4, j'aimerai sauter 4 lignes dessous et fusionner les cellules A5:A9, B5:B9, C5:C9, D5:D9 etc...

J'ai réussi à m'en sortir sans avoir recours au VBA jusqu'à maintenant, en utilisant seulement des fonctions mais là ça me paraît un peu tendu. Désolé si ma question est un peu flou, pour plus de clarté je vous met aussi une feuille du classeur contenant toutes les infos. Je vous remercie d'avance pour votre aide!

Bonjour,

une proposition via une macro événementielle (ne gère que l'ajout de lignes)

Merci beaucoup pour la réponse rapide!

C'est vraiment pas mal du tout! Merci beaucoup! Néanmoins, comme je fais ça pour des personnes qui n'utilisent que les fonctions très basiques d'Excel (en soi, elles ne font que rentrer des informations dans des champs prédéfinis), je pense que la fusion automatique après l'ajout de ligne est assez important.

Dans le cas où c'est un peu long ou fastidieux à mettre en place, je me tiendrai à cette solution, qui est déjà super!

De plus, que faut-il changer dans ta macro h2so4 pour qu'elle soit applicable à un autre classeur? La feuille que j'ai partagée est normalement la 4e du classeur, et il en suit 11 autres qui auront besoin elles aussi de la même macro :3

Bonjour,

pour répondre à ta première question.

1) as-tu essayé de fusionner des cellules de ta table ? (à ma connaissance il n'est pas possible de fusionner des données mise sous la forme de table excel.

2) il faut éviter d'avoir des cellules fusionnées dans un tableau dans lequel on manipule des données, dans lequel on ajoute, on copie ou on supprime des lignes. tôt ou tard cela posera problème.

si tu le souhaites malgré tout, c'est possible, mais il faudra oublier l'idée de travailler avec une table excel.

pour répondre à la 2ème question

la macro est installée pour fonctionner sur toutes les feuilles du classeur. je peux ajouter un test qui vérifie si la macro ne doit pas s'exécuter sur certaines feuilles.

Rebonjour!

En effet il semble impossible de fusionner les cellules du tableau. C'est donc bien noté, je m'en remet à ta sagesse et abandonne l'idée de fusionner mes lignes.

J'ai essayé ce matin de mettre la macro sur un autre classeur mais il semble que ça ne fonctionne pas comme prévu malheureusement, puisque les lignes n'apparaissaient juste pas.

Enfin, j'aimerai bien en effet que la macro n'agisse qu'à partir de la 4e feuille (troisième si on ne compte pas la feuille cachée) et ce jusqu'à la dernière.

Je te remercie énormément de ton aide salutaire!

Salut à tous!

Je me permet de re-up le sujet et de donner quelques nouvelles. J'ai réussi à intégrer la macro dans mon fichier principale (Yay! ) mais je n'arrive toujours pas à faire en sorte que la macro ne s’exécute qu'à partir de la feuille 4 (septembre 18) et jusqu'à la 14 (juillet 19) (Ooooh... ) je suis donc toujours un peu coincé, toujours dû à mon manque d’expérience en VBA, donc je m'en remet une nouvelle fois à vous Que puis-je changer pour que la macro ne soit pas globale et ne s'applique que sur les feuilles précédemment citées?

Merci d'avance!

Bonjour,

tu peux tester le numéro d'index de la feuille

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Index >= 4 And Sh.Index <= 14 Then
        If Target.Column = 6 Then
            Application.EnableEvents = False
            np = IIf(Target = 0, 1, Target)
            dl = Sh.Cells(Rows.Count, 1).End(xlUp).Row
            nl = Application.CountIf(Sh.Cells(2, 2).Resize(dl, 1), Sh.Cells(Target.Row, 2))
            laj = np - nl
            Select Case laj
            Case Is > 0
                Sh.Cells(Target.Row, 1).Resize(, 12).Copy
                Sh.Cells(Target.Row + 1, 1).Resize(laj, 12).Insert shift:=xlDown
                Sh.Cells(Target.Row, 6).Resize(np) = ""
                Sh.Cells(Target.Row, 6) = np
            End Select
            Application.EnableEvents = True
        End If
    End If
End Sub

Bonjour!

Ta macro est vraiment super merci!

Je ne sais pas trop si c'est possible, mais crois tu qu'il serait possible qu'il y ait une sorte de "mémoire" de la macro sur le nombre de ligne? Actuellement, si j'entre dans ma cellule F3 qu'il y a deux activité ce jour là, une ligneest créée. Néanmoins, si j'y reviens et que je change le deux en trois, la macro me crée deux nouvelles lignes au lieu d'en créer une seule. La macro n'a pas la "mémoire" d'avoir déjà créée une nouvelle ligne.

Penses-tu qu'il serait possible de faire ca?

Merci beaucoup!

Bonjour,

la macro est normalement prévue pour cela. je ne parviens pas à reproduire le comportement que tu signales.

tu introduis 2 en F2 il t'ajoute une ligne (s'il n'y en a pas déjà 2 ou plus). puis tu introduis 3 en F2, il t'ajoute une nouvelle ligne.

Si ce n'est pas le comportement observé chez toi. Indique-moi la séquence des opérations que tu fais pour arriver à ce résultat incorrect.

(ps la macro ne supprime pas les lignes en trop, il faut les supprimer manuellement).

Oui! Je viens de découvrir pourquoi se produisait ce phénomène: c'est entièrement de ma faute, je suis désolé de t'avoir dérangé. Je voulais à la base que la ligne créée ne porte pas la date du jour copié et j'avais donc mis une formule dans les cellules de date disant que si la date existait déjà, il ne fallait pas remplir la cellule. Je pense que là était l'erreur. Finalement, j'ai décidé de garder les dates: ce sera beaaaaaucoup plus simple pour moi.

Encore une fois merci énormément pour ton aide!

Erf... Bon, nouveau petit problème... Tout se passait parfaitement, jusqu'à ce que je veuille appliquer le code à un autre style de feuille. La colonne conservant la variable qui fait bouger les ligne reste la sixième, mais cette fois çi, le résultat ne s'applique pas. Je reçois une erreur d'exécution '1004':"Le déplacement de cellules dans un tableau devotre feuille de calcul n'est pas autorisé" et lorsque je demande le déboguage, on me dit que la ligne Sh.Cells(Target.Row + 1, 1).Resize(laj, 12).Insert shift:=xlDown pose problème. Je ne crois pas avoir spécifiquement protégé mon tableau contre l'ajout ou le retrait de ligne, pas consciemment en tout cas et je ne sais pas où pourrait se trouver l'erreur, surtout que sur mon autre tableau celà fonctionne parfaitement!

De plus, j'ai l'impression que seul l'entrée d'un chiffre par l'utilisateur lui même permet de sauter des lignes. Est-il possible simplement de faire en sorte que l'entrée de chiffre par référence déclenche aussi la macro?

Merci mille fois de ton aide!

Rechercher des sujets similaires à "xl2007 fractionner lignes variable"