Supprimer ligne selon valeur du ComboBox1 [Résolu]

Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
- - Dernière réponse :  valtrase - 11 juin 2007 à 00:15
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 
Afficher la suite 

20/21 réponses

Meilleure réponse
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 212 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 212 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
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
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
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.
Commenter la réponse de avyrex1926
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
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
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
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.
Commenter la réponse de avyrex1926
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
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
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
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?
Commenter la réponse de avyrex1926
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Ouuuppps :

Private lLine As Long
à remplacer par
Private iLine As Long

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Commenter la réponse de mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
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
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
je t'ai envoyé le fichier excel par hotmail pour que tu vois comment il est fait.

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

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Commenter la réponse de mortalino
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
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
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
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
Commenter la réponse de avyrex1926
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
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.  
Commenter la réponse de avyrex1926
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Si tu ne comprends pas certaines choses, n'hésite aps, je t'expliquerai

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Commenter la réponse de mortalino
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
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
Commenter la réponse de cs_MPi
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
merci beaucoup je regarde tout ça et je te reviens plus tard si j'ai des questions.

Merci encore
Commenter la réponse de avyrex1926
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
WOW!!!!!!!

super, tout fonctionne à merveille.

Petit question, que veux dire exactemment :

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