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. juste une petite erreur dans ton code que j'ai corrigé.
    Mea culpa, je n'ai pas vérifié

    Bonne soirée
    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. 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. 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. Désolée

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

            http://www.cjoint.com/c/ELhnUlb7u5A
            0
            1. Sans la partie concernée de ton fichier, difficile de te répondre
              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. 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. 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