Probleme macro de suppression de lignes
Résolu
hussein83
Messages postés
26
Statut
Membre
-
Bidouilleu_R Messages postés 1209 Statut Membre -
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour à otes et à tous
j'ai un probleme avec une macro, elle consiste à supprimer des lignes dans un tableau (lignes à supprimer) qui correspondent aux données situées dans un autre tableau (references)
or elle supprime une ligne sur deux seulement!!!!!
quoi faire???
voici le code:
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"
vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range(vListe1Début).End(xlDown))
If vCellule1 = vCellule2 Then vTrouvé = 1
Next
If vTrouvé = 1 Then
vCellule2.EntireRow.Delete
End If
vTrouvé = 0
Next
End Sub
j'ai un probleme avec une macro, elle consiste à supprimer des lignes dans un tableau (lignes à supprimer) qui correspondent aux données situées dans un autre tableau (references)
or elle supprime une ligne sur deux seulement!!!!!
quoi faire???
voici le code:
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"
vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range(vListe1Début).End(xlDown))
If vCellule1 = vCellule2 Then vTrouvé = 1
Next
If vTrouvé = 1 Then
vCellule2.EntireRow.Delete
End If
vTrouvé = 0
Next
End Sub
A voir également:
- Probleme macro de suppression de lignes
- Forcer suppression fichier - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Partage de photos en ligne - Guide
- Formulaire en ligne de meta - Guide
- Suppression compte gmail - Guide
2 réponses
'je te corrige en ligne mais je ne teste pas
attention je pense que j'ai inversé tes listes
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts, mavarcellule
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"
'je vais sur la feuille
Sheets(vListe1Feuille). select
Range(vListe1Début).select
set mavarcellule as Range(vListe1Début) ' objet cellule
nbligne=Range(Selection, Selection.End(xlDown)).count 'compte le nombre de ligne
vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
'le problème est ici
' tu rentre dans une deuxième boucle for each et tu supprimes des éléments mais pas quand
'tu pointes sur l'élément le next se trouve avant le end if.... c'est dangereux
for i=0 to nbligne
if mavarcellule=vcellule2 then
' on efface dans ce cas la ligne mavarcellule
mavarcellule.EntireRow.Delete
else
set mavarcellule=mavarcellule.offset(i,0) ' on redéfinit l'objet
endif
next
'For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range'(vListe1Début).End(xlDown))
'If vCellule1 = vCellule2 Then vTrouvé = 1
'Next
'If vTrouvé = 1 Then
'vCellule2.EntireRow.Delete
'End If
vTrouvé = 0
Next
End Sub
attention je pense que j'ai inversé tes listes
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2, vTrouvé, vNbreAjouts, mavarcellule
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"
'je vais sur la feuille
Sheets(vListe1Feuille). select
Range(vListe1Début).select
set mavarcellule as Range(vListe1Début) ' objet cellule
nbligne=Range(Selection, Selection.End(xlDown)).count 'compte le nombre de ligne
vTrouvé = 0
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
'le problème est ici
' tu rentre dans une deuxième boucle for each et tu supprimes des éléments mais pas quand
'tu pointes sur l'élément le next se trouve avant le end if.... c'est dangereux
for i=0 to nbligne
if mavarcellule=vcellule2 then
' on efface dans ce cas la ligne mavarcellule
mavarcellule.EntireRow.Delete
else
set mavarcellule=mavarcellule.offset(i,0) ' on redéfinit l'objet
endif
next
'For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range'(vListe1Début).End(xlDown))
'If vCellule1 = vCellule2 Then vTrouvé = 1
'Next
'If vTrouvé = 1 Then
'vCellule2.EntireRow.Delete
'End If
vTrouvé = 0
Next
End Sub
Sub supprimer()
Dim vListe1Feuille, vListe1Début, vListe2Feuille, vListe2Début
Dim vCellule1, vCellule2
vListe1Feuille = "references"
vListe1Début = "d6"
vListe2Feuille = "lignes_a_supprimer"
vListe2Début = "a5"
For Each vCellule1 In Range(Sheets(vListe1Feuille).Range(vListe1Début), Sheets(vListe1Feuille).Range(vListe1Début).End(xlDown))
For Each vCellule2 In Range(Sheets(vListe2Feuille).Range(vListe2Début), Sheets(vListe2Feuille).Range(vListe2Début).End(xlDown))
If vCellule1 = vCellule2 Then vCellule2.EntireRow.Delete
Next
Next
End Sub
merci de m'avoir éclairé sur ce point.... à bientôt sur d'autre sujet