Faire appel à une même cellule sur toutes les feuilles d'un classeur

V

Violaine

Guest
Bonjour !

Je voudrait récupérer les valeurs qui sont situées dans une même cellule (même référence) mais sur toutes les feuilles du classeur excel.
Je sais qu'on peut aller chercher cette cellule feuille par feuille, mais ça peut prendre du temps, et je voudrais que la commande s'actualise automatiquement quand on rajoute une nouvelle feuille au classeur. Est-ce que quelqu'un a une idée là dessus ?

Violaine
 
@

@+Thierry

Guest
Salut Violaine, le Forum

En imaginant que tu as une feuille nommée "Collection" et que tu veuilles y récupérer la valeur de la cellule "A1" de toutes les autres feuilles du classeur voici ce que çà donnerait :

Sub ActualiseFeuilles()
Dim WS As Worksheet
Dim i As Byte

i = 1

For Each WS In Worksheets
If WS.Name <> "Collection" Then
With Sheets("Collection")
.Range("A" & i) = WS.Name
.Range("B" & i) = WS.Range("A1")
i = i + 1
End With
End If
Next

End Sub


Dans ce code, en feuille "Collection" on récupére en colonne "A" le nom des feuilles et à coté en "B" la valeur de la cellule "A1" respective de chaque feuile.

Voilà pour une première approche

Bon Aprèm et bon Week End à tous et toutes
@+Thierry
 
@

@+Thierry

Guest
Bonsoir Violaine, le Forum

Je ne comprends pas les 33 cellules ? le code que je t'ai écrit partait de ton premier post où tu parlais "dans une même cellule (même référence)"

Ceci dit tout est possible en VBA


... Imaginons que tu veuilles récupérer dans un listing en feuille "Collection" les valeurs de toutes les cellules non vides en provenance de toutes les feuilles du classeur le code serait ainsi :

Sub ActualiseFeuillesAllCells()
Dim WS As Worksheet
Dim Plage As Range, Cell As Range
Dim i As Byte

i = 1

For Each WS In Worksheets
If WS.Name <> "Collection" Then
Set Plage = WS.UsedRange

For Each Cell In Plage
If Cell <> "" Then
With Sheets("Collection")
.Range("A" & i) = WS.Name
.Range("B" & i) = Cell
i = i + 1
End With
End If
Next Cell
End If
Next WS
End Sub


Et si (par exemple) on veux récupérer les valeurs de toutes les cellules située uniquement dans la plage "A1:A33" on pourrait écrire comme ceci :

Sub ActualiseFeuillesPlage()
Dim WS As Worksheet
Dim Plage As Range, Cell As Range
Dim i As Byte

i = 1

For Each WS In Worksheets
If WS.Name <> "Collection" Then
Set Plage = WS.Range("A1:A33")

For Each Cell In Plage
With Sheets("Collection")
.Range("A" & i) = WS.Name
.Range("B" & i) = Cell
i = i + 1
End With
Next Cell
End If
Next WS
End Sub


...et bien entendu on peut combiner les deux pour n'avoir que les cellules contenant des valeur en intégrant dans cette dernière procédure la condition If Cell <> "" Then ...

Donc heureusement que tu as bien fait de venir sur XLD car ici, c'est assez rare qu'il n'y ait pas d'heureux dénouement
ForumXLD.gif


Bonne soirée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
314 083
Messages
2 105 562
Membres
109 387
dernier inscrit
Thaliemandarine