Formule avec variable

Résolu/Fermé
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 - 7 déc. 2015 à 11:49
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 7 déc. 2015 à 20:07
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 12:30
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 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
7 déc. 2015 à 11:53
Voir ici
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 12:22
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 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
Modifié par ccm81 le 7/12/2015 à 13:51
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 14:29
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 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
7 déc. 2015 à 14:35
Sans la partie concernée de ton fichier, difficile de te répondre
0
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 14:47
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 16:47
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 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
7 déc. 2015 à 17:59
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 33
7 déc. 2015 à 18:27
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 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 2 430
7 déc. 2015 à 20:07
juste une petite erreur dans ton code que j'ai corrigé.
Mea culpa, je n'ai pas vérifié

Bonne soirée
0