Mise en forme conditionnelle malgré insertion ligne

Bonjour,

Je reviens avec une nouvelle question qui me paraît toute bête mais que je n'arrive pas à résoudre ...

J'ai fait un tableau de base pour reproduire mon problème.

J'ai une macro qui récupère de la saisie et qui la colle dans un tableau synthétique sous forme de liste.

Seulement, j'ai une mise en forme conditionnelle présente dans cette liste ; mais la formule qui s'applique se décale de cellule à chaque fois que j'active ma macro (qui insère une nouvelle ligne).

Exemple ma formule s'applique à A1. Si j'insère une nouvelle ligne, ma formule de mefc s'appliquera à A2.

Comment faire pour bien "fixer" la zone d'application de la mefc?

Merci de votre aide,

14forum.xlsm (19.78 Ko)

Bonjour Charlydkn

Voic le code optimisé qui fonctionne correctement par rapport à votre fichier

Sub AjoutLigne()
  Dim nLig As Long
  With Sheets("Test forum")
    ' Prochaine ligne vide
    nLig = .Range("F" & Rows.Count).End(xlUp).Row + 1
    With .Range("F" & nLig & ":J" & nLig)
      With .Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
      End With
      With .Font
        .ThemeColor = xlThemeColorAccent1
        .TintAndShade = 0
      End With
    End With
    .Range("F" & nLig).Value = .Range("C4").Value
    .Range("G" & nLig).Value = .Range("C5").Value
    .Range("H" & nLig).Value = .Range("C6").Value
    .Range("H" & nLig).NumberFormat = "#,##0.00 $"
    .Range("J" & nLig).NumberFormat = "#,##0.00 $"
    ' Inscrire la formule
    .Range("J" & nLig).FormulaLocal = Replace("=SI(I#=""Oui"";0;H#)", "#", nLig)
    ' Effacer les valeurs
    .Range("C4:C6").ClearContents
    With .Range("F12:J" & nLig).Validation
      .Delete
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween, Formula1:="=$O$3:$O$4"
      .IgnoreBlank = True
      .InCellDropdown = True
      .InputTitle = ""
      .ErrorTitle = ""
      .InputMessage = ""
      .ErrorMessage = ""
      .ShowInput = True
      .ShowError = True
    End With
  End With
End Sub

A+

Wah ... ok ...

Merci de votre aide.

J'avais créé le fichier "test forum" pour vous soumettre mon problème, mais ce n'est pas sur ce fichier que j'ai besoin de modifier.

Du coup, je vais devoir adapter votre code à mon fichier en question, et cela risque de ne pas aller du fait des différences des cellules, etc...

Pourriez-vous simplement me dire ce que je dois adapter éventuellement sur votre code ? (oups).

EDIT : J'ai ajouté votre code, mais cela n'affecte pas mon fichier ... Je dois faire une erreur :(

Merci de votre aide,

UP ?

Est-ce que qqn pourrait m'aider simplement à adapter ce code ?

(je pense que le plus dur est fait ...).

Merci

Bonjour charlydkn,

Si vous voulez de l'aide supplémentaire, il va falloir nous en dire plus

Adapter quoi par rapport à quoi ?

Qu'est-ce qui ne fonctionne pas ?

En général déposer un fichier anonymisé avec quelques lignes suffit pour tout comprendre

A+

Bonjour,

sur votre fichier exemple, pour faire simple et SI les ajouts de lignes se font toujours à partir du haut c'est à dire entre la ligne d'entête et les données, modifiez simplement la donnée "s'applique à" en $F$11:$F$12.

Lors d'un insertion, le 12 passe en 13 pour insérer la nouvelle ligne 12 mais le début de zone reste en 11 ! La MFC du Oui reste donc fonctionnelle !

@ bientôt

LouReeD

capture

Voici la feuille en question en capture d'écran. (trop compliqué de refaire tout en Excel).

Ce tableau est alimenté par une autre feuille qui fait office de formulaire et qui permet d'alimenter plusieurs feuilles par recopie de données (peu importe).

Une fois ces données collectées, il y a une MEF conditionnelle qui dit : "si dans la cellule "solde réglé" la case est cochée, alors la ligne se met en vert".

=$J5="©"

Sauf que comme les lignes sont insérées en ligne 5 à chaque fois, la mise en forme conditionnelle devient =$J6="©" à la prochaine insertion, =$J7="©" ensuite, etc.etc.

J'aimerais simplement "bloquer " le $J5 dans la MEF conditionnelle.

Le tableur anonyme que j'ai fait ne reproduit pas bien ma demande (et je m'en excuse).

Est-ce plus compréhensible pour vous ?

Merci de votre aide,

ici peut-être ?

c'est dans le "s'applique à" qu'il faut faire la modification...

@ bientôt

LouReeD

Non, j'avais déjà essayé évidemment et cela se décale malgré la notion $F$1 ...

Si la ligne de "s'applique à" correspond à la ligne d'en-tête de votre tableau première colonne et que la dernière correspond à la dernière de votre tableau dernière colonne alors l'insertion se fait au centre de la zone et ceci fonctionne. Mais dans ce cas il ne faut pas de code VBA qui joue avec les MFC...

S'applique à : =A ligne feuille excel de l'entête : H dernière ligne excel du tableau

Formule MFC :=$F1

Où 1 correspond à la ligne excel de l'entête du tableau et cette formule MFC est créé en ayant sélectionné la cellule F1

@ bientôt

LouReeD

Bonjour le fil

@LouReed, pour moi cela ne fonctionnera pas, la MFC sera "cassée"

@Charlydkn, pour moi la solution est simple

Utilisez un tableau structuré et au lieu d'insérer les lignes avant la ligne 5, ajouter les données à la fin de votre TS

Votre MFC suivra ainsi les lignes ajoutées

Sinon il faut passer par VBA

A+

Bonsoir,

et bien pour moi cela fonctionne...

image

voir le fichier avec la seule modification, le 12 en 11 dans "s'applique à" :

9forum-lrd.xlsm (19.73 Ko)

Maintenant je vous laisse à vos code VBA de MFC, et je rejoins BrunoM45 pour ce qui est du tableau structuré.

@ bientôt

LouReeD

Effectivement @LouReeD, cela semble fonctionner.

J'ai mis la MEF conditionnelle sur l'en-tête du tableau et cela semble s'adapter aux insertions de lignes, donc problème résolu.

En revanche, cela me modifie la mise en forme de mes insertions de ligne prévues dans le VBA (très bizarre, car je ne vois pas le lien entre les deux).

Pour le TCD, cela ne m'arrange pas car je veux les réservations les plus récentes en haut et donc l'insertion de ligne me paraît être la meilleure des solutions pour éviter de scroller ...

Merci à vous, vous êtes top !

Bonjour

C'est sur que ça fonctionne, lors d'une insertion Excel agradi les plages, sauf si l'insertion est en dehors de la plage, donc en mettant l'entête dans la plage, ça fonctionne. Il n'est pas utile de cibler autant de lignes comme vous l'avez fait, si votre tableau est vide alors seule l'entête peut avoir la MFC, elle se recopiera sur l'insertion. Mais dans ce cas vous perdez vos liste de choix, donc gzrdez une ligne de données avec les formules et liste de choix et la MFC dur deux ligne :l'entête et la ligne de données parle "s'applique à".

Reste que pour la gestion de plage de cellule sous forme de tableau il est préférable d'utiliser les tableaux structurés ! Et cela simplifie tout.

Merci pour votre retour !

@ bientôt

LouReeD

Bonsoir,

en fait une MFC sur une seule ligne d'entête suffit !

Voir le fichier, la ligne jaune est faite pour voir l'insertion :

En "ent^te4" il y a une liste de choix : oui, non.

@ bientôt

LouReeD

Rechercher des sujets similaires à "mise forme conditionnelle insertion ligne"