Supression d'un membre inactif

heritias

XLDnaute Nouveau
Bonjour , dans notre association nous avons des groupes par région et je souhaiterai supprimer des membres d'un groupe quand celui ci n'est plus actif . Dans le fichier en piece jointe il y a un onglet avec les membres inactifs et un autre avec les groupes . dans l'onlet "groupe" je souhaite supprimer les lignes marquées d'une etoile car c'est un membre qui appartient à l'onglet "membre inactif" .

J'espere etre suffisamment claire . merci par avance de vos réponses . Une bonne journée à toutes et tous .
 

Pièces jointes

  • Associations.xlsm
    10.3 KB · Affichages: 51

Gorfael

XLDnaute Barbatruc
Re : Supression d'un membre inactif

Salut heritias et le forum
Code:
Sub test()
Dim Cel As Range, X As Long
With Sheets("Membre_inactif")
    For X = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
        Set Cel = Sheets("Groupe").Columns(3).Find(What:=.Range("A" & X), LookAt:=xlPart)
        If Not Cel Is Nothing Then Cel.EntireRow.Delete
    Next X
End With
End Sub
À ta place, je commencerai à regarder les perruques ;). Mettre un espace dans la feuille groupe devant le code des membres inactifs dénote une démarche qui finira par te faire t'arracher les cheveux pour résoudre des problèmes inexistants.
A+
 

xyam

XLDnaute Nouveau
Re : Supression d'un membre inactif

Salut,
je t'ai fait une petite macro :
Code:
Sub SuppressionMembreInactif()
'
'Macro permettant la suppression de membre inactif
'
'On parcour la feuille Groupe
    'Sélèction de la plage
    Sheets("Groupe").Select
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    fin = Selection.Rows.Count + Selection.Row - 1
    
For i = 2 To fin
Sheets("Groupe").Select
valeurGroupe = Range("C" & i).Value
        'On parcour la feuille Membre_inactif pour trouver correspondance
        'Sélèction de la plage
        Sheets("Membre_inactif").Select
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        fin2 = Selection.Rows.Count + Selection.Row - 1
        
        For y = 2 To fin2
        Sheets("Membre_inactif").Select
        valeurInactif = Range("A" & y).Value
        
        'Maintenant on test pour savoir si on trouve la même
        'Si oui on supprime
        If (valeurGroupe = valeurInactif) Then
            Sheets("Groupe").Select
            Rows(i & ":" & i).Select
            Selection.Delete Shift:=xlUp
            Exit For
        End If
        Next
Next
End Sub

Par contre attention tes valeurs dans la feuille groupe avaient un espace avant le R soit " R446..." Elles n'étaient donc pas identique à celle contenue dans Membre_inactif
En espérant t'avoir aidé

Edit : Ah doublé par toi Gorfael ;)
 

Pièces jointes

  • AssociationsModif.xlsm
    17.5 KB · Affichages: 63
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Supression d'un membre inactif

Salut xyam et le forum
Seulement une vingtaine de postes, et déjà en train d'aider. Dommage qu'il n'y ai pas plus de gens comme toi...
Petites "critiques" de ton code :
- essaie de supprimer les Select/Selection : il ne servent, en général, qu'à ralentir ton code et à le rendre illisible.
Code:
        Range("A2").Select
         Range(Selection, Selection.End(xlDown)).Select
est moins lisible que
Code:
        Range(Range("A2"), Range("A2").End(xlDown)).Select
- personnellement, je préfère "End(xlup)" : Le résultat dépend du contenu (vide ou non) des deux premières cellules. Or, les deux dernières d'une feuille, elles, sont pratiquement toujours vides, ce qui donne systématiquement le bon résultat.
- "valeurGroupe = Range("C" & i)" suffit : la propriété par défaut etant Value, inutile de la mettre
- Rows(i & ":" & i) : c'est égal à Rows(i)
- Rows(i) .Delete : tu peux omettre Shift:=xlUp, car comment excel pourrait faire autrement ?

Un prof m'a dit une fois qu'il fallait être feignant : c'est pas tombé dans l'oreille d'un sourd.
A+
 

xyam

XLDnaute Nouveau
Re : Supression d'un membre inactif

Re,

Merci pour les infos ;)
J'utilise souvent pour faire du pas à pas pour bien comprendre et après je désactive rafraîchissement et alertes
mais je retient pour les "Select/Selection" ;)
A oui logique pour le "End(xlup)"
J'ai détaillé pas mal pour la compréhension, mais je pensais pas qu'on pouvait être aussi feignant merci du coup pouce

et à bientôt sur le forum ;)
 

heritias

XLDnaute Nouveau
Re : Supression d'un membre inactif

Bonjour à toutes et tous ,merci pour ces réponses .

J'ai testé la macro de Xyam , elle fonctionne parfaitement bien sur mon fichier de test en revanche mon fichier réel comporte 306248 lignes dans l'onglet "Groupe" et 14536 lignes dans l'onglet "Membre_inactif" , en utilisant la macro sur ces donnees , excel n'a plus répondu , j'ai du l'arréter au bout de 45 minutes . y'a t'il des améliorations à faire dans ce codes afin qu'il puisse utiliser le fichier réel ?
j'ai déja remplacé :
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
Par : Range(Range("A2"), Range("A2").End(xlDown)).Select comme suggeré par Gorfael

Merci par avance de vos réponses . Bonne journée
 

heritias

XLDnaute Nouveau
Re : Supression d'un membre inactif

Bonjour et désolé , je vais commencer par apprendre à lire et à ecouter les experts !!!!

Sans le BLANC devant ma référence de membre cela va beaucoup mieux .....

Merci beaucoup de votre aide

Bonne journée
 
Dernière édition:

heritias

XLDnaute Nouveau
Re : Supression d'un membre inactif

Bonjour, je reviens sur cette discussion. En effet , il me faut 5 minutes de traitement par membre , sachant que j'ai 14536 membres à supprimer cela risque de durée plusieurs jours ... Est t'il possible d'améliorer ce script ? j'ai tester le script de gorfael , il est beaucoup plus rapide en revanche il supprime uniquement la premiere itération du membre . le membre à supprimer peut exister plusieurs fois.

Merci de votre aide . Bonne journée
 

Gorfael

XLDnaute Barbatruc
Re : Supression d'un membre inactif

Salut heritias et le forum
le membre à supprimer peut exister plusieurs fois.
En donnant des informations partielles, on a une réponse partielle
Code:
Sub test()
Dim Cel As Range, X As Long
With Sheets("Membre_inactif")
    For X = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
        Do
            Set Cel = Sheets("Groupe").Columns(3).Find(What:=.Range("A" & X), LookAt:=xlPart)
            If Cel Is Nothing Then
                Exit Do
            Else
                Cel.EntireRow.Delete
            End If
        Loop
    Next X
End With
End Sub
J'ai pas testé.
A+
 

Statistiques des forums

Discussions
312 491
Messages
2 088 888
Membres
103 982
dernier inscrit
krakencolas