avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDerniè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.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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 )
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 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
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 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.