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

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

  • Alerte utilisateur 21.xlsm
    23.5 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

anasimo

XLDnaute Occasionnel
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Copie de Alerte utilisateur 21-1.xlsm
    27.5 KB · Affichages: 6

anasimo

XLDnaute Occasionnel
Désolé....je viens juste de voir votre PJ

j'ai testé mais ça débug à ce niveau
debogage.JPG
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 973
Membres
103 073
dernier inscrit
MSCHOE16