Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1668 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Supprimer ligne si cellule un 0 [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer ligne si cellule un 0 [RESOLU]

n°1699426
geraldao59
Posté le 09-03-2008 à 08:27:38  profilanswer
 

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
mood
Publicité
Posté le 09-03-2008 à 08:27:38  profilanswer
 

n°1699435
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 09:38:04  profilanswer
 

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
n°1699455
geraldao59
Posté le 09-03-2008 à 11:28:33  profilanswer
 

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

n°1699456
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 11:40:56  profilanswer
 

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
n°1699462
geraldao59
Posté le 09-03-2008 à 11:59:36  profilanswer
 

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.

n°1699463
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 12:13:56  profilanswer
 

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
n°1699472
geraldao59
Posté le 09-03-2008 à 12:46:35  profilanswer
 

perfecto !!!
 
MERCI BEAUCOUP

n°1699498
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 13:57:45  profilanswer
 

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
n°1699532
geraldao59
Posté le 09-03-2008 à 16:27:30  profilanswer
 

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 ?

n°1699533
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 16:35:47  profilanswer
 

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
mood
Publicité
Posté le 09-03-2008 à 16:35:47  profilanswer
 

n°1699537
geraldao59
Posté le 09-03-2008 à 16:52:58  profilanswer
 

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

n°1699539
geraldao59
Posté le 09-03-2008 à 17:08:30  profilanswer
 

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 !

n°1699548
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 18:21:43  profilanswer
 

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
n°1699553
geraldao59
Posté le 09-03-2008 à 18:56:54  profilanswer
 

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

n°1699583
geraldao59
Posté le 09-03-2008 à 20:17:07  profilanswer
 

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.....

n°1699617
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 21:11:06  profilanswer
 

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
n°1699623
geraldao59
Posté le 09-03-2008 à 21:40:36  profilanswer
 

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 ?? :)

n°1699656
otobox
Maison fondée en 2005
Posté le 09-03-2008 à 23:47:43  profilanswer
 

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
n°1700198
geraldao59
Posté le 10-03-2008 à 21:38:44  profilanswer
 

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 !!

n°1700307
otobox
Maison fondée en 2005
Posté le 11-03-2008 à 07:45:31  profilanswer
 

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
n°1702994
geraldao59
Posté le 16-03-2008 à 10:02:47  profilanswer
 

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 !!!
 

n°1702997
geraldao59
Posté le 16-03-2008 à 10:08:36  profilanswer
 


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

n°1703010
otobox
Maison fondée en 2005
Posté le 16-03-2008 à 11:40:27  profilanswer
 

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
n°1703058
geraldao59
Posté le 16-03-2008 à 16:25:41  profilanswer
 

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 !

n°1703072
otobox
Maison fondée en 2005
Posté le 16-03-2008 à 17:25:59  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Supprimer ligne si cellule un 0 [RESOLU]

 

Sujets relatifs
Macro pour changer couleur de fond de celluleRendre mes galeries d'image à PICLENS [RESOLU]
[resolu] CSS - Appel d'un div codé ailleurs[resolu] htaccess et sous-domaine vers dossier..
[Resolu] Excel VBA Regrouper des valeurs depuis des classeurs/feuillescomment passer une ligne csv en tableau a deux dimensons ? en AWK ?
[Résolu] file_exists et erreurs 404 serveur.[Résolu][Oracle 10g] Quels paramètres pour EXP ?
Insertion de ligne automatique excel... 
Plus de sujets relatifs à : Supprimer ligne si cellule un 0 [RESOLU]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR