OVH Cloud OVH Cloud

somme de plusieurs tableau

9 réponses
Avatar
Kerroch
Bonjour à tous et joyeuses fêtes.

Je voudrais mettre dans un tableau plusieurs range provenant de feuilles
différentes (nb colonnes identiques,nb lignes differentes)
du genre :
For i = 1 To 12
fin = Sheets(feuille(i)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(i)).Range("LbNom").Row + 1
table = Range("A" & debut, "I" & fin) !
**** Comment ajouter les ranges de la feuille(2) ..feuille(3) etc dans
table ?? ****
next i

Existe t-il des fonctions d'assemblage de tableau ??

J'espère avoir été clair ...merci de votre aide..

Kerroch

9 réponses

Avatar
AV
Si tes plages commencent toutes en A1 (à adapter), ça pourrait faire :

Sub zz_Somme()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
laSomme = laSomme + Evaluate("Sum(" & "'" & Sheets(i).Name & "'!A" & Ldéb &
":A" & Lfin & ")")
Next
MsgBox laSomme
End Sub

PS : Les apostrophes dans la chaîne de l'Evaluate sont là au cas où tes feuilles
pourraient comporter des noms avec espaces (à éviter)
AV
Avatar
Kerroch
Bonjour Av , Merci pour ta promptitude.

Je crois que j'ai mal formulé ma question.
Je ne veux pas faire de somme algébrique, mais "simplement" récupérer
dans un tableau toutes les ranges de mes différentes feuilles .
ex:
table(0 to 10) : range (1ere feuille). (lignes variables , colonnes fixes)
table(11 to 50): range de ma feuille 2
table(51 to 60) : range de ma feuille 3 etc...
je sais le faire en faisant une boucle for ...next
mais existe t-il un moyen plus rapide pour assembler deux tableaux?

A+
Kerroch





"AV" a écrit dans le message de
news:
Si tes plages commencent toutes en A1 (à adapter), ça pourrait faire :

Sub zz_Somme()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
laSomme = laSomme + Evaluate("Sum(" & "'" & Sheets(i).Name & "'!A" &
Ldéb &

":A" & Lfin & ")")
Next
MsgBox laSomme
End Sub

PS : Les apostrophes dans la chaîne de l'Evaluate sont là au cas où tes
feuilles

pourraient comporter des noms avec espaces (à éviter)
AV




Avatar
Daniel.M
Salut,

Sers-toi de .CurrentRegion pour sélectionner les lignes de ton tableau.
Puis tu copies l'ensemble de ton tableau dans une seule instruction.

Sheets("Feuil2").Range("A11").CurrentRegion.Copy _
Destination:=Sheets("Sommaire").Range("A65536").End(xlUp)(2)

Salutations,

Daniel M.

"Kerroch" wrote in message
news:bscci5$pb5$
Bonjour Av , Merci pour ta promptitude.

Je crois que j'ai mal formulé ma question.
Je ne veux pas faire de somme algébrique, mais "simplement" récupérer
dans un tableau toutes les ranges de mes différentes feuilles .
ex:
table(0 to 10) : range (1ere feuille). (lignes variables , colonnes fixes)
table(11 to 50): range de ma feuille 2
table(51 to 60) : range de ma feuille 3 etc...
je sais le faire en faisant une boucle for ...next
mais existe t-il un moyen plus rapide pour assembler deux tableaux?

A+
Kerroch





"AV" a écrit dans le message de
news:
Si tes plages commencent toutes en A1 (à adapter), ça pourrait faire :

Sub zz_Somme()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
laSomme = laSomme + Evaluate("Sum(" & "'" & Sheets(i).Name & "'!A" &
Ldéb &

":A" & Lfin & ")")
Next
MsgBox laSomme
End Sub

PS : Les apostrophes dans la chaîne de l'Evaluate sont là au cas où tes
feuilles

pourraient comporter des noms avec espaces (à éviter)
AV








Avatar
Kerroch
Pour préciser ma pensée voici l'idée que je voulais expérimenter
mais qui ne marche pas :

fin = Sheets(feuille(1)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(1)).Range("LbNom").Row + 1
Set Totalrange = Sheets(feuille(1)).Range("A" & debut, "I" & fin)

For i = 2 To 12
fin = Sheets(feuille(i)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(i)).Range("LbNom").Row + 1
Set LargeRange(i) = Sheets(feuille(i)).Range("A" & debut, "I" & fin)

Set Totalrange = Application.Union(Totalrange, LargeRange(i)) ! NE MARCHE
PAS !!!
Next i

table = Totalrange ! Mon tableau total

Le but est de récupérer toutes les ranges dans un tableau
Est-ce plus clair ?

Kerroch

"Daniel.M" a écrit dans le message de
news:eqac$
Salut,

Sers-toi de .CurrentRegion pour sélectionner les lignes de ton tableau.
Puis tu copies l'ensemble de ton tableau dans une seule instruction.

Sheets("Feuil2").Range("A11").CurrentRegion.Copy _
Destination:=Sheets("Sommaire").Range("A65536").End(xlUp)(2)

Salutations,

Daniel M.

"Kerroch" wrote in message
news:bscci5$pb5$
Bonjour Av , Merci pour ta promptitude.

Je crois que j'ai mal formulé ma question.
Je ne veux pas faire de somme algébrique, mais "simplement" récupérer
dans un tableau toutes les ranges de mes différentes feuilles .
ex:
table(0 to 10) : range (1ere feuille). (lignes variables , colonnes
fixes)


table(11 to 50): range de ma feuille 2
table(51 to 60) : range de ma feuille 3 etc...
je sais le faire en faisant une boucle for ...next
mais existe t-il un moyen plus rapide pour assembler deux tableaux?

A+
Kerroch





"AV" a écrit dans le message de
news:
Si tes plages commencent toutes en A1 (à adapter), ça pourrait faire :


Sub zz_Somme()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
laSomme = laSomme + Evaluate("Sum(" & "'" & Sheets(i).Name & "'!A"
&



Ldéb &
":A" & Lfin & ")")
Next
MsgBox laSomme
End Sub

PS : Les apostrophes dans la chaîne de l'Evaluate sont là au cas où
tes



feuilles
pourraient comporter des noms avec espaces (à éviter)
AV












Avatar
Kerroch
Peut-être parce que les ranges n'appartiennent pas à la même feuille??
kerroch

"Kerroch" a écrit dans le message de
news:bsch32$uvk$
Pour préciser ma pensée voici l'idée que je voulais expérimenter
mais qui ne marche pas :

fin = Sheets(feuille(1)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(1)).Range("LbNom").Row + 1
Set Totalrange = Sheets(feuille(1)).Range("A" & debut, "I" & fin)

For i = 2 To 12
fin = Sheets(feuille(i)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(i)).Range("LbNom").Row + 1
Set LargeRange(i) = Sheets(feuille(i)).Range("A" & debut, "I" & fin)

Set Totalrange = Application.Union(Totalrange, LargeRange(i)) ! NE MARCHE
PAS !!!
Next i

table = Totalrange ! Mon tableau total

Le but est de récupérer toutes les ranges dans un tableau
Est-ce plus clair ?

Kerroch

"Daniel.M" a écrit dans le message de
news:eqac$
Salut,

Sers-toi de .CurrentRegion pour sélectionner les lignes de ton tableau.
Puis tu copies l'ensemble de ton tableau dans une seule instruction.

Sheets("Feuil2").Range("A11").CurrentRegion.Copy _
Destination:=Sheets("Sommaire").Range("A65536").End(xlUp)(2)

Salutations,

Daniel M.

"Kerroch" wrote in message
news:bscci5$pb5$
Bonjour Av , Merci pour ta promptitude.

Je crois que j'ai mal formulé ma question.
Je ne veux pas faire de somme algébrique, mais "simplement" récupérer
dans un tableau toutes les ranges de mes différentes feuilles .
ex:
table(0 to 10) : range (1ere feuille). (lignes variables , colonnes
fixes)


table(11 to 50): range de ma feuille 2
table(51 to 60) : range de ma feuille 3 etc...
je sais le faire en faisant une boucle for ...next
mais existe t-il un moyen plus rapide pour assembler deux tableaux?

A+
Kerroch





"AV" a écrit dans le message de
news:
Si tes plages commencent toutes en A1 (à adapter), ça pourrait faire
:






Sub zz_Somme()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
laSomme = laSomme + Evaluate("Sum(" & "'" & Sheets(i).Name &
"'!A"




&
Ldéb &
":A" & Lfin & ")")
Next
MsgBox laSomme
End Sub

PS : Les apostrophes dans la chaîne de l'Evaluate sont là au cas où
tes



feuilles
pourraient comporter des noms avec espaces (à éviter)
AV
















Avatar
AV
Le but est de récupérer toutes les ranges dans un tableau
Est-ce plus clair ?


Je sais pas trop où tu veux en venir mais essaye ça :
Sub zz()
laSomme = 0
For i = 1 To 5
Ldéb = 1
Lfin = Sheets(i).[A65536].End(3).Row
plg = plg & "," & "'" & Sheets(i).Name & "'!A" & Ldéb & ":A" & Lfin
Next
x = Right(plg, Len(plg) - 1)
'exemples d'utilisations
MsgBox Evaluate("sum(" & x & ")")
MsgBox Evaluate("average(" & x & ")")
MsgBox Evaluate("counta(" & x & ")")
End Sub

AV

Avatar
Daniel.M
Salut Alain,

Je sais pas trop où tu veux en venir mais essaye ça :


Je pense commencer à comprendre. Kerroch voudrait mettre
Table = Range(x)
après ton instruction x = Right(plg, Len(plg) - 1)

et qu'ainsi, un tableau contenant l'ensemble des lignes des plages discontinues
de x seraient ainsi mises bout à bout. Malheureusement, ça NE fonctionne PAS et
je ne vois pas d'autres solutions pour lui que 1-copier toutes les plages dans
une plage temporaire et faire ensuite un Table=Range("PlageTemporaire") ou
2-copier une à une les lignes dans Table.

Salutations,

Daniel M.

Avatar
Kerroch
Effectivement, j'ai resolu mon problème en passant par une range temporaire:

!12 ranges sur 12 feuilles différentes dans Totalrange()
For i = 1 To 12
fin = Sheets(feuille(i)).Range("A65536").End(xlUp).Row
debut = Sheets(feuille(i)).Range("LbNom").Row + 1
Set Totalrange(i) = Sheets(feuille(i)).Range("A" & debut, "I" & fin)
Next i

Sheets("Année").Activate ! feuille temporaire
For i = 1 To 12
debut = ActiveSheet.Range("A65536").End(xlUp).Row + 1
Cells(debut, 1).Select
Totalrange(i).Copy Destination:¬tiveCell
Next i

reste plus qu'à mettre dans un tableau .....
ça à l'air de marcher...

Je regarde depuis peu le forum , et je vous remercie beaucoup
pour l'aide que vous apportez aux demandeurs.

Merci encore et bonnes fêtes de fin d'année.

à bientôt très certainement...

Kerroch





"Daniel.M" a écrit dans le message de
news:
Salut Alain,

Je sais pas trop où tu veux en venir mais essaye ça :


Je pense commencer à comprendre. Kerroch voudrait mettre
Table = Range(x)
après ton instruction x = Right(plg, Len(plg) - 1)

et qu'ainsi, un tableau contenant l'ensemble des lignes des plages
discontinues

de x seraient ainsi mises bout à bout. Malheureusement, ça NE fonctionne
PAS et

je ne vois pas d'autres solutions pour lui que 1-copier toutes les plages
dans

une plage temporaire et faire ensuite un Table=Range("PlageTemporaire") ou
2-copier une à une les lignes dans Table.

Salutations,

Daniel M.





Avatar
Daniel.M
Salut,

Sheets("Année").Activate ! feuille temporaire
For i = 1 To 12
debut = ActiveSheet.Range("A65536").End(xlUp).Row + 1
Cells(debut, 1).Select
Totalrange(i).Copy Destination:¬tiveCell
Next i


Peut être remplacé par :
' Surtout, pas de Activate : lent
For i = 1 To 12
Totalrange(i).Copy Destination:=Sheets("Année") _
.Range("A65536").End(xlUp)(2)
Next i


reste plus qu'à mettre dans un tableau .....
ça à l'air de marcher...


Tu fais:
Table = Sheets("Année").Range("A1").CurrentRegion.Value



Je regarde depuis peu le forum , et je vous remercie beaucoup
pour l'aide que vous apportez aux demandeurs.



Au plaisir,

Daniel M.