Supprimer ligne si cellule un 0 [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 09-03-2008 à 09:38:04
Comme ça ?
Code :
|
Marsh Posté le 09-03-2008 à 11:28:33
Oui, c'est impec !
comment faire pour stopper la procedure à la ligne 150 ?
Merci !
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 :
|
avec la Valeur_à_tester mise entre guillemets si c'est un texte, ou sans guillemet si c'est un nombre.
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.
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 :
|
si la ligne où la macro doit s'arrêter est toujours la même, le code devient ça :
Code :
|
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]
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 ?
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
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.
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 !
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
Marsh Posté le 09-03-2008 à 18:56:54
Génial, j'étais bloqué avec sa depuis ..............
C'est super !!
Merci encore
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.....
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 :
|
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
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 ??
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 ?
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 !!
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 ?
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 !!!
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
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
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 !
Marsh Posté le 16-03-2008 à 17:25:59
Il faut la déclarer en double !
dim NBHEURE as Double
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