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

  • Initiateur de la discussion Initiateur de la discussion Violaine
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Tableau
Réponses
5
Affichages
149
Réponses
7
Affichages
316
Retour