Suppression de ligne sous excel

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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

    1. 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.
      1. Contributeur
        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
        1. Bon problème régler cela dit je ne comprend pas tout .
          Te serait il possible de m'expliquer quelque truc.
          Encore Merci.
          1. En quoi consiste le With et pourquoi choisir byte ou long pour les variables.
            1. Contributeur
              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

              1. Ok merci beaucoup pour ton explication , j'ai tout compris....