Consolidation des onglets sur une plage de cellule uniquement (mac
1 réponse
Françoise
Bonjour à tous,
j'ai une macro pour la consolidation de tous les onglets quelque soit leur
nombre dans une seule et unique page que des spécialistes m'avaient proposés
sur ce site
cela fonctionne à merveille,
Mais voilà, je complique !!!!
En fait maintenant, il faut que je concatène tous les onglets mais sur une
plage qui iar de la cellule A41 à la dernière ligne où la cellule A sera
égale à "", car en cellulle D;F;G; j'ai des données jusqu'à la ligne 1000.
ces cellules contiennent des formules de mise à jour en fonction d'un autre
fichier où l'utilisateur saisit des données.
donc en résumé, il faut que je dise
copie toutes les lignes comprises entre A42 et la dernière ligne avant la
cellule A=""
=====================================================
code de la macro CONSO_ONGLETS_AVEC_NOMS_ONGLETS()
==
Sub CONSO_ONGLETS_AVEC_NOMS_ONGLETS()
Sheets("BASE").[A1].CurrentRegion.Offset(1, 0).Clear
For s = 2 To Sheets.Count
nlig = Sheets(s).[A65000].End(xlUp).Row - 1
ncol = Sheets(s).[A1].CurrentRegion.Columns.Count
[A65000].End(xlUp).Offset(1, ncol).Resize(nlig, 1).Value = Sheets(s).Name
[A65000].End(xlUp).Offset(1, 0).Resize(nlig, ncol).Value = _
Sheets(s).[A2].Resize(nlig, ncol).Value
Next s
On Error Resume Next
[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
=====================================================
j'avoue que j'ai un peu de mal à voir comment adapter la syntaxe ci-dessus
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
Papyjac
Bonjour Françoise,
Finalement, ton code n'a que 10 lignes, et pourtant il est difficile à modifier... c'est la raison pour laquelle, je n'utilise plus ces instructions à usage des experts
Ma techique est lourdingue : Je stocke TOUT en tableau en mémoire, et je mets des commentaires
1. Déclarer le tableau Dim T1_Onglet(250) as string '250 Dim T1_Conso(250, 10000, 256) as variant '250 onglets de 10000 lignes sur 256 colonnes Dim T1_nb as integer 'Nombre d'onglets
2. Stocker les onglets Erase T1_Conso,T1_Onglet T1_nb=0 For I = 2 to Activeworkbook.Sheets.count 'Pour chaque onglet sauf le 1er Sheets(I).Select T1_nb= T1_nb+1 T1_Onglet(T1_nb) = activesheet.name For L = 1 to 1000 'Pour chaque ligne For C = 1 to 256 'Pour chaque colonne T1_Conso(T1_nb,L,C) = Cells(L,C).value Next Next Next
3. Traitement (aucun dans ton cas, quoique)
4. Vider le résultat Sheets(1).Select Lfin=0 'Ligne en cours For I = 1 to T1_nb 'Pour chaque onglet For L = 1 to 10000 'Pour chaque ligne Lfin = Lfin +1 Cells(Lfin,1) = T1_Onglet(I) For C = 1 to 256 'Pour chaque colonne Cells(L,C+1).value = T1_Conso(I,L,C) Next Next Next
La logique est simple : déclaration, acquisition, traitement, restitution ; on peut modifier l'un sans toucher les autres
Pour répondre à ta question : il faudra modifier uniquement la séquence 2 (Stocker les onglets) Mais, aussi bien dans TON code que dans LE MIEN, il est indispensable que tu t'appropries le fonctionnement.
-- P a p y j a c
-- P a p y j a c "Françoise" a écrit dans le message de news:
Bonjour à tous,
j'ai une macro pour la consolidation de tous les onglets quelque soit leur nombre dans une seule et unique page que des spécialistes m'avaient proposés sur ce site cela fonctionne à merveille, Mais voilà, je complique !!!! En fait maintenant, il faut que je concatène tous les onglets mais sur une plage qui iar de la cellule A41 à la dernière ligne où la cellule A sera égale à "", car en cellulle D;F;G; j'ai des données jusqu'à la ligne 1000. ces cellules contiennent des formules de mise à jour en fonction d'un autre fichier où l'utilisateur saisit des données.
donc en résumé, il faut que je dise copie toutes les lignes comprises entre A42 et la dernière ligne avant la cellule A="" ==================================================== > code de la macro CONSO_ONGLETS_AVEC_NOMS_ONGLETS() = > Sub CONSO_ONGLETS_AVEC_NOMS_ONGLETS() Sheets("BASE").[A1].CurrentRegion.Offset(1, 0).Clear For s = 2 To Sheets.Count nlig = Sheets(s).[A65000].End(xlUp).Row - 1 ncol = Sheets(s).[A1].CurrentRegion.Columns.Count [A65000].End(xlUp).Offset(1, ncol).Resize(nlig, 1).Value = Sheets(s).Name [A65000].End(xlUp).Offset(1, 0).Resize(nlig, ncol).Value = _ Sheets(s).[A2].Resize(nlig, ncol).Value Next s On Error Resume Next [A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub ==================================================== >
j'avoue que j'ai un peu de mal à voir comment adapter la syntaxe ci-dessus
une aide appropriée serait la bienvenue
d'avance merci à tous
Bonjour Françoise,
Finalement, ton code n'a que 10 lignes, et pourtant il est difficile à
modifier... c'est la raison pour laquelle, je n'utilise plus ces
instructions à usage des experts
Ma techique est lourdingue : Je stocke TOUT en tableau en mémoire, et je
mets des commentaires
1. Déclarer le tableau
Dim T1_Onglet(250) as string '250
Dim T1_Conso(250, 10000, 256) as variant '250 onglets de 10000 lignes sur
256 colonnes
Dim T1_nb as integer 'Nombre d'onglets
2. Stocker les onglets
Erase T1_Conso,T1_Onglet
T1_nb=0
For I = 2 to Activeworkbook.Sheets.count 'Pour chaque onglet sauf le 1er
Sheets(I).Select
T1_nb= T1_nb+1
T1_Onglet(T1_nb) = activesheet.name
For L = 1 to 1000 'Pour chaque ligne
For C = 1 to 256 'Pour chaque colonne
T1_Conso(T1_nb,L,C) = Cells(L,C).value
Next
Next
Next
3. Traitement (aucun dans ton cas, quoique)
4. Vider le résultat
Sheets(1).Select
Lfin=0 'Ligne en cours
For I = 1 to T1_nb 'Pour chaque onglet
For L = 1 to 10000 'Pour chaque ligne
Lfin = Lfin +1
Cells(Lfin,1) = T1_Onglet(I)
For C = 1 to 256 'Pour chaque colonne
Cells(L,C+1).value = T1_Conso(I,L,C)
Next
Next
Next
La logique est simple : déclaration, acquisition, traitement, restitution ;
on peut modifier l'un sans toucher les autres
Pour répondre à ta question : il faudra modifier uniquement la séquence 2
(Stocker les onglets)
Mais, aussi bien dans TON code que dans LE MIEN, il est indispensable que tu
t'appropries le fonctionnement.
--
P a p y j a c
--
P a p y j a c
"Françoise" <Franoise@discussions.microsoft.com> a écrit dans le message de
news:6C488A84-E438-413B-BA9E-0CC00C8619ED@microsoft.com...
Bonjour à tous,
j'ai une macro pour la consolidation de tous les onglets quelque soit leur
nombre dans une seule et unique page que des spécialistes m'avaient
proposés
sur ce site
cela fonctionne à merveille,
Mais voilà, je complique !!!!
En fait maintenant, il faut que je concatène tous les onglets mais sur une
plage qui iar de la cellule A41 à la dernière ligne où la cellule A sera
égale à "", car en cellulle D;F;G; j'ai des données jusqu'à la ligne 1000.
ces cellules contiennent des formules de mise à jour en fonction d'un
autre
fichier où l'utilisateur saisit des données.
donc en résumé, il faut que je dise
copie toutes les lignes comprises entre A42 et la dernière ligne avant la
cellule A=""
==================================================== > code de la macro CONSO_ONGLETS_AVEC_NOMS_ONGLETS()
= > Sub CONSO_ONGLETS_AVEC_NOMS_ONGLETS()
Sheets("BASE").[A1].CurrentRegion.Offset(1, 0).Clear
For s = 2 To Sheets.Count
nlig = Sheets(s).[A65000].End(xlUp).Row - 1
ncol = Sheets(s).[A1].CurrentRegion.Columns.Count
[A65000].End(xlUp).Offset(1, ncol).Resize(nlig, 1).Value =
Sheets(s).Name
[A65000].End(xlUp).Offset(1, 0).Resize(nlig, ncol).Value = _
Sheets(s).[A2].Resize(nlig, ncol).Value
Next s
On Error Resume Next
[A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
==================================================== >
j'avoue que j'ai un peu de mal à voir comment adapter la syntaxe ci-dessus
Finalement, ton code n'a que 10 lignes, et pourtant il est difficile à modifier... c'est la raison pour laquelle, je n'utilise plus ces instructions à usage des experts
Ma techique est lourdingue : Je stocke TOUT en tableau en mémoire, et je mets des commentaires
1. Déclarer le tableau Dim T1_Onglet(250) as string '250 Dim T1_Conso(250, 10000, 256) as variant '250 onglets de 10000 lignes sur 256 colonnes Dim T1_nb as integer 'Nombre d'onglets
2. Stocker les onglets Erase T1_Conso,T1_Onglet T1_nb=0 For I = 2 to Activeworkbook.Sheets.count 'Pour chaque onglet sauf le 1er Sheets(I).Select T1_nb= T1_nb+1 T1_Onglet(T1_nb) = activesheet.name For L = 1 to 1000 'Pour chaque ligne For C = 1 to 256 'Pour chaque colonne T1_Conso(T1_nb,L,C) = Cells(L,C).value Next Next Next
3. Traitement (aucun dans ton cas, quoique)
4. Vider le résultat Sheets(1).Select Lfin=0 'Ligne en cours For I = 1 to T1_nb 'Pour chaque onglet For L = 1 to 10000 'Pour chaque ligne Lfin = Lfin +1 Cells(Lfin,1) = T1_Onglet(I) For C = 1 to 256 'Pour chaque colonne Cells(L,C+1).value = T1_Conso(I,L,C) Next Next Next
La logique est simple : déclaration, acquisition, traitement, restitution ; on peut modifier l'un sans toucher les autres
Pour répondre à ta question : il faudra modifier uniquement la séquence 2 (Stocker les onglets) Mais, aussi bien dans TON code que dans LE MIEN, il est indispensable que tu t'appropries le fonctionnement.
-- P a p y j a c
-- P a p y j a c "Françoise" a écrit dans le message de news:
Bonjour à tous,
j'ai une macro pour la consolidation de tous les onglets quelque soit leur nombre dans une seule et unique page que des spécialistes m'avaient proposés sur ce site cela fonctionne à merveille, Mais voilà, je complique !!!! En fait maintenant, il faut que je concatène tous les onglets mais sur une plage qui iar de la cellule A41 à la dernière ligne où la cellule A sera égale à "", car en cellulle D;F;G; j'ai des données jusqu'à la ligne 1000. ces cellules contiennent des formules de mise à jour en fonction d'un autre fichier où l'utilisateur saisit des données.
donc en résumé, il faut que je dise copie toutes les lignes comprises entre A42 et la dernière ligne avant la cellule A="" ==================================================== > code de la macro CONSO_ONGLETS_AVEC_NOMS_ONGLETS() = > Sub CONSO_ONGLETS_AVEC_NOMS_ONGLETS() Sheets("BASE").[A1].CurrentRegion.Offset(1, 0).Clear For s = 2 To Sheets.Count nlig = Sheets(s).[A65000].End(xlUp).Row - 1 ncol = Sheets(s).[A1].CurrentRegion.Columns.Count [A65000].End(xlUp).Offset(1, ncol).Resize(nlig, 1).Value = Sheets(s).Name [A65000].End(xlUp).Offset(1, 0).Resize(nlig, ncol).Value = _ Sheets(s).[A2].Resize(nlig, ncol).Value Next s On Error Resume Next [A:A].SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub ==================================================== >
j'avoue que j'ai un peu de mal à voir comment adapter la syntaxe ci-dessus