Supprimer ligne selon valeur du ComboBox1 [Résolu]

Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
 valtrase -
Re-bonjour tout le monde,

Je cherche à supprimer des lignes selon un certain critère en vba excel.

Voici ou je suis rendu avec le script:
<hr size= "2" width="100%" />Dim Ligne As Long, i As Long
   
    Ligne = GetLigne(ComboBox1.Text)
  
    For i = Ligne To 1 Step -1        If Cells(i, 11).Value vbNullString And Cells(i, 12).Value vbNullString Then
            Rows(i).Delete
        End If
    Next i
<hr size="2" width="100%" />je dois présiser que la valeur qui se retrouve dans le ComboBox1 , se retrouve dans la colone B de la feuil "Bon de commande" sur 20 ligne un en dessous de l'autres.

De plus, si par exemple la valeur du ComboBox1 est = "00006" , il doit trouver les 20 lignes qui contient la valeur 00006 dans la colone B et supprimer la ligne en entier seulement s'il n'y a pas de valeur dans la cellule 11 et 12 de la même ligne.

S'il y a d'autres valeurs différentes dans la colonne B comme par exemple "00007" etc. , les lignes ne seront pas supprimées.

Merci de votres aides 

21 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
C'est good, je t'ai créé un UserForm très simple, avec juste un Combobox et 2 boutons.
Voici le code, et je t'envoi le fichier contenant ce UserForm :

Private Const LineStart As Long = 11

Private Sub cmdAnnuler_Click()
    Unload Me
End Sub

Private Sub cmdValider_Click()
    Dim i As Long
    Dim DLV As Long: DLV = DeniereLigneVide

For i = DLV To LineStart Step -1
    If Cells(i, 2).Value = ComboBox1.Text And Cells(i, 11).Value = vbNullString And Cells(i, 12).Value = vbNullString Then Rows(i).Delete
Next i
End Sub

Private Sub UserForm_Initialize()
    Dim i   As Long
    Dim DLV As Long: DLV = DeniereLigneVide
    
For i = LineStart To DLV
    If Cells(i - 1, 2) <> Cells(i, 2).Value Then ComboBox1.AddItem Cells(i,
2).Value
Next i
End Sub

Private Function DeniereLigneVide() As Long
    DeniereLigneVide = Range("B65536").End(xlUp).Row
End Function

~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Vu que tes données partent te la ligne 11, j'attribue cette valeur à une Constante.
Une constante, c'est comme une variable, mais elle ne varie pas, elle reste toujours la même (et on ne peut pas la modifier)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Salut,

je comprends pas ton    Ligne = GetLigne(ComboBox1.Text)
GetLigne, est une fonction que tu as faite, mais que t'apporte-t-elle ?

Sinon, pour tes critères, il faut le rajouter en plus :        If Cells(i, 11).Value vbNullString And Cells(i, 12).Value vbNullString And Cells(i, 2).Value = ComboBox1.Text Then

@++

<hr size ="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Salut mortalino,

J'ai changé pour :

                                              'Supprimer lignes
    Dim i As Long
    For i = Ligne To 1 Step -1        If Cells(i, 11).Value vbNullString And Cells(i, 12).Value vbNullString And Cells(i, 2).Value = ComboBox1.Text Then
            Rows(i).Delete
        End If
    Next i

Par contre il se positionne bien sur la première cellule de la colone B qui contient la valeur du ComboBox1 mais il ne veut pas supprimer les lignes avec la même valeur du ComboBox1 dans les lignes en dessous qui eux, nont pas de données dans les cellules 11 et 12.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Es-tu sûr qu'il n'y ait pas d'espace dans ces cellules ? Des fois ça plante tout..

Rows(i) ne sera supprimée QUE si Ki & Li, sont vides ; et Bi égal au Text du Combobox1.
A la limite, vérifie en Pas à pas (F8)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
j'ai fais pas à pas F8 et il ne m'apparait aucune erreur, tous semble correct et pourtant, Ki et Li sont bien vides, aucunes espace dans la cellule.

Et il ne veut toujours pas supprimer les lignes vides en dessous de la première ligne qui elle contient des données.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Essaie comme ceci :

'Dans les déclarations :
Private lLine As Long

'Ton code
:
    Dim i As Long
    For i = Ligne To 1 Step -1
        If Cells(i, 11).Value = vbNullString And Cells(i, 12).Value = vbNullString And Cells(i, 2).Value = ComboBox1.Text Then
            Rows(i).Delete: iLine = i: Call
Delete20Lines ' modif
ici
        End If
    Next i

Private Sub Delete20Lines()
    Range("A" & iLine & :L" & iLine +
20).Delete"
End Sub
~
<small>[code.aspx?ID=39466 Mortalino] ~
Colorisation automatique</small>

En gros, ça supprime ta ligne, puis ma sub est appelée pour effacer les 20 lignes suivantes. Sois vigilent avant de lancer le code, que ça n'efface pas de lignes en trop, change au besoin

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
en fesant F8, il ne select pas cette partie du script:
If Cells(i, 2).Value ComboBox1.Text And Cells(i, 22).Value vbNullString Then
            Rows(i).Delete

y a-t-il une raison? est-ce parce qu'il y à un problème avec cette partie du script?
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Ouuuppps :

Private lLine As Long
à remplacer par
Private iLine As Long

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Arf, poste croisé ^^

t'as pas moyen de mettre un screenshot des données dans Excel (que je puisse me rendre compte de la structure du fichier) ?
(ps : héberge l'image sur le net, si c'est sur ton PC, on ne la verra pas)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
je t'ai envoyé le fichier excel par hotmail pour que tu vois comment il est fait.

Regarde sur la feuil Bon de commande.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Ok, mail reçu, je jette un oeil et te dis quoi

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
T'as pas d'interface dans le fichier (avec le combobox) ?

Bon sinon, j'ai regardé, sans parler des colonnes J et K, faut-il supprimer toutes les lignes ayant la valeur du Combobox dans la colonne B, ou non ?

Dans le fichier reçu, en colonne B, j'ai que des 00001. A la ligne 11, il y a pleins de données dans les colonnes. Pas dans les autres.
Ca va jusqu'à la ligne 30 (donc effectivement, en tout, il y a 20 lignes).
Admettons que ton Combobox affiche 00001. Que faut-il donc suprimer dans tout ça ?

(là, avec ta future réponse et le fichier sous les yeux, je devrai mieux comprendre )

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Et bien, dans l'exemple que je t'ai envoyé, à partire de la ligne 12 jusqu'à la ligne 30, il n'y a pas de données dans les cellules de la colone K et L. Donc sil n'y à rien, dans ses cellules, je voudrais que ses lignes s'éffaces. Donc il resterait que la ligne 11 qui contient des données dans la cellule K et L.

Je t'envoie le 2ième fichier qui vient avec par hotmail
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Désolé, c'est à partire de la ligne 13 qu'il n'y a plus de données, donc de 13 à 30, ils devraient se supprimer et laisser seulement les lignes 11 et 12.  
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
17
Si tu ne comprends pas certaines choses, n'hésite aps, je t'expliquerai

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut Avyrex,

N'y aurait-il pas moyen de filtrer tes données selon les critères nécessaires et supprimer d'un coup ?

MPi
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
merci beaucoup je regarde tout ça et je te reviens plus tard si j'ai des questions.

Merci encore
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
WOW!!!!!!!

super, tout fonctionne à merveille.

Petit question, que veux dire exactemment :

Private
Const LineStart As Long = 11
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Merci beaucoup