Génération en VBA de plages matricielles (ou TABLE()) - bis
5 réponses
Pascal Engelmajer
Salut à tous,
J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait
un grand service
j'ai une série de fichiers texte contenant les éléments de la plage
matricielle à créer, plage dont la dimension varie du simple au décuple de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes.
ex.
"A2:A6";"B1:B4";"=A2:A6*B1:B4"
"1";"2";"3";"4";"5"
"1";"2";"3";"4"
Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4.
Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais
impossible d'activer le mode matriciel
Voici le test qui confirme mes soucis :
Sub copie()
Dim cell As Range
For Each cell In Sheets(1).UsedRange
ad = cell.Address
if cell.HasArray then Sheets(2).Range(ad).FormulaArray =
cell.FormulaArray
Next cell
End Sub
Cette procédure est simple. Elle montre que la copie de la plage matricielle
ne donne pas le résultat escompté...
et la fonction matricielle TABLE() provoque la célèbre erreur 1004...
Comment résoudre ce problème qui m'interdit cette façon simple de générer
des tables.
Merci
---
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FxM
Bonjour Pascal,
Puisqu'il en faut en qui dise une bêtise, je me dévoue :o)
Une erreur de recopie dans le nom des feuilles [sheets(2) vs sheets(1)] ? Ou comment Excel devine que le résultat en sheets(2) est du aux données de sheets(1) ?
@+ FxM
Pascal Engelmajer wrote:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5 lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Bonjour Pascal,
Puisqu'il en faut en qui dise une bêtise, je me dévoue :o)
Une erreur de recopie dans le nom des feuilles [sheets(2) vs
sheets(1)] ? Ou comment Excel devine que le résultat en sheets(2) est
du aux données de sheets(1) ?
@+
FxM
Pascal Engelmajer wrote:
Salut à tous,
J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait
un grand service
j'ai une série de fichiers texte contenant les éléments de la plage
matricielle à créer, plage dont la dimension varie du simple au décuple de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes.
ex.
"A2:A6";"B1:B4";"¢:A6*B1:B4"
"1";"2";"3";"4";"5"
"1";"2";"3";"4"
Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4.
Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais
impossible d'activer le mode matriciel
Voici le test qui confirme mes soucis :
Sub copie()
Dim cell As Range
For Each cell In Sheets(1).UsedRange
ad = cell.Address
if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray
Next cell
End Sub
Cette procédure est simple. Elle montre que la copie de la plage matricielle
ne donne pas le résultat escompté...
et la fonction matricielle TABLE() provoque la célèbre erreur 1004...
Comment résoudre ce problème qui m'interdit cette façon simple de générer
des tables.
Merci
---
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
Puisqu'il en faut en qui dise une bêtise, je me dévoue :o)
Une erreur de recopie dans le nom des feuilles [sheets(2) vs sheets(1)] ? Ou comment Excel devine que le résultat en sheets(2) est du aux données de sheets(1) ?
@+ FxM
Pascal Engelmajer wrote:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5 lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Daniel.M
Salut Pascal,
Je ne comprends pas ton problème. :-(
Si tu veux comme résultat un tableau de 5lignes * 4colonnes, pourquoi n'aurais-tu pas
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu savais faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le résultat désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" wrote in message news:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5 lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Salut Pascal,
Je ne comprends pas ton problème. :-(
Si tu veux comme résultat un tableau de 5lignes * 4colonnes, pourquoi
n'aurais-tu pas
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu savais
faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un
TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le résultat
désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" <pascal.engelmajer@ilyapa_spam.net> wrote in message
news:eSf3TSlOEHA.2920@tk2msftngp13.phx.gbl...
Salut à tous,
J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait
un grand service
j'ai une série de fichiers texte contenant les éléments de la plage
matricielle à créer, plage dont la dimension varie du simple au décuple de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes.
ex.
"A2:A6";"B1:B4";"¢:A6*B1:B4"
"1";"2";"3";"4";"5"
"1";"2";"3";"4"
Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4.
Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais
impossible d'activer le mode matriciel
Voici le test qui confirme mes soucis :
Sub copie()
Dim cell As Range
For Each cell In Sheets(1).UsedRange
ad = cell.Address
if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray
Next cell
End Sub
Cette procédure est simple. Elle montre que la copie de la plage matricielle
ne donne pas le résultat escompté...
et la fonction matricielle TABLE() provoque la célèbre erreur 1004...
Comment résoudre ce problème qui m'interdit cette façon simple de générer
des tables.
Merci
---
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu savais faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le résultat désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" wrote in message news:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5 lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Pascal Engelmajer
Salut Daniel, Merci beaucoup
Je ne comprends pas ton problème. :-( peut-être, mais tu me fournis une solution.
en fait c'est le resize qui me manquait voici ma procédure de test. Option Explicit Sub test() Dim cell As Range Dim f As String Dim ad As String Dim noLigD As Integer Dim noLigF As Integer Dim nocolD As Integer Dim noColF As Integer Dim flD As Boolean For Each cell In Sheets(1).UsedRange ad = cell.Address If cell.HasArray Then f = cell.FormulaArray If Not flD Then flD = True noLigD = cell.Row nocolD = cell.Column Else noLigF = cell.Row noColF = cell.Column End If Else Sheets(2).Range(ad).Value = cell.Value End If Next cell Debug.Print noLigD & " " & noLigF & " " & nocolD & " " & noColF & " " Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1" End Sub mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
-- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "Daniel.M" a écrit dans le message de news:
Salut Pascal,
Je ne comprends pas ton problème. :-(
Si tu veux comme résultat un tableau de 5lignes * 4colonnes, pourquoi n'aurais-tu pas
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu savais
faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le résultat
désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" wrote in message news:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait
un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle
ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer
des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Salut Daniel,
Merci beaucoup
Je ne comprends pas ton problème. :-(
peut-être, mais tu me fournis une solution.
en fait c'est le resize qui me manquait
voici ma procédure de test.
Option Explicit
Sub test()
Dim cell As Range
Dim f As String
Dim ad As String
Dim noLigD As Integer
Dim noLigF As Integer
Dim nocolD As Integer
Dim noColF As Integer
Dim flD As Boolean
For Each cell In Sheets(1).UsedRange
ad = cell.Address
If cell.HasArray Then
f = cell.FormulaArray
If Not flD Then
flD = True
noLigD = cell.Row
nocolD = cell.Column
Else
noLigF = cell.Row
noColF = cell.Column
End If
Else
Sheets(2).Range(ad).Value = cell.Value
End If
Next cell
Debug.Print noLigD & " " & noLigF & " " & nocolD & " " & noColF & " "
Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD +
1).FormulaArray = f '"¢:A6*B1:F1"
End Sub
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news: OSTHH7tOEHA.3312@tk2msftngp13.phx.gbl...
Salut Pascal,
Je ne comprends pas ton problème. :-(
Si tu veux comme résultat un tableau de 5lignes * 4colonnes, pourquoi
n'aurais-tu pas
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu
savais
faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un
TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le
résultat
désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" <pascal.engelmajer@ilyapa_spam.net> wrote in message
news:eSf3TSlOEHA.2920@tk2msftngp13.phx.gbl...
Salut à tous,
J'ai déjà évoqué ce problème... une solution voire une idée de me
rendrait
un grand service
j'ai une série de fichiers texte contenant les éléments de la plage
matricielle à créer, plage dont la dimension varie du simple au décuple
de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes.
ex.
"A2:A6";"B1:B4";"¢:A6*B1:B4"
"1";"2";"3";"4";"5"
"1";"2";"3";"4"
Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4.
Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais
impossible d'activer le mode matriciel
Voici le test qui confirme mes soucis :
Sub copie()
Dim cell As Range
For Each cell In Sheets(1).UsedRange
ad = cell.Address
if cell.HasArray then Sheets(2).Range(ad).FormulaArray > > cell.FormulaArray
Next cell
End Sub
Cette procédure est simple. Elle montre que la copie de la plage
matricielle
ne donne pas le résultat escompté...
et la fonction matricielle TABLE() provoque la célèbre erreur 1004...
Comment résoudre ce problème qui m'interdit cette façon simple de
générer
des tables.
Merci
---
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
Je ne comprends pas ton problème. :-( peut-être, mais tu me fournis une solution.
en fait c'est le resize qui me manquait voici ma procédure de test. Option Explicit Sub test() Dim cell As Range Dim f As String Dim ad As String Dim noLigD As Integer Dim noLigF As Integer Dim nocolD As Integer Dim noColF As Integer Dim flD As Boolean For Each cell In Sheets(1).UsedRange ad = cell.Address If cell.HasArray Then f = cell.FormulaArray If Not flD Then flD = True noLigD = cell.Row nocolD = cell.Column Else noLigF = cell.Row noColF = cell.Column End If Else Sheets(2).Range(ad).Value = cell.Value End If Next cell Debug.Print noLigD & " " & noLigF & " " & nocolD & " " & noColF & " " Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1" End Sub mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
-- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "Daniel.M" a écrit dans le message de news:
Salut Pascal,
Je ne comprends pas ton problème. :-(
Si tu veux comme résultat un tableau de 5lignes * 4colonnes, pourquoi n'aurais-tu pas
Tu mets 1...5 en A2:A6 et 1...4 en B1:E1 (tu as déjà indiqué que ça, tu savais
faire)
Ensuite, en Range("B2").Resize(nLignes,nCol).FormulaArray = "¢:A6*B1:E1"
Si tu désires conserver B1:B4 (au lieu de B1:E1), il te faudra insérer un TRANSPOSE() dans ta formule ==> "A2:A6*TRANSPOSE(B1:B4)"
Mais je n'ai probablement pas compris. :-) Si c'est le cas, indique le résultat
désiré en B2:E6.
Salutations,
Daniel M.
"Pascal Engelmajer" wrote in message news:
Salut à tous, J'ai déjà évoqué ce problème... une solution voire une idée de me rendrait
un grand service j'ai une série de fichiers texte contenant les éléments de la plage matricielle à créer, plage dont la dimension varie du simple au décuple de 5
lignes x 5 colonnes à 80 lignes x 20 colonnes. ex. "A2:A6";"B1:B4";"¢:A6*B1:B4" "1";"2";"3";"4";"5" "1";"2";"3";"4" Ce qui doit donner une table de Pythagore 1x1, 1x2, ..., 5x4. Pas de pb pour les entêtes de lignes et de colonnes FormulaArray mais impossible d'activer le mode matriciel Voici le test qui confirme mes soucis : Sub copie() Dim cell As Range For Each cell In Sheets(1).UsedRange ad = cell.Address if cell.HasArray then Sheets(2).Range(ad).FormulaArray > > cell.FormulaArray Next cell End Sub Cette procédure est simple. Elle montre que la copie de la plage matricielle
ne donne pas le résultat escompté... et la fonction matricielle TABLE() provoque la célèbre erreur 1004... Comment résoudre ce problème qui m'interdit cette façon simple de générer
des tables. Merci --- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel
Daniel.M
Pascal,
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une limitation du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une TABLE. Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que la formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus compliqué, et ça pourrait être d'autres cellules que G1, H1) retourne désormais un scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la 1ère ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de : Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then Sheets(2).Range("B2")(0,0).Formula = f Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _ .Table Range("G1"), Range("H1") ' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire ' Table avec l'instruction Else Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _ noColF - nocolD + 1).FormulaArray = f Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE copiable, il faut invoquer la commande comme tel si tu veux conserver cette fonctionnalité (sinon la copie bête des valeurs peut toujours être réalisée).
Salutations,
Daniel M.
Pascal,
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une limitation
du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une TABLE.
Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que la
formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus compliqué,
et ça pourrait être d'autres cellules que G1, H1) retourne désormais un
scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la 1ère
ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de :
Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD +
1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then
Sheets(2).Range("B2")(0,0).Formula = f
Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _
.Table Range("G1"), Range("H1")
' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire
' Table avec l'instruction
Else
Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _
noColF - nocolD + 1).FormulaArray = f
Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE
copiable, il faut invoquer la commande comme tel si tu veux conserver cette
fonctionnalité (sinon la copie bête des valeurs peut toujours être réalisée).
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une limitation du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une TABLE. Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que la formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus compliqué, et ça pourrait être d'autres cellules que G1, H1) retourne désormais un scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la 1ère ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de : Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then Sheets(2).Range("B2")(0,0).Formula = f Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _ .Table Range("G1"), Range("H1") ' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire ' Table avec l'instruction Else Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _ noColF - nocolD + 1).FormulaArray = f Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE copiable, il faut invoquer la commande comme tel si tu veux conserver cette fonctionnalité (sinon la copie bête des valeurs peut toujours être réalisée).
Salutations,
Daniel M.
Pascal Engelmajer
Salut Daniel, Merci beaucoup Dès que j'ai un moment j'essaie d'adapter ma procédure (création à partir d'un fichier texte) -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "Daniel.M" a écrit dans le message de news: #
Pascal,
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une limitation
du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une TABLE.
Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que la
formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus compliqué,
et ça pourrait être d'autres cellules que G1, H1) retourne désormais un scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la 1ère
ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de : Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then Sheets(2).Range("B2")(0,0).Formula = f Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _ .Table Range("G1"), Range("H1") ' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire ' Table avec l'instruction Else Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _ noColF - nocolD + 1).FormulaArray = f Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE copiable, il faut invoquer la commande comme tel si tu veux conserver cette
fonctionnalité (sinon la copie bête des valeurs peut toujours être réalisée).
Salutations,
Daniel M.
Salut Daniel,
Merci beaucoup
Dès que j'ai un moment j'essaie d'adapter ma procédure (création à partir
d'un fichier texte)
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news: #pY69b3OEHA.736@tk2msftngp13.phx.gbl...
Pascal,
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une
limitation
du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une
TABLE.
Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que
la
formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus
compliqué,
et ça pourrait être d'autres cellules que G1, H1) retourne désormais un
scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la
1ère
ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de :
Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD +
1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then
Sheets(2).Range("B2")(0,0).Formula = f
Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _
.Table Range("G1"), Range("H1")
' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire
' Table avec l'instruction
Else
Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _
noColF - nocolD + 1).FormulaArray = f
Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE
copiable, il faut invoquer la commande comme tel si tu veux conserver
cette
fonctionnalité (sinon la copie bête des valeurs peut toujours être
réalisée).
Salut Daniel, Merci beaucoup Dès que j'ai un moment j'essaie d'adapter ma procédure (création à partir d'un fichier texte) -- Amicalement. Pascal "il n'y a pas de vent favorable pour celui qui ne sait pas ou il va." Sénèque. http://www.ilyapa.net/excel "Daniel.M" a écrit dans le message de news: #
Pascal,
mais cela ne marche toujours pas pour {=TABLE(A7:A8)}
En effet car Excel ne la comprend pas comme une _vraie_ formule (une limitation
du logiciel).
Tu devras peut-être changer ton input pour indiquer qu'il s'agit d'une TABLE.
Par exemple, en rajoutant un terme sur la première ligne. Tu noteras que la
formule (j'ai mis =G1*H1 mais ça pourrait être quelquechose de plus compliqué,
et ça pourrait être d'autres cellules que G1, H1) retourne désormais un scalaire, i.e. UNE valeur:
Ton code vérifierait la présence du mot TABLE dans le dernier terme de la 1ère
ligne, auquel cas on fixe la valeur d'un flag IsTable à VRAI
Au lieu de : Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, noColF - nocolD + 1).FormulaArray = f '"¢:A6*B1:F1"
Tu aurais maintenant:
If IsTable then Sheets(2).Range("B2")(0,0).Formula = f Sheets(2).Range("B2")(0,0).Resize(noLigF-noLigD+2, noColF-nColD+2) _ .Table Range("G1"), Range("H1") ' note les +2 puisqu'on inclue 1 li et 1 col supplémentaire ' Table avec l'instruction Else Sheets(2).Range("B2").Resize(noLigF - noLigD + 1, _ noColF - nocolD + 1).FormulaArray = f Endif
Bon, c'est pas très élégant mais à défaut d'avoir une vrai fonction TABLE copiable, il faut invoquer la commande comme tel si tu veux conserver cette
fonctionnalité (sinon la copie bête des valeurs peut toujours être réalisée).