Suppression de ligne sous excel

Résolu/Fermé
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010 - 2 juin 2009 à 11:45
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010 - 3 juin 2009 à 11:25
Bonjour,
J'ai 2 tables de pseudo( chacune sur un feuille).
Le but est de supprimer les lignes de la feuille 2 quand les pseudos existe déjà dans la feuille 1.
Ayant peu de connaissance sous Vba je patauge .
j'ai pour l'instant fait :
Sub supp()
Dim val1, val2 As Integer
Dim i, j, imax2, imax1 As Integer
Dim t, p As Integer
i = 3
j = 3
imax1 = 1728
imax2 = 2157
p = 0
t = 0

For t = Feuil2.Cells(0, i) To Feuil2(0, imax1) Step 1

val1 = Feuil1.Cells(0, i)
i = i + 1
For p = Feuil1.Cells(0, i) To Feuil1(0, imax2) Step 1
val2 = Feuil1.Cells(0, i)
j = j + 1
If val1 = val2 Then
Feuil2.Rows(i).Delete
End If
Next
Next
End Sub
Bien sur sa ne marche pas!!
Donc si quelqu'un peu m'aider.
Merci d'avance.
A voir également:

8 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2009 à 12:15
Bonjour

essaies cette procédure
Sub pseudoendouble()
Dim col_sh1 As Byte, col_sh2 As Byte
Dim derlig As Long, cptr As Long, lig As Long
Dim pseudo As String
'initialisation des colonnes (colonne C dans cet exemple)
col_sh1 = 3
col_sh2 = 3
'fige le défilement de l'écran
Application.ScreenUpdating = False
With Sheets(1)
'denière ligne dans la feuil1
derlig = .Cells(65536, col_sh1).End(xlUp).Row
    For cptr = 1 To derlig
        pseudo = .Cells(cptr, col_sh1)
        With Sheets(2)
            'si pseudo est dans la feuil2 (nombre =1)
            If Application.CountIf(.Columns(col_sh2), pseudo) = 1 Then
                'ligne ou se trouve le doublon dans feiuill2
                lig = .Columns(col_sh2).Find(pseudo, .Cells(65536, col_sh2)).Row
                'suppression de la ligne
                Rows(lig).Delete
            End If
        End With
    Next
End With
'défige l'écran
Application.ScreenUpdating = True
MsgBox "suppression des pseudos en feuil2 réussie"
End Sub

0
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010
2 juin 2009 à 14:13
Merci de ta réponse aussi rapide.
j'ai juste changer
col_sh1 = 3
col_sh2 = 3
par
col_sh1 = 1
col_sh2 = 1
Car les caractère se trouve dans la colonne a.
Le seule problème c'est que sa les a retiré dans la feuille 1 alors que je voulais dans la feuille 2.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2009 à 14:41
J'avais faim! (excuse facile)

ajoute cette ligne en gras

'initialisation des colonnes (colonne C dans cet exemple)
col_sh1 = 3
col_sh2 = 3
Sheets(2).Activate
0
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010
2 juin 2009 à 14:47
Bon problème régler cela dit je ne comprend pas tout .
Te serait il possible de m'expliquer quelque truc.
Encore Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2009 à 14:48
Quels trucs ?
0
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010
2 juin 2009 à 18:34
En quoi consiste le With et pourquoi choisir byte ou long pour les variables.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 juin 2009 à 21:17
1/ pour les variables

Byte est un type d'entiers entre 1 et 256 (ou 0 et 255); XL<2007 comporte 256 colonnes donc Byte suffit
par contre, pour les lignes on peut avoir 65536 et integer ne va qu'à 2^7.Sur les forums où on ne sait pas le nombre de lignes utilisés, on met un "long" mais c'est à toi de décider byte, integer, long suivant ton appli

Le + léger étant le + profitable (occupation mémoire) mais sur des petites macros on s'en moque un peu...

2/ With
aide microsoft:
"L'instruction With permet de spécifier un objet ou un type défini par l'utilisateur pour une série d'instructions. Les instructions With accélèrent l'exécution des procédures et permettent d'éviter des saisies répétitives."*
sans le with on aurait

derlig = sheets(1).Cells(65536, col_sh1).End(xlUp).Row
    For cptr = 1 To derlig
        pseudo = sheets(1).Cells(cptr, col_sh1)


D'autre part, cela évite de basculer d'une feuille à une autre plusieurs fois par macro avec des "actrvate" ou "select" très lents
Le piège est de ne pas oublier ici les points devant les range et cells ou toute autre propriété concerné par l'objet utilisant With . C'est d'ailleurs pour cela que ça effaçait dans sheets(1): oubli du point devant row(lig).delete qui fait que la ligne est supprimée dans la feuille active...

A ce propos, on pouvait se passer de With sheets(2) car on a activé sheets(2) au départ

ce qui donne
sheets(2).activate
...
pseudo = .Cells(cptr, col_sh1)
        
            'si pseudo est dans la feuil2 (nombre =1)
            If Application.CountIf(Columns(col_sh2), pseudo) = 1 Then
                'ligne ou se trouve le doublon dans feiuill2
                lig = Columns(col_sh2).Find(pseudo, Cells(65536, col_sh2)).Row
                'suppression de la ligne
                Rows(lig).Delete
            End If
      
    Next
...

tu notreas que le point a disparu dans la ligne en italique

0
fraenrir Messages postés 10 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 26 mai 2010
3 juin 2009 à 11:25
Ok merci beaucoup pour ton explication , j'ai tout compris....
0