les feuille se presente ainsi
sur les 5 premiere feuilles
colonne A / colonne B / colonne C
donnée x
donnée v
donnéek
l'ordre des donnée varie selon les feuilles et il peut y avoir des données
differents selon les feuille
ma 6eme page
colonne A / colonne B
donnée x
donnée k
donnée v
la colonne A rassemble toute les donnée des colonnes a precedente et chaque
donnée ne doit apparaitre qu'une fois. ( sur cette feuille elle doivent
apparaitre automatiquement lorsque l'on rempli les 5 feuille precedente)
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
PMO
Bonjour,
Une solution mais par macro (VBA). ATTENTION faites le test sur une copie de votre classeur
IMPERATIVEMENT NECESSAIRE Il faut que les 6 feuilles soient classées dans l'ordre au 6 premières places. Les 5 feuilles de données en premier puis la feuille qui collecte en sixième position.
1) Copiez le code suivant dans un module Standard '********** Sub Collecteur(Sh As Object) Dim S As Worksheet Dim R As Range Dim i& Dim j& Dim deb& Dim var(1 To 5) Dim T() Dim Tbl() On Error GoTo Erreur Application.ScreenUpdating = False For i& = 1 To 5 Set S = Worksheets(i&) Set R = S.UsedRange.Resize _ (S.UsedRange.Rows.Count, 1) var(i&) = R Next i& Set S = Worksheets(6) S.Activate S.Columns(1).ClearContents deb& = 1 For i& = 1 To 5 S.Range(Cells(deb&, 1), _ Cells(UBound(var(i&), 1) + deb& - 1, 1)) _ = var(i&) deb& = deb& + UBound(var(i&), 1) Next i& Set R = Range("a1:a" & deb& - 1 & "") R.Sort Key1:=[a1], _ Order1:=xlAscending, _ Header:=xlNo Erase var() Set R = R.Resize(R.Rows.Count + 1, R.Columns.Count) var(1) = R S.Columns(1).ClearContents For i& = 1 To UBound(var(1), 1) - 1 If var(1)(i&, 1) <> var(1)(i& + 1, 1) Then j& = j& + 1 ReDim Preserve T(1 To j&) T(j&) = var(1)(i&, 1) End If Next i& ReDim Tbl(1 To UBound(T), 1 To 1) For i& = 1 To UBound(T) Tbl(i&, 1) = T(i&) Next i& Range("a1:a" & UBound(T) & "") = Tbl Erreur: Sh.Activate Application.ScreenUpdating = True End Sub '**********
2) Copiez le code suivant dans ThisWorkbook '********** Private Sub Workbook_SheetChange _ (ByVal Sh As Object, ByVal Target As Range) If Sh.Index < 6 Then Call Collecteur(Sh) End Sub '**********
Pour que la feuille collecteur (la 6ème) soit une première fois renseignée il faut entrer une nouvelle valeur dans une des 5 premières feuilles de données. La macro Collecteur n'est pas lancer directement par l'utilisateur mais est appelée par l'évènement Workbook_SheetChange du classeur.
Cordialement.
-- PMO Patrick Morange
les feuille se presente ainsi sur les 5 premiere feuilles
colonne A / colonne B / colonne C donnée x donnée v donnéek
l'ordre des donnée varie selon les feuilles et il peut y avoir des données differents selon les feuille
ma 6eme page
colonne A / colonne B donnée x donnée k donnée v
la colonne A rassemble toute les donnée des colonnes a precedente et chaque donnée ne doit apparaitre qu'une fois. ( sur cette feuille elle doivent apparaitre automatiquement lorsque l'on rempli les 5 feuille precedente)
je ne sait pas si cela est possible sur excel
dans l'attente de vos reponse merci
Bonjour,
Une solution mais par macro (VBA).
ATTENTION faites le test sur une copie de votre classeur
IMPERATIVEMENT NECESSAIRE
Il faut que les 6 feuilles soient classées dans l'ordre au 6 premières places.
Les 5 feuilles de données en premier puis la feuille qui collecte
en sixième position.
1) Copiez le code suivant dans un module Standard
'**********
Sub Collecteur(Sh As Object)
Dim S As Worksheet
Dim R As Range
Dim i&
Dim j&
Dim deb&
Dim var(1 To 5)
Dim T()
Dim Tbl()
On Error GoTo Erreur
Application.ScreenUpdating = False
For i& = 1 To 5
Set S = Worksheets(i&)
Set R = S.UsedRange.Resize _
(S.UsedRange.Rows.Count, 1)
var(i&) = R
Next i&
Set S = Worksheets(6)
S.Activate
S.Columns(1).ClearContents
deb& = 1
For i& = 1 To 5
S.Range(Cells(deb&, 1), _
Cells(UBound(var(i&), 1) + deb& - 1, 1)) _
= var(i&)
deb& = deb& + UBound(var(i&), 1)
Next i&
Set R = Range("a1:a" & deb& - 1 & "")
R.Sort Key1:=[a1], _
Order1:=xlAscending, _
Header:=xlNo
Erase var()
Set R = R.Resize(R.Rows.Count + 1, R.Columns.Count)
var(1) = R
S.Columns(1).ClearContents
For i& = 1 To UBound(var(1), 1) - 1
If var(1)(i&, 1) <> var(1)(i& + 1, 1) Then
j& = j& + 1
ReDim Preserve T(1 To j&)
T(j&) = var(1)(i&, 1)
End If
Next i&
ReDim Tbl(1 To UBound(T), 1 To 1)
For i& = 1 To UBound(T)
Tbl(i&, 1) = T(i&)
Next i&
Range("a1:a" & UBound(T) & "") = Tbl
Erreur:
Sh.Activate
Application.ScreenUpdating = True
End Sub
'**********
2) Copiez le code suivant dans ThisWorkbook
'**********
Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
If Sh.Index < 6 Then Call Collecteur(Sh)
End Sub
'**********
Pour que la feuille collecteur (la 6ème) soit une première
fois renseignée il faut entrer une nouvelle valeur dans une
des 5 premières feuilles de données.
La macro Collecteur n'est pas lancer directement par
l'utilisateur mais est appelée par l'évènement Workbook_SheetChange
du classeur.
Cordialement.
--
PMO
Patrick Morange
les feuille se presente ainsi
sur les 5 premiere feuilles
colonne A / colonne B / colonne C
donnée x
donnée v
donnéek
l'ordre des donnée varie selon les feuilles et il peut y avoir des données
differents selon les feuille
ma 6eme page
colonne A / colonne B
donnée x
donnée k
donnée v
la colonne A rassemble toute les donnée des colonnes a precedente et chaque
donnée ne doit apparaitre qu'une fois. ( sur cette feuille elle doivent
apparaitre automatiquement lorsque l'on rempli les 5 feuille precedente)
Une solution mais par macro (VBA). ATTENTION faites le test sur une copie de votre classeur
IMPERATIVEMENT NECESSAIRE Il faut que les 6 feuilles soient classées dans l'ordre au 6 premières places. Les 5 feuilles de données en premier puis la feuille qui collecte en sixième position.
1) Copiez le code suivant dans un module Standard '********** Sub Collecteur(Sh As Object) Dim S As Worksheet Dim R As Range Dim i& Dim j& Dim deb& Dim var(1 To 5) Dim T() Dim Tbl() On Error GoTo Erreur Application.ScreenUpdating = False For i& = 1 To 5 Set S = Worksheets(i&) Set R = S.UsedRange.Resize _ (S.UsedRange.Rows.Count, 1) var(i&) = R Next i& Set S = Worksheets(6) S.Activate S.Columns(1).ClearContents deb& = 1 For i& = 1 To 5 S.Range(Cells(deb&, 1), _ Cells(UBound(var(i&), 1) + deb& - 1, 1)) _ = var(i&) deb& = deb& + UBound(var(i&), 1) Next i& Set R = Range("a1:a" & deb& - 1 & "") R.Sort Key1:=[a1], _ Order1:=xlAscending, _ Header:=xlNo Erase var() Set R = R.Resize(R.Rows.Count + 1, R.Columns.Count) var(1) = R S.Columns(1).ClearContents For i& = 1 To UBound(var(1), 1) - 1 If var(1)(i&, 1) <> var(1)(i& + 1, 1) Then j& = j& + 1 ReDim Preserve T(1 To j&) T(j&) = var(1)(i&, 1) End If Next i& ReDim Tbl(1 To UBound(T), 1 To 1) For i& = 1 To UBound(T) Tbl(i&, 1) = T(i&) Next i& Range("a1:a" & UBound(T) & "") = Tbl Erreur: Sh.Activate Application.ScreenUpdating = True End Sub '**********
2) Copiez le code suivant dans ThisWorkbook '********** Private Sub Workbook_SheetChange _ (ByVal Sh As Object, ByVal Target As Range) If Sh.Index < 6 Then Call Collecteur(Sh) End Sub '**********
Pour que la feuille collecteur (la 6ème) soit une première fois renseignée il faut entrer une nouvelle valeur dans une des 5 premières feuilles de données. La macro Collecteur n'est pas lancer directement par l'utilisateur mais est appelée par l'évènement Workbook_SheetChange du classeur.
Cordialement.
-- PMO Patrick Morange
les feuille se presente ainsi sur les 5 premiere feuilles
colonne A / colonne B / colonne C donnée x donnée v donnéek
l'ordre des donnée varie selon les feuilles et il peut y avoir des données differents selon les feuille
ma 6eme page
colonne A / colonne B donnée x donnée k donnée v
la colonne A rassemble toute les donnée des colonnes a precedente et chaque donnée ne doit apparaitre qu'une fois. ( sur cette feuille elle doivent apparaitre automatiquement lorsque l'on rempli les 5 feuille precedente)