Formule avec variable

Résolu
julia Namor Messages postés 532 Statut Membre -  
ccm81 Messages postés 11033 Statut Membre -
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. julia Namor Messages postés 532 Statut Membre 33
     
    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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Voir ici
    0
  3. julia Namor Messages postés 532 Statut Membre 33
     
    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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. julia Namor Messages postés 532 Statut Membre 33
     
    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
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Sans la partie concernée de ton fichier, difficile de te répondre
    0
  8. julia Namor Messages postés 532 Statut Membre 33
     
    Désolée

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

    http://www.cjoint.com/c/ELhnUlb7u5A
    0
  9. julia Namor Messages postés 532 Statut Membre 33
     
    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
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  11. julia Namor Messages postés 532 Statut Membre 33
     
    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
  12. ccm81 Messages postés 11033 Statut Membre 2 434
     
    juste une petite erreur dans ton code que j'ai corrigé.
    Mea culpa, je n'ai pas vérifié

    Bonne soirée
    0