Problème à l'ajout d'une ligne

Bonjour tout le monde,

J'ai fais une macro qui permet d'ajouter une ligne en haut d'un tableau, le problème c'est qu'il copie la mise en forme de la ligne du dessus qui est l'en-tête de mon tableau. Pourtant j'ai utilisé la fonction "CopyOrigin:=FormatFromRightOrBelow" qui devrait copie la mise en forme de la ligne du dessous.

Je ne comprend pas où est le problème, si quelqu'un sait d'où cela vient j'aimerais savoir. Vous trouverez un fichier test ci-dessous reporduisant mon problème.

Merci d'avance et bonne fin de journée.

Bonjour,

Petit problème dans votre Enum, c'est xlShiftDown qu'il faut indiquer et non xlDown.

Sub Test()
    Rows(2).Insert xlShiftDown, xlFormatFromRightOrBelow
End Sub

Pour moi le sub ci-dessus fonctionne.

Merci beacoup, ça fonctionne très bien. J'avais vu sur ce forum "xlFormat..." mais lorsque je l'ai tésté ça n'avais pas fonctionné (j'avais du faire une autre erreur ).

Cepandant qu'elle est la différence entre ma version et la votre, j'avais vu sur le forum qu'elles demandaient la même chose mais juste en étant écritent différement, alors pourquoi l'une fonctionne et pas l'autre? Est-ce à cause de ma version d'Excel?

Merci pour votre retour, content d'aider.

Comme je l'écrivais, votre indication du format était correcte. C'est le 1e argument (Shift:=) qui ne l'était pas. La doc demande d'utiliser un Énumération XlInsertShiftDirection (Excel) | Microsoft Learn. Or vous avez utilisé un Énumération XlDirection (Excel) | Microsoft Learn (qui est utilisé dans Range.End par exemple).

Bon, dans l'absolu les 2 enums ont la même valeur (-4121) donc votre erreur "devrait" quand même fonctionner... Mais dans les faits, ça ne marche pas. Ça je ne saurais pas vous l'expliquer, mais faites toujours attention à bien utiliser les arguments attendus par les fonctions, autrement on peut avoir des surprises (comme on vient de le voir).

Bonne fin de journée.

Merci beacoup pour cette explication, elle est très claire. Et merci encore de m'avoir aidé.

Bonne fin de journée et au revoir.

J'ai un peu approfondi le sujet car c'est intéressant. Il semblerait (ce n'est pas clair car pas de doc officielle) que lorsque l'on donne à Insert un enum du mauvais type, il se mette en fonctionnement "par défaut". Or par défaut il copie la ligne du dessus, d'où ton problème.

En fait les enums ne sont pas directement convertis vers leur valeur numérique, Excel regarde d'abord si le "type" de l'enum correspond à celui qu'il attend :

Si oui => RAS
Sinon
  Si valeur numérique brute (-4121) acceptable => RAS
  Si enum incorrect => comportement par défaut, sans "évaluer" sa valeur (ton cas initial).

C'est un peu particulier dans le sens où un langage de programmation plus moderne aurait été soit plus stricte : tu aurais eu une grosse erreur "enum de type incorrecte", ou bien plus "intelligent" et il aurait regardé la valeur de l'enum avant de te dire que ça ne va pas/faire le comportement par défaut.

J'espère que c'est plus clair. C'est un sujet assez subtil mais (malheureusement) récurrent en VBA.

Rechercher des sujets similaires à "probleme ajout ligne"