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
A voir également:

11 réponses

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
ccm81 Messages postés 11033 Statut Membre 2 433
 
Voir ici
0
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
ccm81 Messages postés 11033 Statut Membre 2 433
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
ccm81 Messages postés 11033 Statut Membre 2 433
 
Sans la partie concernée de ton fichier, difficile de te répondre
0
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
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
ccm81 Messages postés 11033 Statut Membre 2 433
 
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
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
ccm81 Messages postés 11033 Statut Membre 2 433
 
juste une petite erreur dans ton code que j'ai corrigé.
Mea culpa, je n'ai pas vérifié

Bonne soirée
0