Formule avec variable

Résolu
Bonjour à toutes et a tous

Je bute sur comment mettre une variable dans cette formule ci dessus

L7 = SI(F7<MAX($C11:$C25);F7+1;1)"

En fait L7 est une variable mais restera toujours sur la ligne 7 ( ça peut etre i7,K7,J7....): Par vba j'y colle la formule .

Seulement

F7 DOIT toujours etre la 8 éme cellule sur la gauche de L7.
(en vba on dirait .Offset(0, -7).

Comment incruster cette variable de F7 dans la formule.
J'ai essayé sans succes la fonction "décaler"

merci beaucoup de votre aide

11 réponses

  1. L'erreur est réglée en modifiant la boucle k
    Public Sub OK()
    Dim adr1 As String, adr2 As String, f As String, k As Long
    Dim Tadr()
    'Tadr = Array("L7", "M8", "N9", "L10", "O11")
    Tadr = Array("L7")

    For k = 1 To 1
    adr1 = Tadr(k)
    adr2 = Range(adr1).Offset(0, -7).Address
    f = "= SI(" & adr2 & "<MAX($C$11:$C$25);" & adr2 & "+1;1)"
    Range(adr1).FormulaLocal = f
    Next k
    End Sub
    1
    1. Merci ccm81

      Etant donné que je n'ai besoin que de la cellule L7
      j'ai modifié ainsi

      Public Sub OK()
      Dim adr1 As String, adr2 As String, f As String, k As Long
      Dim Tadr()
      Tadr = Array("L7")

      For k = 1 To 5
      adr1 = Tadr(k)
      adr2 = Range(adr1).Offset(0, -7).Address
      f = "= SI(" & adr2 & "<MAX($C$11:$C$25);" & adr2 & "+1;1)"
      Range(adr1).FormulaLocal = f
      Next k
      End Sub


      Mais j'obtiens l'erreur "l'indice n'appartient pas à la sélection"

      2éme souci: la cellule cible " $E$7" est figée donc impossible à étirer.

      merci à toi
      0
      1. En fait L7 est une variable mais restera toujours sur la ligne 7 ( ça peut etre i7,K7,J7....): ?
        Etant donné que je n'ai besoin que de la cellule L7
        Pas très clair !

        ceci suffira

        Public Sub OK()
        Dim adr1 As String, adr2 As String, f As String
        adr1 = "L7"
        adr2 = Range(adr1).Offset(0, -7).Address
        f = "= SI(" & adr2 & "<MAX($C$11:$C$25);" & adr2 & "+1;1)"
        Range(adr1).FormulaLocal = f
        End Sub


        Cdlmnt
        0
        1. bonjour

          Je vous joins le code en entier qui me sert à
          1- repérer le lundi de la ligne des jours
          2- Coller la formule sur la 2éme cellulle au dessus en faisant intervenir la 8éme cellule à gauche et le Max de la plage (C11:C25)
          3- D'étirer la formule jusqu'à EI7
          4- de fusionner toutes les cellulles contigues contenant les memes valeurs

          Ca bloque au niveau de la formule

          Merci de votre aide

          Sub Odogas()

          With Sheets("plan")

          Range("A7:ei7").ClearContents
          Range("A7:ei7").UnMerge
          Dim plage As Range
          Dim ror As Range
          Dim clouc As Range
          Dim plouf As Range
          For Each plage In Range("$A$9:$p$9")
          With plage
          If plage.Value = "LU" Then
          Set plage = .Offset(0, 0)
          'Set ror = plage.Offset(-2, 0)
          'Set clouc = plage.Offset(2, 0)
          Set plouf = plage.Offset(-2, -7)

          ror.FormulaLocal = "=SI(" & plouf & "<MAX($C11:$C25);" & plouf & "+1;1)"

          ror.AutoFill Destination:=Range(ror.Address & ":ei7"), Type:=xlFillDefault
          Range(ror.Address & ":ei7").Font.ThemeColor = xlThemeColorDark1
          Range(ror.Address & ":ei7").Font.Color = -16776961

          End If
          End With
          Next

          Dim ii As Long
          For ii = .Cells(7, .Columns.Count).End(xlToLeft).Column To 2 Step -1

          If UCase(.Cells(7, ii)) = UCase(.Cells(7, ii - 1)) Then
          .Cells(7, ii - 1) = ""
          .Range(Cells(7, ii), Cells(7, ii - 1)).Merge
          .Range(Cells(7, ii), Cells(7, ii - 1)).Font.ColorIndex = xlAutomatic
          '.Range(Cells(7, ii), Cells(7, ii - 1)).HorizontalAlignment = xlCenter
          End If
          Next ii
          end sub
          0
          1. Sans la partie concernée de ton fichier, difficile de te répondre
            0
            1. Désolée

              le fichier ci dessous ; macro déclenchée par le bouton

              http://www.cjoint.com/c/ELhnUlb7u5A
              0
              1. en étudiant bien ta formule , j'ai réussi à trouver le bon code

                Dim adr1 As String, adr2 As String, f As String
                adr1 = ror.Address
                adr2 = Range(ror.Address).Offset(0, -7).Address
                f = "= SI(" & adr2 & "<MAX($C$11:$C$25);" & adr2 & "+1;1)"
                Range(adr1).FormulaLocal = f


                ce qui donne sur le tableau "= SI($E$7<MAX($C$11:$C$25);$E$7+1;1)"

                mais je ne peux pas l'étirer à cause du $E$7 fixé par la macro

                Une idée pour "défixer" la cellule dans la macro?

                cordialement
                0
                1. J'ai un peu de mal à comprendre la logique de ton organisation.
                  Si j'ai compris, la formule f est destinée à être copiée vers la droite, il suffit donc d'enlever le 1° $ à adr2

                  adr2 = Range(ror.Address).Offset(0, -7).Address
                  adr2=right(adr2,len(adr2-1))


                  Cdlmnt
                  0
                  1. Génialissime !!!!!!
                    la fonction len() a réglé le probléme.
                    En fait tu as tout bien compris
                    juste une petite erreur dans ton code que j'ai corrigé.
                    tout marche

                    merci à toi

                    Dim adr1 As String, adr2 As String, f As String

                    adr1 = ror.Address
                    adr2 = Range(ror.Address).Offset(0, -7).Address
                    adr2 = Right(adr2, Len(adr2) - 1)
                    f = "= SI(" & adr2 & "<MAX($C$11:$C$25);" & adr2 & "+1;1)"
                    Range(ror.Address & ":ei7").FormulaLocal = f
                    0
                    1. juste une petite erreur dans ton code que j'ai corrigé.
                      Mea culpa, je n'ai pas vérifié

                      Bonne soirée
                      0