Vba excel : besoin d'aide.

Résolu/Fermé
Juliette - 14 avril 2010 à 09:29
 Juliette - 14 avril 2010 à 14:58
Bonjour à tous,

Je débute sur excel et j'ai besoin de faire une macro VBA que je ne réussi pas à faire malgré l'aide excel assez bien faite.

En fait j'ai deux feuille (Feuil1 et Feuil2) avec deux listes, je voudrais creer une macro qui me permet d'effacer les lignes de la Feuil1 également présentes en Feuil2.

Merci d'avance pour ceux qui m'aideront ou essayeront de le faire.

A voir également:

4 réponses

jejelefou Messages postés 304 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 18 février 2016 42
14 avril 2010 à 11:51
re bonjour,

je ne sais pas trop, ets vous sûr qu'il n'y a qu'une seule occurance pour chaque ligne de la page 1 en page 2?

si vous ne l'êtes pas, il faudrait voir cette ligne :

If idem = 1 Then

en la transformant en

If idem > 0 Then

a+

jéjé
1
Je me suis mal expliqué. Les dix lignes présentes en feuille 2 égale à la ligne xmax ont été effacé mais la procédure s'arrete la.

Après moultes essais j'en suis arrivé à une petite conclusion. En fait si en feuille 2 a liste est : 1 - 2 - 3 - 4 - 5 il n'effacera que les 5 de la feuille 1 et si c'est 5-4-3-2-1 que les un. Il ne prend que la ligne fin de la liste de la feuille 2.
0
jejelefou Messages postés 304 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 18 février 2016 42
14 avril 2010 à 12:04
essaie ca :

Private Sub CommandButton3_Click()


xmax = Sheets("Factures en attente").Range("B65536").End(xlUp).Row
imax = Sheets("Archives régularisations").Range("B65536").End(xlUp).Row


For x = 2 To xmax
For I = 2 To imax

idem = 0
j = 2

If Worksheets("Archives régularisations").Cells(I, j) = Worksheets("Factures en attente").Cells(x, j) Then
idem = idem + 1
End If


If idem = 1 Then
Worksheets("Factures en attente").Unprotect (123)
Worksheets("Factures en attente").Rows(x).Delete
x = x - 1
End If
next
Next

End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
14 avril 2010 à 12:28
Bonjour,

Excusez l'incruste!

Juliette:
Les doublons feuil1-feuil2 sont ils sur la m^me ligne ?
faut il vérifier toute les 9 colonnes où il y-a-t-il une colonne "clé" (par exemple si la valeur colonne A feuille 1 est retrouvée dans la colonne A feuille 2, on supprime la ligne) ?

au besoin met un extrait de ton classeur sans données confidentielles sur
http://cijoint.fr/
et colles le lien proposé dans ta réponse
0
jejelefou Messages postés 304 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 18 février 2016 42
14 avril 2010 à 13:45
Bonjour michel

Je n'ai pas l'impression que les doublons soient sur la meme ligne, et s'ils le sont au debut, ils ne peuvent plus l'etre au milieu car les lignes sont supprimées au fur et a mesure que la macro trouve les doublons.

a+
jéjé
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
14 avril 2010 à 13:50
bonjour Jejelrfou
Tu ne crois pas que ce serait plutôt à Juliette de répondre? :-D
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
14 avril 2010 à 14:42
re,

ci dessous code à essayer

Sub effacer_doublons()
Dim derlig As Integer, cptr As Integer, cptr_t As Integer
Dim tablo
ReDim tablo(0)

With Sheets(1)
    derlig = .Range("B30000").End(xlUp).Row

For cptr = 1 To derlig
    If Application.CountIf(Sheets(2).Columns(2), .Cells(cptr, 2)) Then
        tablo(cptr_t) = cptr & ":" & cptr
        cptr_t = cptr_t + 1
        ReDim Preserve tablo(cptr_t)
    End If
Next
ReDim Preserve tablo(cptr_t - 1)

Application.ScreenUpdating = False
.Range(Join(tablo, ",")).Delete
End With
End Sub


peut être remplacer sheets(X) par sheets("nomdelonglet")
1
Parfait, celui-ci fonctionne à merveille. Merci beaucoup à tous les deux, vous m'enlevez une épine bien douloureuse du pied.

Bonne journée à vous !!!
0
jejelefou Messages postés 304 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 18 février 2016 42
14 avril 2010 à 09:38
Bonjour,

J'aurais besoin d'un peu plus d'infos pour resoudre ton pb :

combien de lignes sont à traiter?
combien de colonnes doivent etre inspectée?

merci

jéjé
0
En fait, le nombre de ligne est variable mais n'excede pas les 1000. C'est trop ? Les colonnes si possible 9.

Merci de prendre du temps pour mon problème jéjé.
0
jejelefou Messages postés 304 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 18 février 2016 42
14 avril 2010 à 10:29
re bonjour,

Voici ce que j'ai fait :

A vous de modifier imax et xmax. attention, des chiffres trops importants peuvent ralentir votre pc.


Sub compares()
'xmax est le nombre de ligne dans la feuille1
'imax est le nombre de ligne dans la feuille1
xmax = 100
imax = 100
For x = 1 To xmax

For i = 1 To imax
idem = 0
For j = 1 To 9
If Worksheets("feuil2").Cells(i, j) = Worksheets("feuil1").Cells(x, j) Then
idem = idem + 1
End If
Next

If idem = 9 Then
Worksheets("feuil1").Rows(x).Delete
x = x - 1
End If
Next
Next

End Sub
0
Merci jéjé, j'ai adapté le code à mon fichier et malhereusement seul une ligne a été effacé la dernière de la liste imax. Voyez-vous une possible explication ?

Private Sub CommandButton3_Click()


xmax = Sheets("Factures en attente").Range("B65536").End(xlUp).Row
imax = Sheets("Archives régularisations").Range("B65536").End(xlUp).Row


For x = 2 To xmax
For I = 2 To imax

idem = 0
j = 2

If Worksheets("Archives régularisations").Cells(I, j) = Worksheets("Factures en attente").Cells(x, j) Then
idem = idem + 1
End If
Next

If idem = 1 Then
Worksheets("Factures en attente").Unprotect (123)
Worksheets("Factures en attente").Rows(x).Delete
x = x - 1
End If
Next

End Sub

J'ai rendu, suite à votre conseil un peu plus léger mon code. Je ne suis qu'une débutante mais j'adore comprendre et avancer sur mes codes mais là je sèche.
0