Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution" de
la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution" de
la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution" de
la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ "
qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
ps/ il y a des commandes vba bien plus simple pour retrouver cette
adresse que d'utiliser une formule matricielle,
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de code.
Le résultat ressemble à ta proposition à l'exception près de 2 " & _
" qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
ps/ il y a des commandes vba bien plus simple pour retrouver cette
adresse que d'utiliser une formule matricielle,
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de code.
Le résultat ressemble à ta proposition à l'exception près de 2 " & _
" qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
ps/ il y a des commandes vba bien plus simple pour retrouver cette
adresse que d'utiliser une formule matricielle,
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de code.
Le résultat ressemble à ta proposition à l'exception près de 2 " & _
" qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les variables
ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles le
proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre d'exécution,
j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille, en
lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis je
suis allé voir le résultat dans le module de code. Le résultat ressemble à
ta proposition à l'exception près de 2 " & _ " qui correspondent aux retour
à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est sous
la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle soit
une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci
:
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution"
de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les variables
ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles le
proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre d'exécution,
j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille, en
lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis je
suis allé voir le résultat dans le module de code. Le résultat ressemble à
ta proposition à l'exception près de 2 " & _ " qui correspondent aux retour
à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est sous
la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle soit
une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci
:
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution"
de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les variables
ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles le
proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre d'exécution,
j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille, en
lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis je
suis allé voir le résultat dans le module de code. Le résultat ressemble à
ta proposition à l'exception près de 2 " & _ " qui correspondent aux retour
à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est sous
la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle soit
une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à ceci
:
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre "Exécution"
de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple" en
"matricielle", en passant pas le "debug.print" de la fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de 2
" & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe
de discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de 2
" & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe
de discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de 2
" & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler
à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe
de discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille,
en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis
je suis allé voir le résultat dans le module de code. Le résultat
ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille,
en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis
je suis allé voir le résultat dans le module de code. Le résultat
ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans une
feuille. Par contre j'aimerais qu'une variable "AdrPlageImport" (ie)
recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une feuille,
en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ ENTER, puis
je suis allé voir le résultat dans le module de code. Le résultat
ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le bon
résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que
j'ignore. Dans mon classeur (feuille 1), je réserve une plage
"A1:Z1000" que je nomme "Import" (cf. ton "x"). La formule ci-dessus
me renvoit la position de "N° Cde" (qui est censé être le point "haut
/ gauche" de mon tableau. Cette même formule me définie la plage que
je dois copier (ayant pour référence en haut à gauche : "N° Cde" et
pour réf. en bas à droite, la colonne "G" et le nombre de valeurs
contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus
compliqué ;-) ) et il ne me reste plus qu'à (!) mettre en pratique la
formule ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JPbonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou
AdrPlageImport = "$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode
pour alimiter la variable AdrPlageImport autre qu'une formule
matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x &
")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée
dans une feuille. Par contre j'aimerais qu'une variable
"AdrPlageImport" (ie) recueille l'adresse en question. Le but
étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de
2 " & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait
ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de
calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe
de discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est
le bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que
j'ignore. Dans mon classeur (feuille 1), je réserve une plage
"A1:Z1000" que je nomme "Import" (cf. ton "x"). La formule ci-dessus
me renvoit la position de "N° Cde" (qui est censé être le point "haut
/ gauche" de mon tableau. Cette même formule me définie la plage que
je dois copier (ayant pour référence en haut à gauche : "N° Cde" et
pour réf. en bas à droite, la colonne "G" et le nombre de valeurs
contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus
compliqué ;-) ) et il ne me reste plus qu'à (!) mettre en pratique la
formule ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JP
bonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou
AdrPlageImport = "$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode
pour alimiter la variable AdrPlageImport autre qu'une formule
matricielle
isabelle
j-pascal a écrit :
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x &
")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée
dans une feuille. Par contre j'aimerais qu'une variable
"AdrPlageImport" (ie) recueille l'adresse en question. Le but
étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de
2 " & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait
ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de
calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe
de discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est
le bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que
j'ignore. Dans mon classeur (feuille 1), je réserve une plage
"A1:Z1000" que je nomme "Import" (cf. ton "x"). La formule ci-dessus
me renvoit la position de "N° Cde" (qui est censé être le point "haut
/ gauche" de mon tableau. Cette même formule me définie la plage que
je dois copier (ayant pour référence en haut à gauche : "N° Cde" et
pour réf. en bas à droite, la colonne "G" et le nombre de valeurs
contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus
compliqué ;-) ) et il ne me reste plus qu'à (!) mettre en pratique la
formule ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JPbonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou
AdrPlageImport = "$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode
pour alimiter la variable AdrPlageImport autre qu'une formule
matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x &
")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu
sembles le proposer) je saisie : Debug.Print Evaluate(F) dans la
fenêtre d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée
dans une feuille. Par contre j'aimerais qu'une variable
"AdrPlageImport" (ie) recueille l'adresse en question. Le but
étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL
MAJ ENTER, puis je suis allé voir le résultat dans le module de
code. Le résultat ressemble à ta proposition à l'exception près de
2 " & _ " qui correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle
l'est sous la forme "Formula-Array" qui doit correspondre une
conversion en matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour
qu'elle soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait
ressembler à ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de
calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe
de discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est
le bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule
"simple" en "matricielle", en passant pas le "debug.print" de la
fenêtre "exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
peut tu me reppeler à quoi correspond Col_Import et est ce que c'est une
référence glissante ?
isabelle
j-pascal a écrit :Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que j'ignore.
Dans mon classeur (feuille 1), je réserve une plage "A1:Z1000" que je nomme
"Import" (cf. ton "x"). La formule ci-dessus me renvoit la position de "N°
Cde" (qui est censé être le point "haut / gauche" de mon tableau. Cette
même formule me définie la plage que je dois copier (ayant pour référence
en haut à gauche : "N° Cde" et pour réf. en bas à droite, la colonne "G" et
le nombre de valeurs contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus compliqué
;-) ) et il ne me reste plus qu'à (!) mettre en pratique la formule
ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JPbonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
peut tu me reppeler à quoi correspond Col_Import et est ce que c'est une
référence glissante ?
isabelle
j-pascal a écrit :
Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que j'ignore.
Dans mon classeur (feuille 1), je réserve une plage "A1:Z1000" que je nomme
"Import" (cf. ton "x"). La formule ci-dessus me renvoit la position de "N°
Cde" (qui est censé être le point "haut / gauche" de mon tableau. Cette
même formule me définie la plage que je dois copier (ayant pour référence
en haut à gauche : "N° Cde" et pour réf. en bas à droite, la colonne "G" et
le nombre de valeurs contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus compliqué
;-) ) et il ne me reste plus qu'à (!) mettre en pratique la formule
ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JP
bonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :
Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JP
bonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :
Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JP
Bonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" <messages@venir.com> a écrit dans le message de groupe de
discussion : mn.8a937d946700b517.81386@venir.com... Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP
bonjour Jp,
peut tu me reppeler à quoi correspond Col_Import et est ce que c'est une
référence glissante ?
isabelle
j-pascal a écrit :Je guettais ta réponse ;-)
AdrPlageImport = la plage définie par :
'-----------
"DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'------------
sachant que x = Range("Import").Addresse
En fait, dans la feuille 1 de mon classeur, j'importe le contenu d'une
autre feuille (ie Feuille "toto")
Dans feuille "toto", les données sont organisées d'une façon que j'ignore.
Dans mon classeur (feuille 1), je réserve une plage "A1:Z1000" que je nomme
"Import" (cf. ton "x"). La formule ci-dessus me renvoit la position de "N°
Cde" (qui est censé être le point "haut / gauche" de mon tableau. Cette
même formule me définie la plage que je dois copier (ayant pour référence
en haut à gauche : "N° Cde" et pour réf. en bas à droite, la colonne "G" et
le nombre de valeurs contenues dans la dite colonne.
Pour l'intant, ma zone nommée fonctionne (ce n'est pas le plus compliqué
;-) ) et il ne me reste plus qu'à (!) mettre en pratique la formule
ci-dessus pour copier la plage.
D'où ma question :
Comment associer "The big formule" à "AdrPlageImport" ? Pour avoir :
"Range(AdrPlageImport).select" (ou copy)
Pourvu que je sois clair ...
A bientôt ?
JPbonjour Jp,
par exemple si la variable AdrPlageImport = "B1:B10" ou AdrPlageImport =
"$B$1:$B$10"
Range(AdrPlageImport).Select
'ou
Application.GoTo Sheets("Feuil1").Range(AdrPlageImport)
si tu peut mettre le fichier en ligne, je trouverai d'autre méthode pour
alimiter la variable AdrPlageImport autre qu'une formule matricielle
isabelle
j-pascal a écrit :Bonjour Isabelle,
Désolé, je suis de plus en plus perdu.
Je ne devrais poser qu'une seule question à la fois ;-)
A partir de :
'----------
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" &
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'----------
Si "AdrPlageImport" correspond à l'adresse récupérée par la formule
ci-dessus, comment dois-je compléter ce qui suit :
AdrPlageImport = [???]
pour avoir au bout du compte :
.Range(AdrPlageImport).select
En résumé, je désire sélectionner la plage définie par la formule
ci-dessus. Il est possible que je m'emmèle un peu dans les doubles
guillemets ...
@+ ?
JPbonjour Jp,
normalement on mets =Evaluate(mafonction) et c'est tout, mais les
variables ou les plage nommée doivent être transformer sous la forme
" & variable & " et " & Range("A1").Addresse & "
par exemple si import est une plage nommée
x = Range("Import").Addresse
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX(("& x & "=""N° cde"")*" & _
" ROW("& x & ")+1),MAX(("& x & "=""N° cde"")*COLUMN("& x & ")))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
isabelle
j-pascal a écrit :Bonjour,
Désolé, je ne comprends pas.
Si je copie la présente formule dans un module et que (comme tu sembles
le proposer) je saisie : Debug.Print Evaluate(F) dans la fenêtre
d'exécution, j'obtiens "Erreur 2015"
Outre ce pb, je ne souhaite pas que la dite formule soit copiée dans
une feuille. Par contre j'aimerais qu'une variable "AdrPlageImport"
(ie) recueille l'adresse en question. Le but étant d'avoir :
.Range(AdrPlageImport).Copy
En fait, j'ai essayé de resaisir "ma" formule "simple" dans une
feuille, en lançant l'enregistreur de macro, j'ai terminé par CTRL MAJ
ENTER, puis je suis allé voir le résultat dans le module de code. Le
résultat ressemble à ta proposition à l'exception près de 2 " & _ " qui
correspondent aux retour à la ligne.
Le pb, c'est que si la formule est copiée dans une cellule, elle l'est
sous la forme "Formula-Array" qui doit correspondre une conversion en
matricielle.
En résumé (!), que dois-je ajouter à la formule suivante pour qu'elle
soit une formule matricielle dans la module de code :
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
Merci pour ton aide,
JPBonjour J-Pascal,
Dans la fenêtre de l'éditeur de code, ta formule devrait ressembler à
ceci :
Dim F As String
F = "DRESS(ROW(INDIRECT(ADDRESS(MAX((Import=""N° cde"")*" & _
" ROW(Import)+1),MAX((Import=""N° cde"")*COLUMN(Import)))))" & _
",1)&"":""&ADDRESS(MAX(NOT(ISBLANK(Col_Import))*ROW(Col_Import)),7)"
'Si tu veux copier ta formule vers une cellule d'une feuille de calcul
Range("A5").FormulaArray = F
'Si tu veux afficher le résultat de ta formule dans la fenêtre
"Exécution" de la fenêtre VBE
Debug.Print Evaluate(F)
"j-pascal" a écrit dans le message de groupe de
discussion : Bonjour,
La formule suivante fonctionne :
{RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}
[Elle me renvoit dans le cas présent : $A$16:$G$308] (ce qui est le
bon résultat)
L'équivalent (?) en vba :
x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address
[Me renvoit : $A$1:$G$16] ce qui ne correspond pas au résultat
attendu.
Je ne me souviens plus comment on peut "traduire" une formule "simple"
en "matricielle", en passant pas le "debug.print" de la fenêtre
"exécution" !
Merci d'avance pour votre aide,
JP