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
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
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).
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
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
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