Suppression de ligne vide dans un tableau

Résolu
dambroise Messages postés 8 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 30 mars 2009 - 26 mars 2009 à 10:42
sugvesta Messages postés 6 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 30 mars 2009 - 30 mars 2009 à 15:30
Bonjour,

Je dispose actuellement d'un tableau dans la feuille "Composants" (tableau qui va de C9 à F1000 : C9 étant la ligne donnant le nom des colonnes).
La colonne C indique le composant, la D indique la pression, la E indique le débit et la F indique le temps.
Ce tableau sert de base pour une liste déroulante : la liste déroulante se référe à la colonne C.

<colgroup><col style=\"WIDTH: 144pt; mso-width-source: userset; mso-width-alt: 7021\" width=\"192\" /><col style=\"WIDTH: 60pt\" span=\"3\" width=\"80\" /></colgroup>----
Composant, Pression, Débit, Temps, ----
Vérin 1 sortie lente 1, 100, 7, 5, ----
Vérin 1 sortie rapide, 0, 0, 0, ----
Vérin 1 sortie lente 2, 0, 0, 0, ----
Vérin 1 rentrée lente 1, 0, 0, 0, ----
Vérin 1 rentrée rapide, 0, 0, 0, ----
Vérin 1 rentrée lente 2, 0, 0, 0, ----
Vérin 2 sortie lente 1, 20, 8, 35

Les composants doivent impérativement être les un à la suite des autres, sinon le bouton qui me permet de mettre à jour ma liste déroulante ne prend pas les derniers composants.

Ce que je voudrais, c'est un code qui regarde le tableau et qui supprime les lignes où le temps est égale à zéro, et qui remonte les lignes (où le temps est différent de 0) pour quelles se suivent.
De cette façon, la liste déroulante continuera de fonctionner normalement.

Je suis un pure débutant, si je pouvais avoir le code avec des explications pour esayer de le comprendre, ce serait extra.

Merci d'avance.

Damien

8 réponses

sugvesta Messages postés 6 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 15:09
Mon code etait un peu con, sorry. En fait il faut incrementer le i uniquement si tu n as pas supprimer la ligne sinon des que tu as deux 0 a la suite comme il saute une ligne apres une suppression, bah tu vas pas supprimer ton 0. voila le bon code:

Sub deletion()
Dim i As Integer ' Declaration de la variable i comme etant un entier
i = 3 ' Initialisation de i(valeur pour laquelle ta boucle while va commencer)

While Cells(i, 3) <> "" ' Tant que la celllule (i,3) (ligne i, colonne3 cad C) est non vide(Le signe <> signifie different)
If Cells(i, 6) = 0 Then ' Si la cellule (i,6)=0 (colonne F donc)
Rows(i).Select 'selection de la ligne i
Selection.Delete 'On efface la selection
Else: i = i + 1' on incremente la valeur de i UNIQUEMENT SI ON N A PAS SUPRRIME LA LIGNE pour refaire les memes operation pour le i suivant,la boucle retourne jusqu on arrive a un i ou la cellule(i,3) est vide

End If 'fin du "SI"
Wend
End Sub
3
sugvesta Messages postés 6 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 30 mars 2009
27 mars 2009 à 17:36
C est assez simple, tu peux enregistrer une macro poour ce genre de trucs et la retaper un peu.
ton code serait

sub deletion()
dim i as integer
while cells(i,3)<>""
if cells(i,6)= 0 then
Rows(i).select
selection.delete
end if
i=i+1
wend
end sub
0
dambroise Messages postés 8 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 30 mars 2009
27 mars 2009 à 20:37
Je te remercie de l'interêt que tu viens de me porter, mais comme je l'ai dis, je suis un vrai débutant.
Je viens de copier les lignes de codes que tu m'as donné, mais ca marche pas, je vais voir si je m'en sors.
Au pire je reviendrais vers toi.

Encore merci.

Damien
0
dambroise Messages postés 8 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 30 mars 2009
29 mars 2009 à 15:28
Salut,

Je reviens vers toi après avoir essayer différents codes. J'ai enregistré une macro : "Suppression" et j'ai recopié ton code dans une autre macro : "Deletion" (pour l'avoir sous la main).
J'ai ensuite essayer de faire la macro qui m'interesse, mais je n'y arrive pas.
Aurais-tu le temps et l'envie de me l'écrire?

Sub Suppression()
'
' Suppression Macro
'


'
    Range("C10:G1000").Select
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-18
    Range("E3").Select
End Sub




Sub deletion()


' C est assez simple, tu peux enregistrer une macro poour ce genre de trucs et la retaper un peu.
' ton code serait


Dim i As Integer


While Cells(i, 3) <> ""
    If Cells(i, 6) = 0 Then
    Rows(i).Select
    Selection.Delete
    End If
i = i + 1
Wend
End Sub


Sub SelectionComposants()


Dim i As Integer


Range("C10:G1000").Select
While Cells(i, 3) <> ""
    If Cells(i, 6) = 0 Then
    Rows(i).Select
    Selection.Delete
    End If
i = i + 1
Wend




End Sub

Merci d'avance.

Damien
0

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

Posez votre question
sugvesta Messages postés 6 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 10:17
Selection.clearcontemts ne fait que supprimer le contetnu de scellules et non la ligne toute entiere
En fait la macor que j avais ecrit marche bien , j ai juste oublie d initialiser la valeur de i. Vu que ton tableau commence en C9 il faut mettre i= 9 juste en dessous de dim i as integer.Voila le code commente
Sub deletion()
Dim i As Integer ' Declaration de la variable i comme etant un entier
i = 9 ' Initialisation de i(valeur pour laquelle ta boucle while va commencer)

While Cells(i, 3) <> "" ' Tant que la celllule (i,3) (ligne i, colonne3 cad C) est non vide(Le signe <> signifie different)
If Cells(i, 6) = 0 Then ' Si la cellule (i,6)=0 (colonne F donc)
Rows(i).Select 'selection de la ligne i
Selection.Delete 'On efface la selection
End If 'fin du "SI"
i = i + 1 ' on incremente la valeur de i pour refaire les memes operation pour le i suivant,la boucle retourne jusqu on arrive a un i ou la cellule(i,3) est vide
Wend
End Sub
0
dambroise Messages postés 8 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 13:54
Salut,


Je te remercie, par contre j'ai un petit soucis avec ce code, je m'explique : ce code supprime les premières lignes où le temps est égale à 0, mais c'est comme s'il s'arretait dès qu'il rencontre un temps différents de 0. Meme si après, j'ai d'autres lignes avec un temps nul, il ne les efface pas.


Je suis obligé de relancé la macro pour qu'il les efface au fur et à mesure. Je dois la lancé environs 6 fois pour que le résultat attendu soit le bon.


Si tu as le temps, et toujours l'envie de m'aider, ne te gêne surtout pas .
Merci.

Damien
0
dambroise Messages postés 8 Date d'inscription mercredi 11 mars 2009 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 15:19
Comment veux tu que je te dise quoique que ce soit pour une erreur, alors que tu cherche à m'aider!
Je serais un vrai c.. si je fesais ca.
Tout ca pour te dire un grand MERCI, je viens de l'essayer : ca n'a pas marcher, mais j'ai modifié la valeur initiale de i grâce aux explications (i 9 et non i 3).
Je le signale juste pour ci cela peut aider quelqu'un d'autre.

Encore merci!!!

Damien
0
sugvesta Messages postés 6 Date d'inscription jeudi 13 mars 2008 Statut Membre Dernière intervention 30 mars 2009
30 mars 2009 à 15:30
No prob, quand on se fait un peu chier au bureau autant aider les autres. Ce petit code est pas complique mais il comprend deja quelques trucs interessants pour apprendre les rudiments de la programmation, je te conseille d essayer de comprendre comment il marche.(Effectivement j avais mis i=3 parce que je testait sur un tableau de mon cote).
A plus
0
Rejoignez-nous