Adapter cette macro à d'autres feuilles

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

Bnjour anasimo,

à tester

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
  Dim ws As Worksheet
  For Each ws In ThisWorkbook.Worksheets
  If ws.Name <> "Utilisateurs" Then
  With ws
    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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  End If
  Next ws
End Sub

Bonne fin d'année

Oui ça marche juste dans ce fichier (PJ)...mais dans le fichier original (le propre) quand j'ai copié le code, la macro vérifie aussi les autres feuilles qui ne sont pas concernées par la vérification...donc faut préciser dans le code le nom des pages à vérifier

Salut anasimo,

Salut m3ellem1,

Mon but est de retoucher la macro pour élargir son utilisation vers les autres feuilles du classeur.

la macro vérifie aussi les autres feuilles qui ne sont pas concernées par la vérification

Faudrait savoir !

Quand tu te seras mis d'accord avec toi-même, tu nous renseigneras ?

A+

Don acte ...je ne savais pas qu'il allait mettre un tel code

Donc je récap je veux que la macro vérifie uniquement les feuilles qui sont dans le fichier PJ (qui sont nommées) sans que la macro touchent les autres feuilles à créer ultérieurement (ou déja présentes dans le fichier que j'utilise )

et merci encore une fois

Salut anasimo,

Salut curulis,

bonne année, bonne santé, meilleurs voeux pour l'année nouvelle

curulis a bien raison!, il faut toujour préciser le résultat/le but attendu.

bon essaie comme ca:

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
  Dim ws As Worksheet
  For Each ws In Sheets(Array("Agr", "Hat", "CA", "Att", "perso"))
  With ws
    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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  Next ws
End Sub

@+++

Bonjour

Bravo m3ellem1.....c'est exactement ce que je veux.

Est ce que je peux me permettre de te demander une autre faveur (dans la mesure du possible)....il m'a été demandé d'ajouter deux autres feuilles au classeur (CDD et CDI) comprenant le même tableau sauf que le code utilisateur se trouve cette fois sur la colonne L (c'est comme que les 2 tableaux me parviennent d'une autre entité).

Si tu peux me faire cette faveur sans que je sois obligé dupliqué la macro encore une fois.

je te met en joint le nouveau fichier

Merci infiniment

j'ai juste dupliquer ton code et ça marche....mais je la trouve aussi trop longue ....si tu peux supprimer les doublons

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
  Dim ws As Worksheet
  For Each ws In Sheets(Array("Agr", "Hat", "CA", "Att", "perso"))
  With ws
    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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  Next ws

  '-----utilisateurs CCD et CDI

  For Each ws In Sheets(Array("CDD", "CDI"))
  With ws
    Set Plage = .Range("L2", .Cells(.Rows.Count, 12).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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  Next ws

End Sub

Salut anasimo,

essaie comme ca

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
  Dim ws As Worksheet
  For Each ws In Sheets(Array("Agr", "Hat", "CA", "Att", "perso", "CDD", "CDI"))
  With ws
    If ws.Name = "CDD" Or ws.Name = "CDI" Then
      Set Plage = .Range("L2", .Cells(.Rows.Count, 12).End(xlUp))
    Else
      Set Plage = .Range("J2", .Cells(.Rows.Count, 10).End(xlUp))
    End If

  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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  Next ws
End Sub

Bonne nuit

Merci beaucoup M3ellem1.....ça marche très bien

Re

Dernière question...ou si kelk1 peut apporter son aide

2 autres feuilles ont été ajoutées ce matin (stage et Temp) concernant leurs colonnes F....je ne sais pas comment les ajouter ou dans kel endroit le mettre

If ws.Name = "Stage" Or ws.Name = "Temp" Then
      Set Plage = .Range("F2", .Cells(.Rows.Count, 6).End(xlUp))

bien sur je vais les ajouter dans

Dim ws As Worksheet
  For Each ws In Sheets(Array("Agr", "Hat", "CA", "Att", "perso", "CDD", "CDI", "Stage", "Temp"))

Salut Anasimo,

je ne sais pas qui gère ces onglets mais serait-il envisageable de demander/prévoir que ces onglets à vérifier adoptent une règle permettant à un code générique de les prendre en compte automatiquement ?

Exemple :

  • Stage_F (pour colonne F) ;
  • CDD_L (pour colonne L).
L'underscore (_) serait alors le symbole permettant au code de trier le bon grain de l'ivraie.

Tu serais tranquille à vie!

A+

Oui peut-être...mais le code de m3ellem est bien fait...j'attends juste qu'il insère ce bout de code pour finaliser définitivement le travail

Salut anasimo,

si tu veux pas faire ce que Curulis (que je salue ) à proposer, alors essaie ca autrement:

en cherchant la colonne "Code utilisateurs" de chaque feuille! C'est plus pratique!

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, DerCol As Long, DerLigne As Long
  Dim ws As Worksheet
  Dim Position As Range
  Dim strEntete As String

  For Each ws In Sheets(Array("Agr", "Hat", "CA", "Att", "perso", "CDD", "CDI", "stage", "Temp"))
  With ws
        strEntete = "Code utilisateur" 'l'entête de la colonne souhaitée
        DerCol = .Cells(1, .Columns.Count).End(xlToLeft).Column ' trouver la dernièe colonne non vide
        Set Position = .Range(.Cells(1, 1), .Cells(1, DerCol)).Find(strEntete) ' trouver la colonne où les codes utilsateurs se trouvent
        DerLigne = .Cells(.Rows.Count, Position.Column).End(xlUp).Row ' calculer la dernière ligne de la colonne trouvée
        Set Plage = .Range(.Cells(2, Position.Column), .Cells(DerLigne, Position.Column))
  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) dans la feuille " & ws.Name
    Else
      MsgBox "Pas de nouveau utilisateur dans la feuille " & ws.Name
    End If
  End With
  Next ws
End Sub

@++

Trop fort m3ellem1... Merci beaucoup pour ton aide

SAlut m3ellem1...consulte stp ton PM

SAlut m3ellem1...consulte stp ton PM

Salut anasimo,

oui mais là les colonnes qu'on cherche sont "Code utilisateur" et non pas "Cre par CF"

Bonne journée

oui bien vu

maintenant on modifiant les nom des colonnes ...ça marche très très bien

Merci beaucoup M3ellem1

Excellent

Re

Juste une petite aide dans la mesure du possible....

dans la colonne qui recense les utilisateurs j'aimerais qu'il vérifie juste les utilisateurs ayant un code numérique

par exemple dans ma colonne y un code 1500. s'il trouve les code 1500-jean ou 1500-E ou 1500A dans les autres feuilles, la macro ne doit pas les ajouter comme nouveaux utilisateurs.

Merci beaucoup

Rechercher des sujets similaires à "adapter cette macro feuilles"