Votre question
Résolu

Récupérer des données en fonction du nom de la feuille excel

Tags :
  • Microsoft Excel
  • Visual basic
  • Programmation
Dernière réponse : dans Programmation
24 Avril 2014 17:08:18

Bonjour,

Pour des besoins pro, je souhaiterai mettre en place une macro pour récupérer un bon nombre de résultats.

Je dispose d'un classeur excel avec plusieurs feuilles nommées ainsi :
BilanGlobal
Bilan20
Bilan120
20_z_1
20_z_2
20_z_...
120_z_1
120_z_2
120_z_...

Je voudrais récupérer des valeurs dans les feuilles 20_z_... et 120_z_... et les copier dans la feuille Bilan20 pour les feuilles 20_z_... et Bilan120 pour les feuilles 120_z_..., sachant que je ne connais pas le nombre de feuilles.

J'espère avoir été clair et que quelqu'un pourra m'aider.

Merci par avance

Franck

Autres pages sur : recuperer donnees fonction nom feuille excel

Meilleure solution

24 Avril 2014 18:33:23

A force de chercher et d'essayer de nouveau code j'ai enfin trouvé la solution par moi même.

Je la diffuse au cas ou quelqu'un serait intéressé.

Sub essai2()
Dim v As Integer
For i = 4 To Sheets.Count
If InStr(Sheets(i).Name, "OCS20") <> 0 Then
Sheets("BILAN OCS20").Select
v = 1
While (Cells(v, 1).Value <> "")
v = v + 1
Wend
Cells(v, 1).Value = Sheets(i).Name
Sheets("BILAN OCS20").Cells(v, 2).Value = Sheets(i).Range("B17").Value
Sheets("BILAN OCS20").Cells(v, 3).Value = Sheets(i).Range("B18").Value
Sheets("BILAN OCS20").Cells(v, 4).Value = Sheets(i).Range("B19").Value
Sheets("BILAN OCS20").Cells(v, 5).Value = Sheets(i).Range("B20").Value
Sheets("BILAN OCS20").Cells(v, 6).Value = Sheets(i).Range("B21").Value
Sheets("BILAN OCS20").Cells(v, 7).Value = Sheets(i).Range("B22").Value
Sheets("BILAN OCS20").Cells(v, 8).Value = Sheets(i).Range("B23").Value
Sheets("BILAN OCS20").Cells(v, 9).Value = Sheets(i).Range("B24").Value
Sheets("BILAN OCS20").Cells(v, 10).Value = Sheets(i).Range("B25").Value
Sheets("BILAN OCS20").Cells(v, 11).Value = Sheets(i).Range("B26").Value
Sheets("BILAN OCS20").Cells(v, 12).Value = Sheets(i).Range("B29").Value
Sheets("BILAN OCS20").Cells(v, 13).Value = Sheets(i).Range("B30").Value
Sheets("BILAN OCS20").Cells(v, 14).Value = Sheets(i).Range("B31").Value
Sheets("BILAN OCS20").Cells(v, 15).Value = Sheets(i).Range("C43").Value
Sheets("BILAN OCS20").Cells(v, 16).Value = Sheets(i).Range("D43").Value
Sheets("BILAN OCS20").Cells(v, 17).Value = Sheets(i).Range("E43").Value
Sheets("BILAN OCS20").Cells(v, 18).Value = Mid(Sheets(i).Range("A13").Value, 35)
End If
If InStr(Sheets(i).Name, "OCS120") <> 0 Then
Sheets("BILAN OCS120").Select
v = 1
While (Cells(v, 1).Value <> "")
v = v + 1
Wend
Cells(v, 1).Value = Sheets(i).Name
Sheets("BILAN OCS120").Cells(v, 2).Value = Sheets(i).Range("B17").Value
Sheets("BILAN OCS120").Cells(v, 3).Value = Sheets(i).Range("B18").Value
Sheets("BILAN OCS120").Cells(v, 4).Value = Sheets(i).Range("B19").Value
Sheets("BILAN OCS120").Cells(v, 5).Value = Sheets(i).Range("B20").Value
Sheets("BILAN OCS120").Cells(v, 6).Value = Sheets(i).Range("B21").Value
Sheets("BILAN OCS120").Cells(v, 7).Value = Sheets(i).Range("B22").Value
Sheets("BILAN OCS120").Cells(v, 8).Value = Sheets(i).Range("B23").Value
Sheets("BILAN OCS120").Cells(v, 9).Value = Sheets(i).Range("B24").Value
Sheets("BILAN OCS120").Cells(v, 10).Value = Sheets(i).Range("B25").Value
Sheets("BILAN OCS120").Cells(v, 11).Value = Sheets(i).Range("B26").Value
Sheets("BILAN OCS120").Cells(v, 12).Value = Sheets(i).Range("B27").Value
Sheets("BILAN OCS120").Cells(v, 13).Value = Sheets(i).Range("B28").Value
Sheets("BILAN OCS120").Cells(v, 14).Value = Sheets(i).Range("B31").Value
Sheets("BILAN OCS120").Cells(v, 15).Value = Sheets(i).Range("B32").Value
Sheets("BILAN OCS120").Cells(v, 16).Value = Sheets(i).Range("B33").Value
Sheets("BILAN OCS120").Cells(v, 17).Value = Sheets(i).Range("C47").Value
Sheets("BILAN OCS120").Cells(v, 18).Value = Sheets(i).Range("D47").Value
Sheets("BILAN OCS120").Cells(v, 19).Value = Sheets(i).Range("E47").Value
Sheets("BILAN OCS120").Cells(v, 20).Value = Mid(Sheets(i).Range("A13").Value, 35)
End If
Next i
End Sub
partage
a b L Programmation
25 Avril 2014 16:58:43

Ouhlala, c'est pas beau.
(Même si je t'ai validé comme Meilleure Réponse ;)  )

Si tu écris plus de deux fois la même ligne, c'est que tu aurais pu mettre une boucle !

Regarde :

  1. Sub essai3()
  2. Dim v As Integer
  3. Dim j As Long
  4. Dim m As Integer
  5. Dim n As Integer
  6.  
  7. Dim ws As Worksheet
  8. Dim ws_bilan As Worksheet
  9. Set ws_bilan = Worksheets("BILAN OCS20")
  10.  
  11. For Each ws In Worksheets
  12.  
  13. Select Case True
  14. Case ws.Name Like "*OCS20*" : m = 0 : n = 0
  15. Case ws.Name Like "*OCS120*" : m = 2 : n = 4
  16. Case ws.Index > 4 : m = -1
  17. Case Else : m = -1
  18. End Select
  19.  
  20. If m >= 0 Then
  21. v = 1
  22. Do While Cells(v, 1).Value <> ""
  23. v = v + 1
  24. Loop
  25.  
  26. ws_bilan.Cells(v, 1).Value = Worksheets(i).Name
  27. ws_bilan.Cells(v, 18+m).Value = Mid(Worksheets(i).Range("A13").Value, 35)
  28.  
  29. For j = 0 To 9 + m
  30. ws_bilan.Cells(v, j + 2).Value = Worksheets(i).Cells(j + 17, 2).Value
  31. Next
  32.  
  33. For j = 0 To 2
  34. ws_bilan.Cells(v, j+12).Value = Worksheets(i).Cells(j + 29 + m, 2).Value
  35. Next
  36.  
  37. For j = 0 To 2
  38. ws_bilan.Cells(v, j+15).Value = Worksheets(i).Cells(43 + n, j+3).Value
  39. Next
  40. End If
  41. Next
  42. End Sub
m
0
l