Formule

Résolu
Bonjour,

Je me suis crée un classeur avec plusieurs formules et une macro toute simple. La macro me permet d'insérer une ligne au dessus de la ligne 3 (en somme, j'insère toujours la ligne 3). Je me suis crée un bouton et chaque fois que j'appuie sur ce bouton, une ligne se crée bien au dessus de la ligne 3, mes mises en forme s'appliquent comme il faut, tout est bon.

Cependant, en N1, je me suis crée une formule afin que la cellule C3 s'affiche toujours en N1. Mais chaque fois que j'insère une ligne avec ma macro, la formule en N1 qui est "=C3" affiche "=C4" . Hors moi je veux qu'elle reste sur C3. J'ai essayé avec "$C3" mais ça fait la même chose.

C'est surement tout bête mais je n'arrive pas à trouver alors je me tourne vers vous. Y'a t-il une formule spécifique ?

Merci d'avance.

3 réponses

  1. Bonjour
    Pour obtenir ce que vous dédirez, il faut que la cellule N1 réagisse à chaque modification de votre feuille.
    Vous pouvez tester ceci, soit vous copiez ce bout de code dans le module de la feuille en question.
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       [N1] = [C3]
    End Sub

    ou bien utilisez une formule
    =SIERREUR(SI(ESTVIDE(INDIRECT("C3"));"";INDIRECT("C3"));"")

    Cdlt
    -1
    1. Bonjour et merci, mais malheureusement, cette formule me renvoie à un chiffre qui n'a aucun rapport avec ce que je veux.

      Merci quand même.
      0
  2. @ch_mika

    Dans ton énoncé initial, tu as écrit : « la formule en N1 qui est "=C3"
    affiche "=C4". Hors moi je veux qu'elle reste sur C3. J'ai essayé avec
    "$C3". »

    Mais ton signe "$" bloque la colonne C ! pour bloquer la ligne 3 : C$3

    Parfois, on a besoin de bloquer la colonne et la ligne : $C$3
    Le signe "$" se met toujours devant ce qu'on veut bloquer.
     
    0
    1. Contributeur
      Bonjour tous
      Dan
      exact, mais le" blocage ne change pas la modification automatique de la formule lors de suppression de ligne

      Ch_mika
      en fait, (ça ne m'était pas venu à l'esprit tout de suite!!) mais inscrivez en N1:
      =INDIRECT("C3")
      le code transforme en adresse le texte entre guillemets et le texte lui ne change pas

      crdlmnt
      0
    2. @Dan

      Oui je le sais mais évidemment, j'avais essayé toutes les sortes de $.

      Merci.
      0
    3. @Vaucluse@Vaucluse

      J'ai essayé mais ça ne fonctionne pas non plus quand je supprime la ligne. La référence "#REF!" s'inscrit de nouveau dans N1.

      Finalement, c'est plus compliqué que je le pensait.

      Merci à toi.
      0
    4. Contributeur
      @ch_mikaLà je ne comprend pas quelle ligne vous supprimez pour que ça ne fonctionne pas
      testé chez moi: si j'écris =INDIRECT("C3") en N1, c'est bien toujours la valeurs de C3 qui reste indiquée si je supprime ou j'ajoute des lignes entre ligne 1 et 3
      Quel est alors votre problème?
      0
    5. @VaucluseJe ne sais pas. En fait j'insère une ligne au dessus de la ligne 3 donc la nouvelle ligne devient la ligne 3 et l'ancienne devient la ligne 4. Ensuite, je supprime la nouvelle ligne 3 ce qui fait que la ligne 4 redevient la ligne 3.
      Votre formule fonctionne quand j'insère une ligne mais pas quand je la supprime donc je ne comprends pas, c'est pourquoi je suis ici, je ne sais pas.

      Et comme je veux que mon tableur ne comporte aucun défaut, je travaille à toutes les éventualités pour corriger certains problèmes qui pourraient arriver.
      0
  3. Contributeur
    Bonsoir
    si vous insérez une ligne dans le champ, de la formule, bloquée ou non, elle va se décaler
    Essayez d'inclure la mise en place de la formule (=C3) dans la macro qui insère la ligne pour la régénérer à chaque insertion.

    Range("N1").Select
    ActiveCell.FormulaR1C1 = "=R[2]C[-11]"


    crdlmnt
    0
    1. Tout d'abord merci,

      Votre formule marche mais malheureusement, si je viens à supprimer la ligne que je viens de créer pour x raison, la valeur de N1 change à nouveau et je me retrouve avec "#REF!" dans la case N1 au lieu de me réafficher la valeur précédent l'insertion de la nouvelle ligne.
      0