MeF- liste Validation - fusion

Bonjour,

J'ai enregistré une macro mais sincèrement je ne sais pas comment la modifier pour que ça réponde à mais attente.

Je voudrais svp, dès que je saisis une valeur en colonne B (à partir de b12), avoir la même chose que la ligne du dessus.

c'est à dire la même mise en forme: en B liste de validation, en C format monétaire, et D et E fusionnées.

Merci par avance.

bonjour

Excel possède une fonction spécialement pour ça. Menu Acceuil, Mettre sous forme de tableau

mais :

  • aucune fusion (d'ailleurs il ne faut JAMAIS fusionner de cellules dans Excel, source de pb tôt ou tard)
  • saisir la cotisation d'abord, ce qui crée la ligne et active la liste déroulante en col Adhérents. Sinon la liste déroulante ne fonctionne pas.
3essai.xlsm (16.60 Ko)

Bonjour,

Je ne vais pas prendre le temps de démolir ta macro, car elle est inadaptée... Pour avoir une procédure qui s'exécute suite à un évènement, il convient de définir une procédure évènementielle sur l'évènement choisi, au cas particulier en ciblant l'insertion d'une valeur en colonne B à partir de la ligne 12, en vérifiant que la ligne au-dessus contient également une valeur.

On utilise la faculté d'Excel à aligner les formats de la ligne insérée sur celle qui précède (par défaut), la liste déroulante suit... On complète par les éléments qui ne suivent pas l'insertion (fusion et bordures). Cependant, il y avait un hic à vouloir saisir dans une cellule sous liste de validation... J'ai procédé par insertion d'une ligne au-dessous de celle que tu sers, qui déclenchera la macro, tu déclenches donc l'insertion en utilisant la liste déroulante...

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim n%
    If Target.Count > 1 Or Target.Row < 12 Then Exit Sub
    If Target.Column = 2 And Target <> "" And Target.Offset(-1) <> "" Then
        n = Target.Row + 1
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        On Error GoTo fin
        Me.Range("B" & n & ":E" & n).Insert xlShiftDown
        Me.Range("D" & n & ":E" & n).Merge
        With Me.Range("B" & n & ":E" & n).Borders
            .LineStyle = xlContinuous: .Weight = xlThin
        End With
    End If
fin:
    Application.EnableEvents = True
End Sub

Une macro évènementielle se place dans le module de la feuille concernée.

NB- Tu peux aussi opter pour la solution de jmd qui fonctionnera parfaitement...

Cordialement.

Jmd , MFerrand ,

Je vous remercie beaucoup. Je me donne un peu de temps pour tester les 2 méthodes et reviens vous tenir au courant.

Me voici de retour, pas très long.

@ Jmd: ta proposition n'est pas adéquate pour ce fichier, car à l'accoutumée on choix d'abord l’adhérent pour ensuite saisir sa cotisation. Par contre, je te remercie je vais utiliser ta solution sur un autre fichier.

@MFerrand: c'est presque parfait; ne serait-il pas possible de faire les mises en forme juste pour laquelle la cellule B est active. c'est à dire ne pas mettre en forme, comme c'est actuellement le cas la ligne suivante.

ex: quand B12 est activée, insérer la validation, mise en forme et fusion (juste en ligne 12) et ainsi de suite.

Merci beaucoup.

re

petite modif

tu peux saisir l'adhérent d'abord et avec la liste de validation qui fonctionne

voili-voilou

Réaménagement :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim n%
    If Target.Count > 1 Or Target.Row < 13 Then Exit Sub
    On Error Resume Next
    n = Target.Validation.Type
    If Err.Number = 0 Then Exit Sub
    On Error GoTo 0
    If Target.Column = 2 And Target.Offset(-1) <> "" Then
        n = Target.Row
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        On Error GoTo fin
        Me.Range("B" & n & ":E" & n).Insert xlShiftDown
        Me.Range("D" & n & ":E" & n).Merge
        With Me.Range("B" & n & ":E" & n).Borders
            .LineStyle = xlContinuous: .Weight = xlThin
        End With
    End If
fin:
    Application.EnableEvents = True
End Sub

Le test sur la présence d'une règle de validation dans la cellule est destiné à éviter l'insertion à répétition de lignes sans les utiliser...

Les gars merci, je crois que j'ai mal exposé mon problème. et pour ce deuxième "round"

C'est Jmd qui a déduit mon attente (en effet, j'ai omis de dire que dès le départ, qu'il fallait mettre la validation par macro).

@Jmd: c'est impeccable, je vais pouvoir appliquer ton code sur mes 2 fichier. un grand Merciiiiii

Merci de m'expliquer, comment es-tu arrivé au résultat. Sinon ça n'a aucun intérêt de rien apprendre.

c'est pour aller à la pêche tout seul comme un grand, merci.

@MFerrand: Ton code répond bien à mon problème sauf que je suis désolé de vous avoir induit en erreur.

Si on supprime la ligne 12, le code ne fonctionne plus. En effet, sur mon fichier cette plage est appelée à être effacée autant de fois que nécessaire. ce n'est qu'une plage de saisie, le stockage se fait sur une autre feuille.

Merci à vous, franchement bravo.

Là c'est moi qui ne comprend plus ! Dans ton fichier, la ligne 12 ne peut pas être supprimée, c'est la seule référence pour ajouter des lignes au même format... mais tu peux sans problème l'effacer...

Avec la proposition de jmd, tu ne fonctionnes pas avec une macro, mais avec un tableau Excel, en te servant de ses fonctionnalités. Et en ce qui concerne la ligne 12 tu ne peux pas non plus la supprimer, sauf à supprimer tout le tableau (un tableau Excel est créé avec au moins une ligne...)

En ce qui concerne la ligne 12, je ne vois pas de différence, sauf que dans le tableau initial tu peux la supprimer (et ça ne fonctionnera plus) alors que dans le tableau jmd, tu ne peux carrément pas la supprimer (sauf si tu supprimes le tableau entier).

Cordialement.

re à vous

Concernant le fonctionnement des "tableaux", c'est vraiment une fonctionnalité à apprendre

quand on ajoute une ligne dans un "tableau" toutes les caractéristiques de la ligne au-dessus sont automatiquement reportées y compris les formules s'il y en a.

sauf que si la 1ère colonne contient une liste de validation, ça coince comme tu l'as vu dans mon 1er message. L'astuce est de mettre un grand nombre de cellules de cette colonne avec la liste de validation. ça marche comme tu l'as vu.

Ainsi que l'a dit MFerrand, il faut au moins une ligne de données dans un tableau lors de sa création. Mais tu peux supprimer toutes les lignes de données y compris la première, il restera une ligne vide. Tu ne peux pas supprimer la ligne des titres.

Tu peux insérer une ligne, elle garde automatiquement les propriétés des autres.

Re, MFerrand,

Je l'ai dit, je me suis mal exprimé. J'avais juste indiqué que j'avais enregistré une macro avec l'enregistreur, et que je ne voyais pas comment l'adapter à ce que je voulais obtenir.

Avec la proposition de jmd, tu ne fonctionnes pas avec une macro, mais avec un tableau Excel, en te servant de ses fonctionnalités. Et en ce qui concerne la ligne 12 tu ne peux pas non plus la supprimer, sauf à supprimer tout le tableau (un tableau Excel est créé avec au moins une ligne...)

Justement, c'est ça que je lui ai demandé de m'expliquer. Tu peux faire le test, prend son fichier et supprime les lignes ( 12 incluse) et ça fonctionne [j'ai sélectionné toutes les lignes à partir de 12, clic-droit supprimer, la validation reste] . J'avoue ne rien comprendre.

Merci beaucoup.

Re Jmd, nos messages se sont croisés.

Alors si j'ai bien compris, l'astuce serait de mettre en place la liste de validation et ensuite créer le tableau excel. C'est bien ça?

Ensuite, j'ai fait le test en supprimant toutes les lignes sauf la ligne d'entête. La validation et la mise en forme reste. et tu viens de me dire que même s'il y a des formules, elles restent.

Merci pour tes explications. Intéressant, ces tableaux excel, je vais m'y mettre.

Mais, non il n'y a pas la fusion des cellules. Désolé, je dois avoir cette fusion. Même si elles seront source de problèmes.

Désolé de vous avoir fait perdre votre temps.

J'aurais dû laisser tomber l'histoire de mise en forme et fusion. Pour juste vous demandez comment adapter cette macro à la colonne B à partir de la ligne 12 et sans sauf de lignes, pour créer une validation.

Sub Validation()
    Range("B12").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Adhérants"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub

ce qui revient à créer une validation par macro. Pour le reste j'ai un exemple dans le code de MFerrand.

Serait-il possible de commenter le code. Merci beaucoup.

CP4 a écrit :

Re Jmd, nos messages se sont croisés.

Alors si j'ai bien compris, l'astuce serait de mettre en place la liste de validation et ensuite créer le tableau excel. C'est bien ça?

Ensuite, j'ai fait le test en supprimant toutes les lignes sauf la ligne d'entête. La validation et la mise en forme reste. et tu viens de me dire que même s'il y a des formules, elles restent.

Merci pour tes explications. Intéressant, ces tableaux excel, je vais m'y mettre.

Mais, non il n'y a pas la fusion des cellules. Désolé, je dois avoir cette fusion. Même si elles seront source de problèmes.

re

en pratique, j'ai d'abord créé le tableau, et ensuite j'ai sélectionné 20 ou 30 lignes de la colonne des adhérents (ça dépasse donc du tableau) pour y mettre la validation par liste.

pourquoi diable as-tu besoin de fusionner des cellules ? il suffit d'élargir la colonne pour avoir toute la place voulue.

Re,

pourquoi diable as-tu besoin de fusionner des cellules ? il suffit d'élargir la colonne pour avoir toute la place voulue.

C'est parce qu'au-dessus de ce tableau, il y a une plage où sont effectuées des calculs avec une certaines mise en forme.

Il y a aussi des macros auxquelles je ne veux pas toucher au risque de bousiller tout le travail accompli.

Merci à vous pour votre patience et votre aide.

Bonne soirée.

re

bon tu me renforces dans 2 convictions :

  • les fusions donnent des problèmes (essaye de t'en débarrasser)
  • VBA n'est pas stable lors de la modif des fichiers (alors que 99% des fonctions Excel le sont)

Merci pour les conseils, j'en tiendrai compte sur mes futurs fichiers. Mais celui-ci non, j'ai passé plusieurs jours dessus.

Encore merci.

Rechercher des sujets similaires à "mef liste validation fusion"