Suppression de ligne sous excel

Résolu
fraenrir Messages postés 10 Statut Membre -  
fraenrir Messages postés 10 Statut Membre -
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.
Configuration: Windows Vista
Firefox 3.0.10

8 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. fraenrir Messages postés 10 Statut Membre
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. fraenrir Messages postés 10 Statut Membre
     
    Bon problème régler cela dit je ne comprend pas tout .
    Te serait il possible de m'expliquer quelque truc.
    Encore Merci.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Quels trucs ?
    0
  7. fraenrir Messages postés 10 Statut Membre
     
    En quoi consiste le With et pourquoi choisir byte ou long pour les variables.
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  9. fraenrir Messages postés 10 Statut Membre
     
    Ok merci beaucoup pour ton explication , j'ai tout compris....
    0