Supprimer ligne si cellule un 0 [RESOLU]

Supprimer ligne si cellule un 0 [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 09-03-2008 à 08:27:38    

Bonjour, pouvez vous m'indiquer un prog sous vba-excel pour :
 
Dans un tableau de (A1) jusque (Z33), dans la colonne Z si les cellules sont = à 0 alors suppression de la ligne et ceux pour toute la colonne Z du tableau !
 
Quelqu'un a une idée ?
 
Merci d'avance.


Message édité par geraldao59 le 09-03-2008 à 12:46:58
Reply

Marsh Posté le 09-03-2008 à 08:27:38   

Reply

Marsh Posté le 09-03-2008 à 09:38:04    

Comme ça ?
 

Code :
  1. Sub toto()
  2. Dim intI As Integer
  3. intI = 1
  4. 'Faire tant que la valeur de la colonne z à la ligne considérée n'est pas vide
  5. Do While Cells(intI, 26) <> ""
  6.     If Cells(intI, 26) = 0 Then
  7.         Rows(intI).Delete
  8.     Else
  9.         intI = intI + 1
  10.     End If
  11. Loop
  12. End Sub


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 11:28:33    

Oui, c'est impec !
 
comment faire pour stopper la procedure à la ligne 150 ?
 
Merci !

Reply

Marsh Posté le 09-03-2008 à 11:40:56    

Pourquoi ? Tu as quelque chose dessous que tu ne veux plus traiter ? Parce que cette procédure s'arrête dès qu'elle rencontre une cellule vide.
Ta ligne 150 peut devenir la ligne 149 si tu effaces une ligne... c'est pourquoi, j'ai mis la condition "cellule vide" pour arrêter la procédure...
 
Si à la ligne 150 il y a dans une colonne une valeur qui oblige la macro à s'arrêter, il suffit simplement de remplacer la condition "cellule vide" sur la ligne do while...
 
exemple :
 

Code :
  1. Do While Cells(intI, n°colonne)=Valeur_à_tester


avec la Valeur_à_tester mise entre guillemets si c'est un texte, ou sans guillemet si c'est un nombre.


Message édité par otobox le 09-03-2008 à 11:47:24

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 11:59:36    

OK, Je comprend bien mieux maintenant !!  je débute ;) désolé
en fait dans mon tableau il a des lignes de "séparation" qui se trouvent etre "vides" et donc il faudrait les "passées" et continué jusqu'a la ligne 150...
Tu comprend ce que je veux dire !
 
En tout cas j'ai bien compris ta boucle, grace a tes explications merci beaucoup.

Reply

Marsh Posté le 09-03-2008 à 12:13:56    

Alors, le code devient ça, avec choix du numéro de ligne où s'arrêter :

 
Code :
  1. Sub toto()
  2. Dim intI As Integer, intArret As Integer, ret As Variant
  3. intI = 1
  4. Do
  5.     ret = InputBox("Saisir le numéro de la ligne où doit s'arrêter le traitement" )
  6.     If IsNumeric(ret) Then
  7.         intArret = Int(ret)
  8.         Exit Do
  9.     ElseIf ret = "" Then
  10.         Exit Sub
  11.     End If
  12. Loop
  13. Do While intI < intArret
  14.     If Cells(intI, 26) = 0 Then
  15.         Rows(intI).Delete
  16.         intArret = intArret - 1
  17.     Else
  18.         intI = intI + 1
  19.     End If
  20. Loop
  21. End Sub
 

si la ligne où la macro doit s'arrêter est toujours la même, le code devient ça :

 
Code :
  1. Sub toto()
  2. Dim intI As Integer, intArret As Integer
  3. intI = 1
  4. intArret=150
  5. Do While intI < intArret
  6.     If Cells(intI, 26) = 0 Then
  7.         Rows(intI).Delete
  8.         intArret = intArret - 1
  9.     Else
  10.         intI = intI + 1
  11.     End If
  12. Loop
  13. End Sub


Message édité par otobox le 09-03-2008 à 12:15:26

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 12:46:35    

perfecto !!!
 
MERCI BEAUCOUP

Reply

Marsh Posté le 09-03-2008 à 13:57:45    

You're welcome :)
 
Si tu as besoin d'explications complémentaires, n'hésite pas !
Le vba, c'est très puissant (et lent à exécuter) mais c'est un vrai plaisir de pouvoir se simplifier la tâche quand on a des choses répétitives à faire.
En fait, tout ce qui est répétitif peut être facilement traité en vba. C'est pourquoi, connaitre ce langage est très précieux, surtout en entreprise ;)
 
[36 15 MyLife]
Dans une boite où j'ai travaillé, les dessinateurs techniques remplissaient des tableaux à la main à partir de listing. Temps de l'opération : environ 8 heures par ensemble (un ensemble à dessiner prenait environ 6 semaines soit 210 heures). On m'a demandé de le faire aussi et devant la répétition de la chose et les risques de se tromper en recopiant les valeurs, j'ai passé une dizaine d'heures à développer une macro. En quelques secondes, elle faisait ce que faisaient les gars en une journée. Gain de temps : 3% par ensemble, sachant qu'une dizaine d'ensembles sont fait en même temps. En un mois et demi, j'ai fait économisé 10 journées de boulot au patron et supprimé les erreurs de copies tout en soulageant mes (anciens) collègues d'un travail chiant et fastidieux...
[/36 15 MyLife]


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 16:27:30    

He bien, je vais abuser, je tente de mettre au point un petit prog (pour le boulot biensur) et je rencontre un probleme avec cette ligne :
 
Set cell_col = ActiveSheet.Range("G5:Y5" ).Find(listsite.Nom)
Set cell_ligne = ActiveSheet.Range("B7:B221" ).Find(listsite.Site)
        If (cell_col Is Nothing Or cell_ligne Is Nothing) Then
        MsgBox "Le programme rencontre une erreur dans sa recherche P2", vbCritical
            Exit Sub
        Else
            ActiveSheet.Cells(cell_ligne.Row, cell_col.Column) = Nbheure   <= dans cette ligne exactement
 
 
une fois le croisement "repéré", on y incrémente la cellule sélectionnée de la variable "Nbheure" mais je voudrais AJOUTER cette variable à la valeur déja dans la cellule !!
 
Comprends tu ?

Reply

Marsh Posté le 09-03-2008 à 16:35:47    

Essaye ça :
 
ActiveSheet.Cells(cell_ligne.Row, cell_col.Column) = ActiveSheet.Cells(cell_ligne.Row, cell_col.Column) + Nbheure
 
;)


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 16:35:47   

Reply

Marsh Posté le 09-03-2008 à 16:52:58    

encore une fois = bien joué !!
 
Sa me parait tellement évident une fois servi sur un plateau !!!
 
Merci encore.

Reply

Marsh Posté le 09-03-2008 à 17:08:30    

Allez une dernière.... ;)
 
Toujours la meme ligne (je ne sais pas si on dit "ligne" ):
 
ActiveSheet.Cells(cell_ligne.Row, cell_col.Column) = ACTIVECELLS
 
donc au "croisement" je voudrais juste activer la cellule !

Reply

Marsh Posté le 09-03-2008 à 18:21:43    

Activer ? Sélectionner ? si tel est le cas :
 
ActiveSheet.Cells(cell_ligne.Row, cell_col.Column).select
 
JM


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 18:56:54    

Génial, j'étais bloqué avec sa depuis ..............
 
C'est super !!
 
Merci encore

Reply

Marsh Posté le 09-03-2008 à 20:17:07    

en fait j'ai encore un autre souci !!!! ;)
 
J'ai un combobox avec une centaine de ligne et je voudrais en fonction du checkbox coché positionner le combobox sur une ligne déterminée !!
 
Exemple :
 
un combobox avec les lettres de l'alphabet
 
si checkbox1=true alors combobox.text ="L"
si checkbox2=true alors combobox.text="T"
 
mais en fait, en faisant cela la première ligne du combobox change mais la deuxième ligne redevient la première de la liste, alors que je voudrais me placer au "milieu" de ma liste....
 
Me comprends tu ??
Est ce clair ?  
moi je comprends mais.....

Reply

Marsh Posté le 09-03-2008 à 21:11:06    

Non, la je ne comprends pas. J'ai testé chez moi et ça fonctionne comme ça :
- j'ai une combobox "cmb" avec comme item A, B, C jusqu'à G
- j'ai une checkbox avec le code suivant :

Code :
  1. Private Sub CheckBox1_Click()
  2. If CheckBox1 = True Then cmb.Text = "D"
  3. End Sub


 
Quand je clique sur le checkbox, D s'affiche dans la combobox et si je clique ensuite sur la petite flèche de la combobox, D est bien au milieu de la liste.
 
JM


Message édité par otobox le 09-03-2008 à 21:11:42

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 09-03-2008 à 21:40:36    

enfait le combo affiche bien le "D" mais je recherche une sorte de raccourci si j' "ouvre" le combo je voudrais que l'on soit placé sur le D dans la liste  (difficile d'etre clair ;) ).
 car actuellement aprés le "D" on repasse directement a "A" !!
 
mais est ce vraiment plus compréhensible ?? :)

Reply

Marsh Posté le 09-03-2008 à 23:47:43    

Pas vraiment... Dans mon cas, quand "j'ouvre" la combobox (en cliquant sur la petite flèche), le D est situé en milieu de liste, entre le C et le E et il ne se déplace pas au dessus du A. Après avoir cliqué sur le checkbox, combien as tu de D dans la liste ? Il ne réapparait pas plus bas ? Essaye de mettre la propriété "MatchRequired" de la combobox à true à tout hasard. Sinon, je ne vois pas.

 

Comment as tu remplis la source de la combobox ? avec .AddItem ?


Message édité par otobox le 09-03-2008 à 23:49:38

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 10-03-2008 à 21:38:44    

mon combo est rempli avec la fonction "ROWSOURCE" !
 
Je tente une nouvelle explication !
 
le combo m'affiche bien D lorsque je selectionne la checkbox  
jusque la c'est ok.
 
si je click sur la fleche du combo = il m'affiche en première ligne sélectionable "A"
 
ou si je "surligne" "D" et qu'ensuite je fais flèche(du clavier) bas alors la lettre suivante à la "D" est "A" !!
 
Va comprendre !!

Reply

Marsh Posté le 11-03-2008 à 07:45:31    

C'est bizarre, ça ne fonctionne pas comme ça chez moi.
C'est une combo sur un formulaire ou sur une feuille excel ?
Quelle version d'excel ?


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 16-03-2008 à 10:02:47    

mon combo est sur un formulaire mais je viens de trouver une "fonction" qui me permet de faire selon mon souhait =>  
 
 
combobox.ControlSource = "B59"    (N° de la ligne ou se trouve ma référence sur une feuille source de données)
 
Merci de ton aide !!!
 

Reply

Marsh Posté le 16-03-2008 à 10:08:36    


Allez encore un souci !!!!
 
J'ai sur mon formulaire une toupie qui fait varier des "nombres d'heures" sur un textbox mais je ne parviens pas a faire des 1/2 heure (0,5  1,5   etc)....
 
Voila mes lignes de code, et je ne vois pas ce qui m'empèche d'afficher le ",5", peux tu m'aider ?                            (une fois de plus)
 
 
Public Sub toupie1_change()
'gestion de la toupie !!
zonetext1.Text = toupie1.Value
End Sub
 
Public Sub zonetext1_Change()
'imputation du nombres d'heures à la variable nommée = NBHEURE
Nbheure = Val(zonetext1.Text)
 
'gestion de la toupie
If Nbheure >= toupie1.Min And Nbheure <= toupie1.Max Then toupie1.Value = Nbheure
 
End Sub

Reply

Marsh Posté le 16-03-2008 à 11:40:27    

Je ne connais pas le controle "Toupie", je ne l'ai jamais utilisé donc sur ce coup là, je risque de ne pas être d'un grand secours.
Le seul truc que je vois et qui me choque, c'est que tu utilises une virgule à la place du point pour tes décimales.
Un autre truc qui pourrait t'empêcher d'utiliser des décimales, c'est comment tu as déclaré ta variable NBHEURE : si elle est du type Integer ou Long, il faut la changer en Double.
 
JM


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 16-03-2008 à 16:25:41    

en fait ma variable était effectivement en INTEGER donc je l'ais modifiée en LONG mais la toupie "tourne" de 1 en 1 !!
 
Je lance un nouveau sujet...
 
Merci pour tout !

Reply

Marsh Posté le 16-03-2008 à 17:25:59    

Il faut la déclarer en double !

 

dim NBHEURE as Double


Message édité par otobox le 16-03-2008 à 17:26:45

---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed