Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Consolidation des onglets sur une plage de cellule uniquement (mac

1 réponse
Avatar
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

une aide appropriée serait la bienvenue

d'avance merci à tous

1 réponse

Avatar
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