Adapter l'utilisation de la macro à d'autres feuilles

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 !

anasimo

XLDnaute Occasionnel
bonjour


J'ai déja 1 macro dans mon classeur qui me permet de vérifier s'il y a un nouveau utilisateur qui apparaît dans la feuille 2 "Agr" colonne J et qui ne figure pas dans la liste figurant dans la feuille "utilisateurs" colonne H. Le but est de le détecter et l'ajouter à la liste ultérieurement ....jusqu'à maintenant tout fonctionne bien.
Mon but est de retoucher la macro pour élargir son utilisation vers les autres feuilles du classeur.


Merci
 

Pièces jointes

Bonjour Anasimo,
On peut balayer toutes les feuilles avec le module ci dessous.
Il faut faire attention à ne pas traiter toutes les pages, comme par ex Utilisateurs.
La macro qui traite la page est à mettre en "Faire travail sur la page en cours"

VB:
Sub Consolidation()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets                         ' Pour toutes les feuilles du classeur
    If Sh.Name = "Utilisateurs" Then GoTo EndConsolidation   ' car feuille Utilisateurs n'est pas a traitée.
    NomFeuille = Sh.Name
    
    'Faire travail sur la page en cours
    
EndConsolidation:
Next Sh                                                      ' Feuille suivante
End Sub
 
par contre ce que je peux faire c'est ça tripler la macro 🙂
VB:
Sub Alerte()
  Dim Ligne As Long, C As Range, Plage As Range, Tabl As Variant, I As Long, Teste As Boolean
  Dim Tot As Long
  With Sheets("Agr")
    Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
  End With
  With Sheets("Utilisateurs")
    Ligne = .Cells(.Rows.Count, 8).End(xlUp).Row
    Tabl = Application.Transpose(.Range("H2:H" & Ligne))
    For Each C In Plage
      For I = 1 To UBound(Tabl)
        Teste = False
        If C = Tabl(I) Then
          Teste = True
          Exit For
        End If
      Next I
      If Teste = False Then
        Ligne = Ligne + 1
        .Cells(Ligne, 8) = C.Value
        Tabl = Application.Transpose(.Range("H2:H" & Ligne))
        Tot = Tot + 1
      End If
    Next C
    If Tot > 0 Then
      MsgBox Tot & " nouveaux utilisateur(s)"
    Else
      MsgBox "Pas de nouveau utilisateur"
    End If
  End With
 
  '-----------page Hat
  With Sheets("Hat")
    Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
  End With
  With Sheets("Utilisateurs")
    Ligne = .Cells(.Rows.Count, 8).End(xlUp).Row
    Tabl = Application.Transpose(.Range("H2:H" & Ligne))
    For Each C In Plage
      For I = 1 To UBound(Tabl)
        Teste = False
        If C = Tabl(I) Then
          Teste = True
          Exit For
        End If
      Next I
      If Teste = False Then
        Ligne = Ligne + 1
        .Cells(Ligne, 8) = C.Value
        Tabl = Application.Transpose(.Range("H2:H" & Ligne))
        Tot = Tot + 1
      End If
    Next C
    If Tot > 0 Then
      MsgBox Tot & " nouveaux utilisateur(s)HAt"
    Else
      MsgBox "Pas de nouveau utilisateur HAT"
    End If
  End With
 
  '----------------- page CA
  With Sheets("CA")
    Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
  End With
  With Sheets("Utilisateurs")
    Ligne = .Cells(.Rows.Count, 8).End(xlUp).Row
    Tabl = Application.Transpose(.Range("H2:H" & Ligne))
    For Each C In Plage
      For I = 1 To UBound(Tabl)
        Teste = False
        If C = Tabl(I) Then
          Teste = True
          Exit For
        End If
      Next I
      If Teste = False Then
        Ligne = Ligne + 1
        .Cells(Ligne, 8) = C.Value
        Tabl = Application.Transpose(.Range("H2:H" & Ligne))
        Tot = Tot + 1
      End If
    Next C
    If Tot > 0 Then
      MsgBox Tot & " nouveaux utilisateur(s)CA"
    Else
      MsgBox "Pas de nouveau utilisateur CA"
    End If
  End With
 
  '--------------page Att
  With Sheets("Att")
    Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
  End With
  With Sheets("Utilisateurs")
    Ligne = .Cells(.Rows.Count, 8).End(xlUp).Row
    Tabl = Application.Transpose(.Range("H2:H" & Ligne))
    For Each C In Plage
      For I = 1 To UBound(Tabl)
        Teste = False
        If C = Tabl(I) Then
          Teste = True
          Exit For
        End If
      Next I
      If Teste = False Then
        Ligne = Ligne + 1
        .Cells(Ligne, 8) = C.Value
        Tabl = Application.Transpose(.Range("H2:H" & Ligne))
        Tot = Tot + 1
      End If
    Next C
    If Tot > 0 Then
      MsgBox Tot & " nouveaux utilisateur(s)Att "
    Else
      MsgBox "Pas de nouveau utilisateur Att"
    End If
  End With
 
  '-----------page perso
 
  With Sheets("perso")
    Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
  End With
  With Sheets("Utilisateurs")
    Ligne = .Cells(.Rows.Count, 8).End(xlUp).Row
    Tabl = Application.Transpose(.Range("H2:H" & Ligne))
    For Each C In Plage
      For I = 1 To UBound(Tabl)
        Teste = False
        If C = Tabl(I) Then
          Teste = True
          Exit For
        End If
      Next I
      If Teste = False Then
        Ligne = Ligne + 1
        .Cells(Ligne, 8) = C.Value
        Tabl = Application.Transpose(.Range("H2:H" & Ligne))
        Tot = Tot + 1
      End If
    Next C
    If Tot > 0 Then
      MsgBox Tot & " nouveaux utilisateur(s) perso"
    Else
      MsgBox "Pas de nouveau utilisateur perso"
    End If
  End With
End Sub
 
Voir PJ.
VB:
Public NomFeuille As String        ' Le nom en public est accessible par tous les modules'
Sub Consolidation()
Dim Sh As Worksheet
For Each Sh In ActiveWorkbook.Sheets                         ' Pour toutes les feuilles du classeur
    If Sh.Name = "Utilisateurs" Then GoTo EndConsolidation   ' car feuille Utilisateurs n'est pas a traitée.
    NomFeuille = Sh.Name                                     ' On memorise le nom de la feuille en cours'
    
    Alerte                                                     ' On lance le module Alerte'
    
EndConsolidation:
Next Sh                                                      ' Feuille suivante
End Sub
Sub Alerte()
  Dim Ligne As Long, C As Range, Plage As Range, Tabl As Variant, I As Long, Teste As Boolean
  Dim Tot As Long
  With Sheets(NomFeuille)       ' On traite comme auparavant mais avec la feuille en cours'
  ....
  ....
  ' Le reste ne change pas mis à part le msgbox pour avoir aussi le nom de la fauille traitée.
  ' A modifier si on veut éviter un msgbox à chaque feuille
 

Pièces jointes

On peut aussi tripler la macro. Mais si on rajoute des feuilles il faut rajouter une macro pour chaque feuille.
Mais dans le principe, vous pouvez faire comme vous le proposez. Le principal est de faire un truc qu'on maitrise.
A vous de voir.
 
Désolé....je viens juste de voir votre PJ

j'ai testé mais ça débug à ce niveau
debogage.JPG
 
J'ai cru que c'était vous qui aviez écrit la macro. Désolé. 🙁
En fait votre macro marchait très bien, donc je n'y ai pas touché. Juste adaptée. Donc ça fait ça :
VB:
Macro Consolidation
      Rechercher toutes les feuilles.
      Si feuille est "Utilisateurs" Ne rien faire Sinon
          Mettre le nom de la feuille trouvée dans NomFeuille
          Lancer éxecution de Alerte sur la feuille NomFeuille
      FinSi
Fin
Donc les deux macros doivent être conservées, et il faut lancer Consolidation qui appelera Alerte.
 
Quel intérêt ?
Aucun si ce n'est que la maintenance sera plus compliquée. Et qu'à la prochaine évolution vous vous demanderez ce que vous avez voulu faire.
Ca n'ira pas plus vite.

Si vous y tenez, vous remplacer Alerte dans le module Consolidation par le module Alerte.... puis vous débogguer car il y aura surement une petite adaptation à faire.
 
- 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

Discussions similaires

Réponses
7
Affichages
420
Réponses
9
Affichages
608
Retour