FORUM Tom's Hardware » Programmation » VB / VBA / VBS » supprimer les lignes en fonction de la valeur d'une cellule
 

supprimer les lignes en fonction de la valeur d'une cellule

Il y a 401 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : supprimer les lignes en fonction de la valeur d'une cellule
 
Plus d'informations

Bonjour a tous !
Je suis en train de mettre en place un système pour du covoiturage un peu dans l'esprit de covoiturage.com mais au sein d'une entreprise. Le but étant que les personnes qui ont une voiture et qui veulent bien amener des gens au travail s'inscrivent. J'ai plusieurs problèmes mais je vais commencé par le plus important.
J'ai une gfeuille ("liste de passagers" ) sur laquelle tous les passagers sont référencés. J'ai fait une autre feuille intitulée ("recherchepassager" ). J'ai une case intitulée CP ("D16" ). Le but est de copier la liste de passagers sur la feuille "recherchepassager" puis de supprimer les lignes pour lesquelles le CP (colonne E) ne correspond pas à la case intitulée CP.
Le problème est que mon code ne fonctionne que si je met une valeur précise dans mon code alors que je veux que l'on compare à chaque fois en fonction de la valeur entrée en "D16". ex de ec que j'ai et qui marche:

Code :
  1. Sub recherchepassager()
  2. '
  3. ' recherchepassager Macro
  4.     Sheets("liste des passagers" ).Select
  5.     Range("B2:BS308" ).Select
  6.     Selection.Copy
  7.     Sheets("Recherchepassager" ).Select
  8.     Range("B30" ).Select
  9.     ActiveSheet.Paste
  10.     Range("B30:I30" ).Select
  11.     Selection.Interior.ColorIndex = 15
  12.     Range("E32" ).Select
  13. For i = 34 To 400
  14. If ActiveCell.Value > 69100 Or ActiveCell.Value < 69100 Then
  15. Selection.EntireRow.Delete
  16. Else
  17. ActiveCell.Offset(1, 0).Range("A1" ).Select
  18. End If
  19. Next i
  20. Range("B30" ).Select
  21. End Sub



En gros, à la place de 69100 je veux recherchepassager!"D16" mais visiblement ca ne fonctionne pas et je ne suis même pas sure qu'une telle action soit possible... Après des recherches toutes la journée, je ne trouve rien qui me décoince !!
alors si quelqu'un avait la générosité de m'aider...
Avis à bon entendeur...
Merci d'avance !

Plus d'informations

Toutes mes excuses ! comme quoi la nuit porte conseil... J'ai trouvé toute seule comme une grande...
j'ai fait :

Code :
  1. Sub recherchepassager()
  2. '
  3. ' recherchepassager Macro
  4. ' Macro enregistrée le 17/07/2007 par POULAT
  5. '
  6. '
  7.     Sheets("liste des passagers" ).Select
  8.     Range("B2:BS308" ).Select
  9.     Selection.Copy
  10.     Sheets("Recherchepassager" ).Select
  11.     Range("B30" ).Select
  12.     ActiveSheet.Paste
  13.     Range("B30:I30" ).Select
  14.     Selection.Interior.ColorIndex = 15
  15.     Range("E32" ).Select
  16. For i = 34 To 400
  17. If ActiveCell.Value > Range("D16" ).Value Or ActiveCell.Value < Range("D16" ) Then
  18. Selection.EntireRow.Delete
  19. Else
  20. ActiveCell.Offset(1, 0).Range("A1" ).Select
  21. End If
  22. Next i
  23. Range("B30" ).Select
  24. reponse = MsgBox("La recherche est terminée. Si le résultat n'est pas satisfaisant : veuillez relancer une recherche avec un critère différent.", vbOKOnly + vbInformation, "Information" )
  25. End Sub


Voila !

zeb
Profil : Modérateur libre

Ligne 18 :heink:

If ActiveCell.Value > Range("D16" ).Value Or ActiveCell.Value < Range("D16" ) Then

En gros :a > b Ou a < b. Tu sais tu peux l'écrire a <> b ;)

 

Ligne 21 :ouch:

ActiveCell.Offset(1, 0).Range("A1" ).Select

Keskesékesa ? Pourquoi ce Range(A1) ?

 

Ligne 8 à 15 : Je hais les Select/Selection/ActiveTruc & autres Copy/Paste/CutCopyMode. (Oui, je sais, c'est l'enregistreur qui te l'a fait)

 

Ce morceau de code, revu et corrigé (à bien étudier, si tu veux)

Code :
  1. Sheets("liste des passagers" ).("B2:BS308" ).Copy Destination:=Sheets("Recherchepassager" ).Range("B30" )   
  2. Sheets("Recherchepassager" ).Range("B30:I30" ).Interior.ColorIndex = 15

Et oui, c'est tout ;)

 

------------------------

 

Ligne 17 à 23. Supprimer des lignes dans un tableau. (dans Excel en particulier, mais pour tout tableau en général et en tout langage)
Soit le tableau suivant :

1. AAAA
2. BBBB
3. CCCC

L'algorithme suivant est faux :

Code :
  1. Pour i de 1 à 3
  2.     Si condition Alors Supprimer Ligne i

En effet, supposons que la condition nous fasse vouloir supprimer les lignes AAAA et BBBB.
Déroulons le code:
i=1. La condition est vrai. Supprimons la ligne 1 :

1. BBBB
2. CCCC


i=2. Et hop, première erreur, on vient de rater la ligne des BBBB !. Pour CCCC la condition n'est pas remplie.
i=3. Et hop, encore une erreur, il n'y a plus de ligne 3. Erreur ! (Pas d'erreur sous excel, le tableau fait toujours 65536 lignes)

 

La solution : Partir du bas du tableau et remonter

Code :
  1. Pour i de 3 à 1
  2.     Si condition Alors Supprimer Ligne i
 

Traduit en VB :

Code :
  1. For i = 400 To 34 Step -1
  2.     If Range("E" & i).Value <> Range("D16" ).Value Then Rows(i).Delete
  3. Next i
 

------------------------

 

Proposition finale.
Tu peux te l'approprier complètement juste en comprenant tout ce code :)

 
Code :
  1. Sub recherchepassager()
  2.     ' (c) aud1885 (+ un peu de PPC)
  3.    
  4.     Sheets("liste des passagers" ).("B2:BS308" ).Copy Destination:=Sheets("Recherchepassager" ).Range("B30" ).   
  5.     Sheets("Recherchepassager" ).Range("B30:I30" ).Interior.ColorIndex = 15
  6.    
  7.     For i = 400 To 34
  8.         If Sheets("Recherchepassager" ).Range("E" & i).Value <> Sheets("Recherchepassager" ).Range("D16" ).Value Then Rows(i).Delete       
  9.     Next i
  10.    
  11.     reponse = MsgBox("La recherche est terminée. Si le résultat n'est pas satisfaisant, " & _
  12.                     "veuillez relancer une recherche avec un critère différent.", _
  13.                     vbOKOnly + vbInformation, "Information" )
  14. End Sub


Message édité par zeb le 18-07-2007 à 10:59:52

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bonjour ! Déja merci pour tes réponses !!
tu m'as dit de faire ca pour mon filtrage des lignes
Traduit en VB :


Code :
  1. For i = 400 To 34 Step -1
  2.     If Range("E" & i).Value <> Range("D16" ).Value Then Rows(i).Delete
  3. Next i



Maintenant je veux ajouter un filtrage dans cette même macro pour filtrer mes colonnes en fonction de la valeur de E17. (cest pour filtrer selon la date qui est en en tête des colonnes) Si je fais ca ca ne marche pas ... Sais tu où se trouve l'erreur?

Code :
  1. For n = k To bv
  2.     If Range("33" & n).Value <> Range("E17" ).Value Then Columns(n).Delete
  3. Next n

Plus d'informations

Salut aud1885,

A mon avis c'est ton test qui est faux. Vu que tu parcours les colonnes il est plus difficile d'utiliser Range.

Si on prends ton test dans un cas concret, par exemple n = 3 ca donne

Code :
  1. If Range("333" ).value


Donc tu devrais voir l'erreur, dans ce cas précis je te conseille de jeter un coup d'oeil à Cells.


---------------
S'il n'y a pas de solution c'est qu'il n'y pas de problème

Aller à :
 
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » supprimer les lignes en fonction de la valeur d'une cellule

Annonces Google
Publicité
Actualités relatives

Casio sur le chemin de l&#039;hydrogène

Publié le 17 May 2004

Le fabricant Casio a annoncé avoir confectionné la plus petit cellule d'alimentation au monde fonctionnant à l'hydrogène ! Casio veut intégrer cette cellule aux ordinateurs portables afin d'offrir une autonomie atteignant 16 heures. En fai Lire la suite

Fujitsu améliore sa ReRAM, la mémoire du futur ?

Publié le 14 December 2007

Fujitsu présenté les progrès de ses recherches sur la Resistive RAM, ou ReRAM, un nouveau type de mémoire volontiers annoncé comme la remplaçante de la Flash. La durée de vie a été décuplée et sa vitesse multipliée par 10 000 ! Lire la suite

Cuivre et dioxyde de silicium dans une nouvelle mémoire

Publié le 24 October 2007

Des chercheurs américains ont développé une mémoire composée de cuivre et de dioxyde de silicium, utilisant le phénomène de résistance électrique. Elle utilise des procédés de fabrication connus ce qui devrait aider sa démocratisation. Lire la suite

Intel double la capacité des PRAM

Publié le 05 February 2008

Intel aurait découvert des états intermédiaires entre l’état amorphe et cristallin du verre chalcogènide de la PRAM, permettant ainsi de stocker plus d’information sur une même surface. Lire la suite

Les derniers tests

Que choisir ? Home Cinema 5.1 ou projecteur de son ?

Publié le 25 September 2008

Faut-il craquer pour un ensemble 5.1 ou pour une barre de son ? Découvrez les forces et faiblesses comparées de chaque système. Lire la suite

Intel Core i7 (Nehalem) : une architecture signée AMD ?

Publié le 25 September 2008

Avec ses nouveaux processeurs Core i7, Intel fait évoluer les Core 2 en reprenant leur architecture, mais en lui rajoutant des technologies dont la plupart semblent avoir leur équivalent direct chez AMD. Impression ou réalité ? Lire la suite

Test du Nokia N96 : la vie sans écran tactile

Publié le 24 September 2008

Un téléphone haut de gamme peut il échapper à l'écran tactile ? Nokia a tenté le pari avec le N96. Lire la suite

Les nouveaux disques durs 1 To

Publié le 22 September 2008

Un an et demi après l'introduction du premier disque dur 1 To, les prix ont beaucoup diminué et de nouveaux modèles ont été lancés. Mais comment se comportent-ils entre eux et par rapport aux anciens ? Réponse dans ce comparatif. Lire la suite