Supprimer ligne selon valeur du ComboBox1

Résolu
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 10 juin 2007 à 02:56
 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 

21 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 04:49
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
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 05:21
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
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 03:10
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
10 juin 2007 à 03:28
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 03:39
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
10 juin 2007 à 03:54
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.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 04:01
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
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
10 juin 2007 à 04:02
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?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juin 2007 à 04:02
Ouuuppps :

Private lLine As Long
à remplacer par
Private iLine As Long

@++

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

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

@++

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

@++

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

Merci encore
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
10 juin 2007 à 05:15
WOW!!!!!!!

super, tout fonctionne à merveille.

Petit question, que veux dire exactemment :

Private
Const LineStart As Long = 11
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
10 juin 2007 à 05:24
Merci beaucoup 
0
Rejoignez-nous