VBA Journée - Date

Bonjour à tous !

J'espère que vous vous portez bien en cette période difficile.

J'ai besoin de vous pour ce code :

Sub test()

End Sub

Ce code s'applique uniquement sur la feuille activée et j'aimerai pouvoir l'utiliser sur les onglets que je sélectionne sur ma feuille de calcul. Pas toutes les feuilles mais seulement celles que j'aurai sélectionné au préalable pour y appliquer la macro.

Je vous remercie par avance de votre retour !

Laplacea

11test-flash-date.xlsm (277.94 Ko)

Bonjour,

Une proposition en PJ.

Le traitement se fait sur l'onglet passé en paramètre.

Public Sub Test(poOnglet As Worksheet)

   With poOnglet                                              'agit sur l'onglet

Bouben

Bonjour,

Merci de ton retour et de ton aide !

Ca ne marche par car j'aimerai que tout le code listé dans le premier message de la discussion puisse se réaliser sur chaque onglet que j'aurai séléctionné avant d'utiliser la macro.

Je n'obtiens ce resultat avec la macro que tu as proposé. Il ajoute des colonnes mais n'effectue pas la macro sur les onglets que j'ai pu selectionner avant.

Est-il possible de le faire ?

Je te remercie beaucoup pour ton aide et à tous ceux qui liront ce message !

Bien à vous et prenez soin de vous.

Laplacea

Bonsoir,

Dans le fichier envoyé :

> le nom de l'onglet est passé en paramètre

> la procédure est reprise telle quelle, en se basant non plus sur "ActiveSheet ", mais sur l'onglet passé en paramètre.

Pour lancer la procédure sur l'onglet X ou sur n onglets différents, il suffit d'appeler la procédure avec l'onglet (ou les onglets) en paramètre.

Un exemple est fourni, dans la procédure "XXXX", avec un seul onglet, il reste à dupliquer la ligne, avec tous les onglets à traiter

Public Sub XXXX()

    Test Worksheets("14-15")

End Sub

Tu as bien pris en compte ces différents points, avant de conclure que "ça ne marche pas"

Si oui, merci de préciser davantage le résultat attendu ...

Bouben

Bonjour,

Si j'ai bien compris tu souhaites que ta macro s'exécute uniquement sur les onglets sélectionnés.

Pour cela tu peux utiliser une procédure VBA qui boucle sur les onglets sélectionnés uniquement

Exemple de boucle:

Sub Traitement()

Dim F As Worksheet

For Each F In ActiveWindow.SelectedSheets

test F

Next F

End Sub

Ta procédure test est appelée dans la boucle et passe en paramètre la variable F qui représente l'onglet sélectionné en cours.

Dans ta procédure TEST il faut alors réceptionner la variable F et remplacer ActiveSheeet par F

exemple:

Sub test(F As Worksheet)

Dim derlig As Long

Application.ScreenUpdating = False

With F 'agit sur la feuille active

If F.Name <> "Exemple" Then 'si le nom de la feuille est différent de Exemple

derlig = .Range("D" & Rows.Count).End(xlUp).Row 'dernière ligne utilisée de la colonne D

Etc...

Bien cordialement,

Bonjour tout le monde,

Un essai....les onglets sont selectionnés manuellement avant d'exécuter la macro...

Sub test()
 Dim derlig As Long
 Dim sh As Worksheet

Application.ScreenUpdating = False

 For Each sh In ActiveWindow.SelectedSheets
  If sh.Name <> "Exemple" Then 'si le nom de la feuille selectionnée est différent de Exemple
    sh.activate
   derlig = sh.Range("D" & Rows.Count).End(xlUp).Row 'dernière ligne utilisée de la colonne D

   sh.Columns("B:B").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'insert une colonne à gauche de la colonne B
   sh.Columns("C:C").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'insert une colonne à gauche de la colonne C

   sh.Range("B2") = "Série H": sh.Range("B2").Interior.ColorIndex = 6 'titre et couleur colonne B
   sh.Range("C2") = "Série A": sh.Range("C2").Interior.ColorIndex = 6 'titre et couleur colonne C

   sh.Range("B3").FormulaR1C1 = "=COUNTIF(R3C[3]:RC[4],RC[3])" 'ta formule en B3
   sh.Range("B3:B" & derlig).FillDown 'on tire la formule jusqu'à la dernière ligne
   sh.Range("C3").FormulaR1C1 = "=COUNTIF(R3C[2]:RC[3],RC[3])" 'ta formule en C3
   sh.Range("C3:C" & derlig).FillDown 'on tire la formule jusqu'à la dernière ligne
   sh.Columns("B:C").HorizontalAlignment = xlCenter 'centrer horizontalement sur colonnes B et C
  End If 'fin de la condition
 Next sh
End Sub

EDIT: Oups! En fait c'est la même réponse que GNIN, , désolé, j'ai répondu trop vite.

Cordialement,

Re,

La réponse que je t'avais apportée (après moult tentatives, ) ne te satisfait donc plus ?

https://forum.excel-pratique.com/viewtopic.php?p=852845#p852845

Un essai à partir de ma dernière proposition....

  • Sélectionnes tes onglets
  • CTRL + e pour exécuter la macro...
3macro-serie-v3.xlsm (537.14 Ko)

Cordialement,

Hello à tous ! J'espere que vous vous portez bien

Merci pour vos retours !

xorsankukai, je souhaitais éviter de te sursolliciter ahah ! Je voulais ajouter un élément par rapport au post précédent.

En tout cas tu es toujours aussi réactif !

Peux-tu réaliser la même chose sur les onglets sélectionnés avant d'utiliser la macro avec le code suivant :

" Option Explicit

"

Je te remercie par avance !

Laplacea

Avec un fichier test en PJ

Merci d'avance !

6test-macro.xlsm (297.88 Ko)

Re,

Ton fichier en retour.....à tester (j'ai fait la modif.sur les 3 macros).....

Il suffisait de remplacer

With ActiveSheet
End With

par

For Each sh In ActiveWindow.SelectedSheets
sh.activate
'le code
next sh

Et rajouter

sh

devant les

.cells
Option Explicit
Sub Macro1()
'
Dim nbserie&, i&, j&, dl&, ng&
Dim sh As Worksheet

nbserie = 3                                                               ' nbseries à créer, progression linéaire

For Each sh In ActiveWindow.SelectedSheets
         sh.Activate
    dl = sh.Cells(Rows.Count, 2).End(xlUp).Row                            'dl= dernière ligne utilisée en colonne 2 (colonne B)

 For j = 1 To nbserie                                                     ' titre colonne en ligne 2
      sh.Cells(2, 6 + j * 2) = "Serie"
      sh.Cells(2, 5 + j * 2) = j + 0.5
 Next j

 For i = 3 To dl                                                          'on parcourt toutes les lignes
   If sh.Cells(i, 2) = "" Then Exit For                                   'on quitte la boucle si journée=""
 ng = sh.Cells(i, 4) + sh.Cells(i, 5)                                     'ng nombres de goals =somme colonne D+colonne E pour la ligne i
      sh.Cells(i, 6) = ng                                                 'mettre nombre de goals en colonne F

 For j = 1 To nbserie                                                     ' nbseries à créer
   If ng > j + 0.5 Then                                                   'test si nombre de goals supérieur à la valeur pivot pour la série j ( donc 1.5 pour série 1, 2.5 pour série 2, ....)
    If sh.Cells(i - 1, 3) = sh.Cells(i, 3) Then                           'equipe sur la ligne = equipe sur la ligne précédente
       sh.Cells(i, 6 + j * 2) = sh.Cells(i - 1, 6 + j * 2) + 1            'incremente compteur de la série
    Else
       sh.Cells(i, 6 + j * 2) = 1                                         'initialise compteur à 1
    End If
       sh.Cells(i, 5 + j * 2) = "Oui"                                     'score pivot dépassé
   Else
       sh.Cells(i, 6 + j * 2) = 0                                         'initialise compteur à 0
       sh.Cells(i, 5 + j * 2) = "Non"                                     'score pivot pas dépassé
   End If
 Next j                                                                   'série suivante
 Next i                                                                   'ligne suivante
Next sh
End Sub

Cordialement,

Bonjour à tous

proposition similaire :

En reprenant mon post d'hier, en ajoutant les feuilles sélectionnées,

Public Sub XXXX()

    Dim oSh As Worksheet

    For Each oSh In ActiveWindow.SelectedSheets
        Test oSh
    Next oSh

End Sub

NB : dans la procédure test, si tu as pris le temps de regarder (!), les "." étaient ajoutés pour être sur le bon onglet.

Bouben

Rechercher des sujets similaires à "vba journee date"