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.

10 réponses

1 2
Avatar
Elliac
Bonjour,

Essaie :
"=MAX(If(" & plageChrono &">=""L00000"",VALUE(right(" & plageChrono
&",5)),0))+1"

Camille

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
Daniel
Bonjour.
Essaie range("plageChrono") au lieu de plageChrono.
Cordialement.
Daniel
"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
Comme cela :
Range("A1").FormulaArray =
"=MAX(IF(range("plageChronoContrat")>=""L00000"",VALUE(right(range("pla geChronoContrat"),5)),0))+1"
ça ne marche pas

J'ai aussi essayé :
...=MAX(IF(["plageChronoContrat"]=... la ligne de code passe au
rouge.

...=MAX(IF(range[plageChronoContrat]=...
...=MAX(IF(range(plageChronoContrat)=... tous deux me donnent :
"impossible de définir la propriètè FormulaArray de la classe
range".
Avatar
patrick
Bonjour,
sans garantie car je n'ai pas compris ce que tu veux faire
Range("A1").FormulaArray = "=MAX(IF(range("" & plageChronoContrat &
"")>=""L00000"",VALUE(right(range("" & plageChronoContrat & ""),5)),0))+1"

cette syntaxe passe dans vba, pose la formule dans la cellule A1 mais
celle-ci renvoie #NOM?

@+
patrick



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

Comme cela :
Range("A1").FormulaArray "=MAX(IF(range("plageChronoContrat")>=""L00000"",VALUE(right(range("plageChr
onoContrat"),5)),0))+1"
ça ne marche pas

J'ai aussi essayé :
...=MAX(IF(["plageChronoContrat"]=... la ligne de code passe au
rouge.

...=MAX(IF(range[plageChronoContrat]=...
...=MAX(IF(range(plageChronoContrat)=... tous deux me donnent :
"impossible de définir la propriètè FormulaArray de la classe
range".
Avatar
Le Nordiste
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
Le Nordiste
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
patrick
Re

c'est une histoire de " et de & lors de la concaténation de ta plage nommée
dans la formule matricielle
normalement il faut doubler les "

@+
patrick



"Le Nordiste" a écrit dans le message 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
patrick
je viens de voir que tu utilises range dans la formule
il le prend pour un nom non defini
il faut l'enlever

@+
patrick



"patrick" a écrit dans le message news:
44215278$
Re

c'est une histoire de " et de & lors de la concaténation de ta plage
nommée

dans la formule matricielle
normalement il faut doubler les "

@+
patrick



"Le Nordiste" a écrit dans le message
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
Daniel
A mon humble avis plageChrono n'a pas d'existence hors de la macro. Il faut
utiliser ActiveWorkbook.Names.Add pour le définir.
Daniel
"patrick" a écrit dans le message de
news: 44215278$
Re

c'est une histoire de " et de & lors de la concaténation de ta plage
nommée
dans la formule matricielle
normalement il faut doubler les "

@+
patrick



"Le Nordiste" a écrit dans le message
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
Daniel
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.
1 2