OVH Cloud OVH Cloud

formule matricielle et plage en VB

15 réponses
Avatar
Le Nordiste
Bonjour tertous,

Durant une proc=E9dure VB, je d=E9sire placer en A1 la formule
matricielle :

'formule matricielle de l'incr=E9ment du maxi d=E9j=E0 pr=E9sent dans la
plage
Range("A1").FormulaArray =3D
"=3DMAX(If(G4:G1747>=3D""L00000"",VALUE(right(G4:G1747,5)),0))+1"


Formule o=F9 G4:G1747 est la plage d'o=F9 on veut extraire le maxi d'une
chaine commen=E7ant par L suivi de 5 chiffres.
Jusque l=E0 =E7a marche.

Je d=E9finie une plage "plageChrono" qui dynamiquement reprends les
valeurs de G4 =E0 Gxxxx, xxxx =E9tant la derni=E8re cellule utilis=E9e
de la colonne G. Je pense na=EFvement que ma formule devient

Range("A1").FormulaArray =3D
"=3DMAX(If(plageChrono>=3D""L00000"",VALUE(right(plageChrono,5)),0))+1"

Et =E7a ne marche pas ? Pourquoi ????


Le Nordiste.

5 réponses

1 2
Avatar
Daniel
Désolé :
Range("A1").FormulaArray = _
"=MAX(If(plageChrono>=""L00000"",VALUE(right(plageChrono)),0))+1"
Daniel
"Daniel" a écrit dans le message de news:
eH$
Essaie :
Sub test()
Dim Plage As Range
Set Plage = ActiveSheet.Range("G4:G" & _
ActiveSheet.Range("G65356").End(xlUp).Row)
ActiveWorkbook.Names.Add Name:="plageChrono", RefersTo:="Feuil1!" &
Plage.Address
Range("A1").FormulaArray = _
"=MAX(If(G4:G1747>=""L00000"",VALUE(right(plageChrono)),0))+1"
End Sub
Daniel
"Le Nordiste" a écrit dans le message de
news:
Je reformule mon Pb :
Durant une procédure VB, je désire placer en A1 la formule
matricielle :

Range("A1").FormulaArray > "=MAX(If(G4:G1747>=""L00000"",VALUE(right(G4:G1747,5)),0))+1"

Formule où G4:G1747 est la plage d'où on veut extraire le maxi d'une
chaine commençant par L suivi de 5 chiffres.
Jusque là ça marche.

=>Comme des valeurs sont ajoutées à mon tableau donc à la colonne G
Je définie une plage "plageChrono" par ce code :

Set plageChrono = ActiveSheet.Range("G4:G" &
ActiveSheet.Range("G65356").End(xlUp).Row)

qui dynamiquement reprends toutes les valeurs de G4 à la dernière
cellule utilisée de la colonne G.
Je pense naïvement que ma formule devient

Range("A1").FormulaArray > "=MAX(If(plageChrono>=""L00000"",VALUE(right(plageChrono,5)),0))+1"

et là ça ne marche pas. Mon Pb peut s'exprimer par :

Comment faire pour remplacer une plage G4:G1747 par une plage nommée ?

Le Nordiste.




Avatar
michdenis
Bonjour Le Nordiste,

Dans l'exemple suivant, toto est le nom de la plage nommée.

Dim R As String
R = Range("toto").Parent.Name & "!" & Range("Toto").Address

Range("b1").FormulaArray = _
"=MAX(If(" & R & ">=""L00000"",VALUE(right(" & R & ",5)),0))+1"


Salutations!





"Le Nordiste" a écrit dans le message de news:

Bonjour tertous,

Durant une procédure VB, je désire placer en A1 la formule
matricielle :

'formule matricielle de l'incrément du maxi déjà présent dans la
plage
Range("A1").FormulaArray "=MAX(If(G4:G1747>=""L00000"",VALUE(right(G4:G1747,5)),0))+1"


Formule où G4:G1747 est la plage d'où on veut extraire le maxi d'une
chaine commençant par L suivi de 5 chiffres.
Jusque là ça marche.

Je définie une plage "plageChrono" qui dynamiquement reprends les
valeurs de G4 à Gxxxx, xxxx étant la dernière cellule utilisée
de la colonne G. Je pense naïvement que ma formule devient

Range("A1").FormulaArray "=MAX(If(plageChrono>=""L00000"",VALUE(right(plageChrono,5)),0))+1"

Et ça ne marche pas ? Pourquoi ????


Le Nordiste.
Avatar
patrick
désolé pour toutes les betises que j'ai pu enoncer
plus haut j'etais parti sur un evaluate

@+
patrick

"michdenis" a écrit dans le message news:

Bonjour Le Nordiste,

Dans l'exemple suivant, toto est le nom de la plage nommée.

Dim R As String
R = Range("toto").Parent.Name & "!" & Range("Toto").Address

Range("b1").FormulaArray = _
"=MAX(If(" & R & ">=""L00000"",VALUE(right(" & R & ",5)),0))+1"


Salutations!





"Le Nordiste" a écrit dans le message de
news:


Bonjour tertous,

Durant une procédure VB, je désire placer en A1 la formule
matricielle :

'formule matricielle de l'incrément du maxi déjà présent dans la
plage
Range("A1").FormulaArray > "=MAX(If(G4:G1747>=""L00000"",VALUE(right(G4:G1747,5)),0))+1"


Formule où G4:G1747 est la plage d'où on veut extraire le maxi d'une
chaine commençant par L suivi de 5 chiffres.
Jusque là ça marche.

Je définie une plage "plageChrono" qui dynamiquement reprends les
valeurs de G4 à Gxxxx, xxxx étant la dernière cellule utilisée
de la colonne G. Je pense naïvement que ma formule devient

Range("A1").FormulaArray > "=MAX(If(plageChrono>=""L00000"",VALUE(right(plageChrono,5)),0))+1"

Et ça ne marche pas ? Pourquoi ????


Le Nordiste.




Avatar
michdenis
Bonjour Patrick,

Cette syntaxe est aussi bonne ...il faut seulement faire
attention à ce que tes plages soient de même dimension (même nombre de lignes)

Range("b1").FormulaArray = _
"=MAX(If(toto>=""L00000"",VALUE(right(toto,5)),0))+1"



Salutations!


"patrick" a écrit dans le message de news: 44215bbd$
désolé pour toutes les betises que j'ai pu enoncer
plus haut j'etais parti sur un evaluate

@+
patrick

"michdenis" a écrit dans le message news:

Bonjour Le Nordiste,

Dans l'exemple suivant, toto est le nom de la plage nommée.

Dim R As String
R = Range("toto").Parent.Name & "!" & Range("Toto").Address

Range("b1").FormulaArray = _
"=MAX(If(" & R & ">=""L00000"",VALUE(right(" & R & ",5)),0))+1"


Salutations!





"Le Nordiste" a écrit dans le message de
news:


Bonjour tertous,

Durant une procédure VB, je désire placer en A1 la formule
matricielle :

'formule matricielle de l'incrément du maxi déjà présent dans la
plage
Range("A1").FormulaArray > "=MAX(If(G4:G1747>=""L00000"",VALUE(right(G4:G1747,5)),0))+1"


Formule où G4:G1747 est la plage d'où on veut extraire le maxi d'une
chaine commençant par L suivi de 5 chiffres.
Jusque là ça marche.

Je définie une plage "plageChrono" qui dynamiquement reprends les
valeurs de G4 à Gxxxx, xxxx étant la dernière cellule utilisée
de la colonne G. Je pense naïvement que ma formule devient

Range("A1").FormulaArray > "=MAX(If(plageChrono>=""L00000"",VALUE(right(plageChrono,5)),0))+1"

Et ça ne marche pas ? Pourquoi ????


Le Nordiste.




Avatar
Le Nordiste
Bonsoir,

Merci à tous et en particulier à MichDenis pour le " & R & " qui
montre qu'il faut ici une chaine.

J'ai un peu travailler l'idée et suis arrivé grace à votre aide à
tous à ceci :


'DÉFINITION DE LA COLONNE G:G COMME 'plageChronoContrat'
Set plageChronoContrat = ActiveSheet.Range("G4:G" &
ActiveSheet.Range("G65356").End(xlUp).Row)

'CALCUL DU 'CHRONO CONTRAT' dans une cellule brouillon 'IV1'
strPlageChronoContrat = plageChronoContrat.Parent.Name & "!" &
plageChronoContrat.Address
Range("IV1").FormulaArray = "=MAX(If(" & strPlageChronoContrat &
">=""L00000"",VALUE(right(" & strPlageChronoContrat & ",5)),0))+1"
Application.Calculation = xlCalculationAutomatic
'mise au format Lccccc
strChrono = "L" & Format(Right(Range("IV1").Value,
Len(Range("IV1").Value)), "00000")

Et en plus c'est drolement rapide même pour traiter 1800 lignes.

À bientôt et bonsoir à tous.

Le Nordiste
1 2