Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formulalocal

22 réponses
Avatar
JP
Bonjour,

Comme il existe une fonction vba formulalocal pour mettre en place une form=
ule, Est-ce qu'il existe un equivalent pour mettre ne place des MFC?
J'ai cette MFC =E0 mettre en place:
=3DET(MOYENNE($L13:$Q13)>=3D2;NB($L12:$Q12)>=3DNBVAL($L$11:$Q$11);MOYENNE($=
L12:$Q12)>=3D2)
La plage s'applique de D12:K12

Si c'est possible, je suis preneur d'un exemple.

Merci d'avance


JP

10 réponses

1 2 3
Avatar
isabelle
bonjour JP,

voilà,

With Range("D12:K12")
.FormatConditions.Add Type:=xlExpression,
Formula1:="=ET(MOYENNE($L13:$Q13)>=2;NB($L12:$Q12)>=NBVAL($L$11:$Q$11);MOYENNE($L12:$Q12)>=2)"
.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).StopIfTrue = False

With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
End With


isabelle

Le 2014-04-14 08:28, JP a écrit :
Bonjour,

Comme il existe une fonction vba formulalocal pour mettre en place une formule, Est-ce qu'il existe un equivalent pour mettre ne place des MFC?
J'ai cette MFC à mettre en place:
=ET(MOYENNE($L13:$Q13)>=2;NB($L12:$Q12)>=NBVAL($L$11:$Q$11);MOYENNE($L12:$Q12)>=2)
La plage s'applique de D12:K12

Si c'est possible, je suis preneur d'un exemple.

Merci d'avance


JP

Avatar
JP
Bonjour Isabelle,

Je teste dès ce soir et je reviens vers toi pour te dire.

Merci

JP
Avatar
JP
Isabelle,

Une erreur 1004. Voici le code mis en place pour avoir ton avis. Les with / end with sont dans une boucle.
Les variables K; Deb et Fin me permettent de travailler sur plusieurs plage s.
Les plages sont déclarées en variant au dessus du module.

Merci

JP

extrait du code:

Dim Plage1 as variant, Plage2 as variant, Plage3 as variant.


' calcul des plages nécessaires à l'élaboration des formules
With Sheets("Suivi CCF_BAC")
.Select
.Cells(10, deb + 1) = UV
.Range(Cells(10, deb + 1), Cells(10, fin + 11)).Select

'ecriture de l'unité en D11:K11
.Cells(11, 4 + k) = UV

'ecriture des formules en D12:K12
Plage1 = .Range(Cells(11, deb + 1), Cells(11, fin + 11)).Addr essLocal(RowAbsolute:úlse)
Plage2 = .Range(Cells(12, deb + 1), Cells(12, fin + 11)).Addr essLocal(RowAbsolute:úlse)
Plage3 = .Range(Cells(13, deb + 1), Cells(13, fin + 11)).Addr essLocal(RowAbsolute:úlse)

.Cells(12, 4 + k).FormulaLocal = "=SI(SOMME(" & Plage3 & ") =0;"""";MOYENNE(" & Plage3 & "))"

End With


With Sheets("Suivi CCF_BAC").Cells(12, 4 + k)
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET (MOYENNE(" & Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 & ");M OYENNE(" & Plage2 & ")>=2)"
.FormatConditions(Selection.FormatConditions.Count).SetFirstPr iority
.FormatConditions(1).StopIfTrue = False

With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
End With

k = k + 1
deb = fin + 11
Avatar
MichD
Bonjour,

Ceci ne génère pas d'erreur :

Ceci étant dit, je n'ai pas vu toute la boucle et les valeurs des
variables dans la procédure.

'---------------------------------------
Dim Plage1 As Variant, Plage2 As Variant, Plage3 As Variant
Deb = 1: Fin = 10
' calcul des plages nécessaires à l'élaboration des formules
With Sheets("Feuil1") '("Suivi CCF_BAC")
.Select
.Cells(10, Deb + 1) = UV
.Range(Cells(10, Deb + 1), Cells(10, Fin + 11)).Select

'ecriture de l'unité en D11:K11
.Cells(11, 4 + k) = UV

'ecriture des formules en D12:K12
Plage1 = .Range(Cells(11, Deb + 1), Cells(11, Fin +
11)).AddressLocal(RowAbsolute:úlse)
Plage2 = .Range(Cells(12, Deb + 1), Cells(12, Fin +
11)).AddressLocal(RowAbsolute:úlse)
Plage3 = .Range(Cells(13, Deb + 1), Cells(13, Fin +
11)).AddressLocal(RowAbsolute:úlse)
.Cells(12, 4 + k).FormulaLocal = "=SI(SOMME(" & Plage3 &
")=0;"""";MOYENNE(" & Plage3 & "))"
End With

With Sheets("Feuil1").Cells(12, 4 + k) ' Sheets("Suivi
CCF_BAC").Cells(12, 4 + k)
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET(MOYENNE(" &
_
Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 &
");MOYENNE(" & Plage2 & ")>=2)"
.FormatConditions(.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).StopIfTrue = False

With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
End With
k = k + 1
Deb = Fin + 11
'---------------------------------------
Avatar
JP
Bjr Denis,

Pas cool le code est long. Le voici tout de même.

JP
Option Explicit
Option Private Module
' Déclaration des variables pour le module parametrage
Dim b As Byte, k As Byte
Dim nbCompBac As Integer
Dim nbU_Bac As Integer
Dim UV As Variant
Dim i As Integer
Dim ux As Integer
Dim deb As Integer
Dim masque As Integer
Dim fin As Variant
Dim Plage1 As Variant, Plage2 As Variant, Plage3 As Variant



Sub paramétrage()

'Compte le nombre de compétences BAC pro
nbCompBac = Application.CountA(Sheets("Parametrage").Range("E6:E60"))

' test pour le bon foctionnnement
If nbCompBac > 50 Then
MsgBox "Désolé, mais le logiciel ne peut gérer que 50 compétences au maximum!"
Exit Sub
End If

' remise à zéro de certaines variables
k = 0 ' variable d'écriture des Unités sur la plage BD10:BL10

Application.ScreenUpdating = False 'désactive l'écran
Application.EnableEvents = False
'----------------------------------------------
' TRI des compétences BAC par Unité croissantes
'
ActiveWorkbook.Worksheets("Parametrage").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Parametrage").Sort.SortFields.Add Key:=Ran ge( _
"G6:G60"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOpti on:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Parametrage").Sort
.SetRange Range("E6:G60")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

'---------------------------------------------
' Efface les plages BAC devant recevoir les données
' Efface les plages de l'onglet suiviccf
With Sheets("Suivi CCF_BAC")
.Range("D10:BM72").ClearContents ' efface les compétences
.Range("L11:BM11").ClearComments ' efface les commentaires des codes compétence
.Range("L1:BD1").ClearContents ' efface les formules
.Range("D10:BM72").Font.ColorIndex = 0 'police en noir

End With

' Efface les plages de l'onglet PFMP
With Sheets("PFMP")
.Range("GR4:GT63").ClearContents ' efface les compétences bac
.Range("F4:H63").ClearContents ' efface les compétences
If MsgBox("Voulez-vous supprimer les adresses entreprises?", vb YesNo) = vbYes Then
.Range("I3:GP60").ClearContents
End If
End With


' Ecriture des codes compétences BAC PRO et le libellé des compétence s feuille PFMP


'Ecriture des codes et des libellés compétences dans la feuille PFMP
For i = 1 To nbCompBac
Sheets("PFMP").Cells(i + 3, 6) = Sheets("Parametrage").Cells(i + 5, 5 ).Value
Sheets("PFMP").Cells(i + 3, 7) = Sheets("Parametrage").Cells(i + 5, 6 ).Value
Next i


' Ecriture des codes dans la feuille Suivi CCF BAC
For i = 1 To nbCompBac + 3
Sheets("Suivi CCF_BAC").Cells(11, i + 11) = Sheets("Parametrage").Cel ls(i + 5, 5).Value
Next i

' Ecriture des commentaires BAC
Dim X As Variant, c As Range
With Worksheets("Parametrage")

For Each c In .Range("E6:E" & nbCompBac + 5)
With Worksheets("Suivi CCF_BAC")
.Unprotect
X = Application.Match(c, .Range(.Cells(11, 12), .Cells(11, nb CompBac + 12)), 0)
If Not IsError(X) Then
With .Range(.Cells(11, 12), .Cells(11, nbCompBac + 12))(1, X)
.ClearComments
.AddComment CStr(c.Offset(, 1).Value)
End With
Else
Err.Clear
End If
.Protect
End With
Next

End With

' --------------------------------------------------
'Ecriture des Unités, centré sur plusieurs colonnes et mise en place de s formules

'Ecriture des unités
' donne les valeurs de base aux variables Ux et deb
ux = 0: deb = 11: k = 0

'compte le nombre d'unité pour le bac
nbU_Bac = Application.CountA(Sheets("Parametrage").Range("Unites_ Bac"))
' boucle sur le nb d'unité en BAC
For i = 1 To nbU_Bac
UV = Sheets("parametrage").Cells(i + 5, 2).Value
' Teste les unités BAC une par une
For b = 6 To 60
With Sheets("parametrage")
If .Cells(b, 7).Value = "" Then Exit For
If .Cells(b, 7).Value = UV Then
fin = .Cells(b, 4).Value
End If
End With

Next b

' calcul des plages nécesaires à l'élaboration des formules
With Sheets("Suivi CCF_BAC")
.Select
.Cells(10, deb + 1) = UV
.Range(Cells(10, deb + 1), Cells(10, fin + 11)).Select

'ecriture de l'unité en D11:K11
.Cells(11, 4 + k) = UV

'ecriture des formules en D12:K12
Plage1 = .Range(Cells(11, deb + 1), Cells(11, fin + 11)).Addr essLocal(RowAbsolute:úlse)
Plage2 = .Range(Cells(12, deb + 1), Cells(12, fin + 11)).Addr essLocal(RowAbsolute:úlse)
Plage3 = .Range(Cells(13, deb + 1), Cells(13, fin + 11)).Addr essLocal(RowAbsolute:úlse)

.Cells(12, 4 + k).FormulaLocal = "=SI(SOMME(" & Plage3 & ") =0;"""";MOYENNE(" & Plage3 & "))"

End With


With Sheets("Suivi CCF_BAC").Cells(12, 4 + k)
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET (MOYENNE(" & Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 & ");M OYENNE(" & Plage2 & ")>=2)"
.FormatConditions(Selection.FormatConditions.Count).SetFirstPr iority
.FormatConditions(1).StopIfTrue = False

With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With
End With

k = k + 1
deb = fin + 11
Next i

' recopie les formules dans le Ux
Range("D12:K13").Select
Selection.AutoFill Destination:=Range("D12:K63"), Type:=xlF illDefault
Avatar
MichD
Es-tu certain que toute la procédure a été copiée?
Pourquoi alors ne se termine-t-elle pas par "End Sub" ?

As-tu identifié la ligne de code qui te pose problème?
En exécutant la procédure pas à pas, tu devrais trouver où
cela bloque.... Si cette ligne est connue, pourrais-tu nous
dire de quelle ligne il s'agit?

Si tu ne peux pas nous dire de quelle ligne de code il s'agit,
Je ne peux pas reproduire tout ton environnement de travail.

Est-ce possible que tu publies ton fichier et utilisant Cjoint.com.
Tu nous retournes ici l'adresse que tu obtiendras.
Avatar
isabelle
bonjour JP,

sur quel ligne se produit l'erreur 1004?

isabelle

Le 2014-04-14 13:06, JP a écrit :
Isabelle,

Une erreur 1004. Voici le code mis en place pour avoir ton avis. Les with /end with sont dans une boucle.
Les variables K; Deb et Fin me permettent de travailler sur plusieurs plages.
Les plages sont déclarées en variant au dessus du module.

Merci

JP
Avatar
GL
Le 14/04/2014 20:29, JP a écrit :
Bjr Denis,

Pas cool le code est long.



Normal : c'est du BASIC ! ;-)
Avatar
JP
bonjour Isabelle et Denis,

Denis le reste de code n'a aucun lien avec le problème. La suite du code masque des colonnes et copie des plages de cellule. C'est pourquoi il n'y a pas de end sub. Quant à publier le fichier ça devient difficile tellem ent il y a de liens entre les feuilles.

Isabelle et Denis, en effectuant la macro pas à pas, l'erreur se produit sur la ligne:
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET(MOYENNE(" & Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 & ");MOYENNE(" & Pl age2 & ")>=2)"

C'est une erreur 1004.

Merci à vous deux.

JP
Avatar
isabelle
bonjour JP,

essaie comme ça,
'_________________________________________________________________________________________
With Sheets("Feuil1") ' Sheets("Suivi CCF_BAC").Cells(12, 4 + k)
With .Cells(12, 4 + k)
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET(MOYENNE(" & _
Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 & ");MOYENNE(" &
Plage2 & ")>=2)"
.FormatConditions(.FormatConditions.Count).SetFirstPriority
.FormatConditions(1).StopIfTrue = False

With .FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
End With

End With
End With
'_________________________________________________________________________________________

isabelle

Le 2014-04-14 23:17, JP a écrit :
bonjour Isabelle et Denis,

Denis le reste de code n'a aucun lien avec le problème. La suite du code masque des colonnes et copie des plages de cellule.


C'est pourquoi il n'y a pas de end sub. Quant à publier le fichier ça devient
difficile tellement il y a de liens entre les feuilles.

Isabelle et Denis, en effectuant la macro pas à pas, l'erreur se produit sur la ligne:
.FormatConditions.Add Type:=xlExpression, Formula1:="=ET(MOYENNE(" & Plage3 & ")>=2;NB(" & Plage2 & ")>=NBVAL(" & Plage1 & ");MOYENNE(" & Plage2 & ")>=2)"

C'est une erreur 1004.

Merci à vous deux.

JP

1 2 3