Répéter ma macro avec les cellules du bas

Bonjour

je souhaite répéter la macro ci-dessous avec les cellules du bas exemple pour range de I4 à I106 et pour Cell de Y7 à Y109. Merci d'avance.

le code :

Private Sub worksheet_activate()
Dim total As Long
Dim cell As Variant
For i = 6 To Sheets.Count
cell = Sheets(i).Range("Y7").Value
total = total + cell
Sheets("Suivi_Stock").Activate
Range("I4").Value = total
Next i
End Sub

Bonjour,

Excusez-moi, mais dans votre code actuel vous réécriver par-dessus le total (cellule I4) à chaque changement de feuille… Est-ce bien cela que vous souhaitez faire ?

Ensuite, voulez-vous bien retrouver en I5 la somme des Y8 de toutes les feuilles, puis en I6 des Y9… ?

C'est bien ça, ou alors vous voulez sommer les cellules Y7 à Y109 dans la cellule I4 ?

Merci.

Oui c'est exactement ça.

A chaque fois que je reviens sur la feuille Suivi Stock le calcul est fait.

Et du coup I4 = Y7

I5=Y6

ect...

pardon I5 = Y8 ...

etc....

Je vous propose la révision ci-dessous

Private Sub Worksheet_Activate()
  Dim runTotal(1 To 103) As Long
  Dim curVals As Variant

  Dim cell As Variant
  Dim i As Long, j As Long
  For i = 6 To ThisWorkbook.Worksheets.Count
    curVals = WorksheetFunction.Transpose(ThisWorkbook.Worksheets(i).Range("Y7:Y109").Value)

    For j = LBound(runTotal) To UBound(runTotal)
      runTotal(j) = runTotal(j) + curVals(j)
    Next j

  Next i

  ThisWorkbook.Worksheets("Suivi_Stock").Range("I4").Resize(UBound(runTotal) - LBound(runTotal) + 1).Value = _
  WorksheetFunction.Transpose(runTotal)
End Sub

Par contre attention, j'ai gardé votre typage en "Long", soit des entiers, si vos cellules contiennent des nombres à virgules ça peut planter, il faudrait remplacer par "Double".

Après pour info, vous pouvez aussi utiliser ce qu'on appelle les "formules 3D" dans Excel, pour référer à une plage de feuilles.

Càd que la formule ci-dessous effectue la somme des cellules A1 pour les feuilles 3 à 6

=SOMME(Feuil3:Feuil6!A1)

Il suffit juste de connaitre le nom de la feuille de départ et de celle d'arrivée. L'avantage c'est instantané et sans VBA.

Ça marche parfaitement. Merci beaucoup.

Que signifie "Dim runTotal(1 To 103) As Long" ?

ET si je rajoute des lignes ou dois-je apporter les modifications ?

Oui concernant la formule, j'y avais pensé mais le soucis c'est que je n'ai pas à l'avance le nom des onglets qui seront crées.

Re,

Ok dans ce cas oui VBA s'adapte mieux que la formule.

Ci-après le code revu, la seule chose à changer c'est la variable "PLAGE_SOMMEE" en haut, qui définit la colonne à sommer. Attention, il faut que ce soit une plage continue (style A1:A10, pas A1,A8,F7) sinon tu peux avoir des bugs.

Le reste s'adaptera automatiquement.

runTotal c'est un tableau qui va contenir, pour chaque cellule de la plage à sommer, la somme "courante", càd la somme des cellules pour les feuilles 6 à i.

Un tableau c'est une colonne Excel si tu veux (ou, pour être exact, une ligne, c'est pourquoi j'utilise Transpose) de longueur fixe (en l'occurrence dans le dernier code elle va de 1 à [le nombre de cellules dans la plage]).

Private Sub Worksheet_Activate()
  Dim PLAGE_SOMMEE As String: PLAGE_SOMMEE = "Y7:Y109"
  Dim runTotal() As Long
  ReDim runTotal(1 To Range(PLAGE_SOMMEE).Count)
  Dim curVals As Variant

  Dim cell As Variant
  Dim i As Long, j As Long
  For i = 6 To ThisWorkbook.Worksheets.Count
    curVals = WorksheetFunction.Transpose(ThisWorkbook.Worksheets(i).Range(PLAGE_SOMMEE).Value)

    For j = LBound(runTotal) To UBound(runTotal)
      runTotal(j) = runTotal(j) + curVals(j)
    Next j
  Next i

  ThisWorkbook.Worksheets("Suivi_Stock").Range("I4").Resize(UBound(runTotal)).Value = _
  WorksheetFunction.Transpose(runTotal)
End Sub

D'accord merci.

Vous pensez que je dois utiliser la 2eme macro que vous proposez ?

D'accord merci.

Vous pensez que je dois utiliser la 2eme macro que vous proposez ?

Ca c'est à vous de me le dire 😂

Pour clarifier : c'est exactement la même macro, je l'ai juste rendue plus facile à adapter puisqu'il suffit de modifier la plage Y7:Y109 en haut. J'ai fait en sorte que le reste du code le prenne en compte.

Donc si vous voulez déplacer votre plage, par exemple en D5:D1006, oui la 2e macro est plus facile à utiliser.

Si vous avez des interrogations n'hésitez pas, mais soyez précis : on y gagne tous les deux du temps.

EDIT : pour info, sur votre profil, la version d'Excel à renseigner est l'année/abonnement (pas la langue) : 2016/2021/365 ... Merci de le corriger.

Vous avez raison. Je prends l'option 2

J'ose vous demandez une aide supplémentaire;

j'aimerais que l'utilisateur du fichier puisse rechercher a partir d'une date (msgBox) le ou les onglets ou sont saisies la date sélectionnée.

Toujours a partir du 6eme onglet

Vous avez raison. Je prends l'option 2

J'ose vous demandez une aide supplémentaire;

j'aimerais que l'utilisateur du fichier puisse rechercher a partir d'une date (msgBox) le ou les onglets ou sont saisies la date sélectionnée.

Toujours a partir du 6eme onglet

Oui bien sûr, vous savez où se trouve la date sur la feuille ? Adresse de la cellule/plage, nom de la feuille ?

Quel retour voulez-vous ? Une liste des noms dans une colonne, une MsgBox, que les feuilles se sélectionnent/colorent en bas ?

Si vous pouviez joindre un fichier d'exemple, ce serait pratique.

Il y aura plusieurs dates sur chaque feuilles (nom de la feuille non défini, ce sera fait ultérieurement par l'utilisateur suivant le nom choisi) concernant la plage il s'agit de E6 à X6 pour le moment.

Par rapport au retour idéalement que la feuille ou les feuilles puissent s'ouvrir l'une après avec une flèche suivant par exemple

si cest possible

Par rapport au retour idéalement que la feuille ou les feuilles puissent s'ouvrir l'une après avec une flèche suivant par exemple

OK, dans ce cas il faudra utiliser un UserForm. Donc j'ai besoin que vous joigniez un fichier pour vous le transmettre.

je vous ai envoyé en MP, je ne sais pas si vous l'avez bien reçu

Rechercher des sujets similaires à "repeter macro bas"