FORUM Tom's Hardware » Programmation » VB / VBA / VBS » VBA recherche d'une valeur d'après ListBox et suppression de la ligne
 

VBA recherche d'une valeur d'après ListBox et suppression de la ligne

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



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : VBA recherche d'une valeur d'après ListBox et suppression de la ligne
 
Plus d'informations

Re bonjour,

Pas beaucoup plus experte que mon dernier message, j'aurais besoin d'un coup de pouce.
J'ai réussi à trouver comment récupérer un nom d'une listbox et à chercher ce nom dans la 1ère colonne de ma feuille "BD poste" pour le supprimer, mais je n'arrive pas à supprimer sur cette même ligne trouvée les données qui sont dans les colonnes B à N et la colonne Q. Je ne veux pas supprimer les éléments des colonnes O et P car j'ai des formules dedans.

Code :
  1. Private Sub CommandValider_Click()
  2.         Dim BDP As Worksheet
  3.         Dim T As Range
  4.         Dim TituASup As String
  5.    
  6.     Set BDP = Worksheets("BD poste" )
  7.     TituASup = ConfirmSUP.TitulaireASUP.Value
  8.     Set T = BDP.Columns(1).Cells.Find(what:=TituASup)
  9.     If T Is Nothing Then
  10.         MsgBox "Le titulaire n'a pas pu être supprimé. Vérifiez que vous avez sélectionné un Titulaire, sinon consultez votre Administrateur."
  11.         Unload Me
  12.         Else
  13.           BDP.Columns(1).Cells.Find(what:=TituASup).ClearContents
  14.     End If
  15.     Set T = Nothing
  16.     Unload Me
  17. End Sub



A votre bon coeur!

Plus d'informations

A force de chercher j'ai fini par trouver (même si ma solution est plutôt archaique), donc pas la peine de vous casser la tête sur le problème.


Aller va sans rancune :hello:

zeb
Profil : Modérateur libre

Donne-nous ta solution, que la réponse puisse servir à d'autres, s'il te plaît.


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

Oh! Zeb,
Je croyais que tu avais disparu de la surface du forum ou que tu me boudais.
Je suis contente de vois que tu es toujours là ! :sol:
Ne cri pas au scandale quand tu veras le code ci-dessous, je suis sûre que tu vas faire à peu près cette tête :ouch: .
Mais c'est le seul moyen que j'ai trouvé pour y arriver !
Ca à au moins le mérite de fonctionner comme on dit, après je pense qu'il y a du nettoyage à faire!!!! :D :D :D

Code :
  1. Private Sub CommandValider_Click()
  2.         Dim BDP As Worksheet
  3.         Dim BDF As Worksheet
  4.         Dim BDQ As Worksheet
  5.         Dim BDA As Worksheet
  6.         Dim GFDP As Worksheet
  7.         Dim T As Range
  8.         Dim TituASup As String
  9.     Set BDP = Worksheets("BD poste" )
  10.     Set BDF = Worksheets("BD form" )
  11.     Set BDQ = Worksheets("BD qualif" )
  12.     Set BDA = Worksheets("BD activ" )
  13.     Set GFDP = Worksheets("Gestion FDP" )
  14.     TituASup = ConfirmSUP.TitulaireASUP.Value
  15.     Set T = BDP.Columns(1).Cells.Find(What:=TituASup)
  16. Application.ScreenUpdating = False
  17.     If T Is Nothing Then
  18.         MsgBox "Le titulaire n'a pas pu être supprimé. Vérifiez que vous avez sélectionné un Titulaire, sinon consultez votre Administrateur."
  19.         Unload Me
  20.         Else
  21. ' On efface les 15 cellules à droite de la cellule active recherchée
  22.           BDP.Select
  23.           BDP.Columns(1).Cells.Find(What:=TituASup).Select
  24.           Range(ActiveCell(1, 1), ActiveCell(1, 15)).ClearContents
  25.              
  26. ' On supprime la colonne correspondant au titulaire dans la feuille BD Form'
  27.           BDF.Select
  28.           BDF.Rows(1).Cells.Find(What:=TituASup).EntireColumn.Delete
  29. ' On supprime la colonne correspondant au titulaire dans la feuille BD QUALIF'
  30.           BDQ.Select
  31.           BDQ.Rows(1).Cells.Find(What:=TituASup).EntireColumn.Delete
  32. ' On supprime la colonne correspondant au titulaire dans la feuille BD Form'
  33.           BDA.Select
  34.           BDA.Rows(1).Cells.Find(What:=TituASup).EntireColumn.Delete
  35.            
  36. ' On tri le tableau selon colonne ordre pour éviter qu'il y ait des lignes vides dans le tableau
  37.           BDP.Select
  38.           Range("A2:Q21" ).Select
  39.                 Selection.Sort Key1:=Range("P2" ), Order1:=xlAscending, Header:=xlNo, _
  40.                     OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
  41.                     DataOption1:=xlSortNormal
  42.     End If
  43.     Set T = Nothing
  44. ' Retour à la feuille gestiondes fiches de poste
  45.         GFDP.Select
  46. ' On décharge le formulaire
  47.     Unload Me
  48. Application.ScreenUpdating = True
  49. End Sub



By pour ce sujet, et à bientôt sur d'autres problèmes, car soyez en sûr il y en aura d'autres! :pt1cable:

zeb
Profil : Modérateur libre

Zeb S.A. - Service de nettoyage du code :

Code :
  1. Private Sub CommandValider_Click()
  2.     Dim BDP As Worksheet       
  3.     Dim T As Range
  4.     Dim TituASup As String
  5.     Set BDP = Worksheets("BD poste" )       
  6.     TituASup = ConfirmSUP.TitulaireASUP.Value
  7.    
  8.     Set T = BDP.Columns(1).Find(What:=TituASup)
  9.     If T Is Nothing Then
  10.         MsgBox "Le titulaire n'a pas pu être supprimé. " & _
  11.               "Vérifiez que vous avez sélectionné un Titulaire, " & _
  12.               "sinon consultez votre Administrateur."
  13.         Exit Sub
  14.     Else
  15.               ' // On efface les 15 cellules à droite de la cellule trouvée
  16.             Dim c As Range
  17.             Set c = BDP.Columns(1).Find(What:=TituASup)
  18.             Range(c, c(, 15)).ClearContents
  19.                
  20.             ' // On supprime les colonnes correspondant au titulaire dans chaque feuille
  21.             Worksheets("BD form"  ).Rows(1).Find(What:=TituASup).EntireColumn.Delete
  22.             Worksheets("BD qualif" ).Rows(1).Find(What:=TituASup).EntireColumn.Delete
  23.             Worksheets("BD activ"  ).Rows(1).Find(What:=TituASup).EntireColumn.Delete
  24.              
  25.                 ' // On tri le tableau selon colonne ordre pour éviter qu'il y ait des lignes vides dans le tableau
  26.             BDP.Range("A2:Q21" ).Sort Key1:=Range("P2" ), Header:=xlNo, DataOption1:=xlSortNormal
  27.             Set T = Nothing
  28.     End If
  29.    
  30.     ' // Retour à la feuille gestion des fiches de poste
  31.     Worksheets("Gestion FDP" ).Select
  32.     ' // On décharge le formulaire
  33.     Unload Me
  34. End Sub



  • Non, pas de select. :fou: Ca bouffe tellement de ressource et ça clignote tellement qu'on est obligé de faire des Application.ScreenUpdating = False. Donc on vire les Select et les ScreenUpdating.
  • Tu fais deux fois un Unload Me si T est vide. --> Spa bien. :o
  • Tu mets T à vide s'il est vide. C'est inutile. --> Spa bien. :o (Spa grave plus plus :o )
  • Regarde lignes 18/19, comment mémoriser une cellule pour s'en reservir sans la sélectionner.
  • Ligne 28, j'ai viré les paramètres par défaut. Ca se discute. Mais je suis partisan de ne pas mettre les valeurs par défaut, comme ça on voit bien ce que l'on fait explicitement. Le reste, c'est par défaut [:spamafote]
  • Ligne 37, un Select ? Oui !!!!! :bounce: Voilà le cas où c'est utile :)
  • J'ai supprimé Cells qui ne servait pas à grand'chose après Rows() ou Columns()
  • Curieusement, j'ai viré les variables qui pointaient vers des worksheets quand l'utilisation de ces variables était unique. C'est du point de détail. Et on peut éventuellemet se justifier du contraire.


Tu vois, ce n'était pas un si gros nettoyage :)


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

A tout hasard, tu ne songes pas à faire des formations ?! :sol:
Je pense que tu aurais bon nombre d'adepte.

Pour les Select, au début j'avais tout viré, mais j'avais des bugs pour le tri dans une plage de cellule où il y a des cellules vides en bas et à droite, au final j'ai remis les select pour me sortir de ce mauvais pas! J'avoue c'était la solution de facilité ! :D
Je viens d'essayer ton code et j'ai toujours la même erreur d'exécution 1004 sur la ligne de tri :

Code :
  1. BDP.Range("A2:Q21" ).Sort Key1:=Range("P2" ), Header:=xlNo, DataOption1:=xlSortNormal


Le reste fonctionne à merveille.
A+

zeb
Profil : Modérateur libre

J'ai été prof, autrefois... D'où mon gros défaut de ne pas donner de solution quand elle est trop facile ;)

 

________________________

 



BDP.Range("A2:Q21" ).Sort Key1:=Range("P2" ), Header:=xlNo, DataOption1:=xlSortNormal
¯¯¯¯\_____________/ ??\_________/
Range #1 Range #2

 

Rhoooo !
Mets un point d'arrêt sur cette ligne ([9]) et lance ta macro.
Quand tout s'immobilise avant l'erreur fatidique, ouvre la fenêtre Exécution et tape l'une après l'autre ces commandes :

? BDP.Range("A2:Q21" ).Address(External:=True)
? Range("A2" ).Address(External:=True)

N'y-a-t'il rien qui te dérange ?
Si oui, tu as ta solution. (Donne-la quand même pour les autres ;) )


Message édité par zeb le 29-07-2008 à 23:23:40

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

Bonjour Zeb,

Bon d'accord ! tu as encore tout compris.
Voici le nouveau code de la ligne de tri :

Code :
  1. BDP.Range("A2:Q21" ).Sort Key1:=BDP.Range("P2" ), Header:=xlNo, DataOption1:=xlSortNormal


Il y a quand même quelque chose que je ne trouve pas très logique : on enlève les "Select" et "Selection" et on ne modifie rien de plus et il change de référence de feuille !!! C'est ce que j'ai découvert en tapant les lignes que tu m'as donné dans la fenêtre Exécution.

Merci Zeb pour m'avoir mis sur la voix! Et pour tout le reste bien sûr!
A+ sur d'autres sujet car j'ai loin d'avoir fini mon projet.


zeb
Profil : Modérateur libre

C'est le piège !

Range() = ActiveSheet.Range()



Je vire et fais virer les Select/Activate parce qu'ils consomment énormément de ressources. Pour trois feuilles, douze cellules, ce n'est pas très grave, mais pour 3x256x65536 cellules (onglets/colonnes/lignes), ça commence à faire beaucoup ! Surtout vers la fin. On peut traiter les 50 millions de cellules d'un classeur Excel standard en quelques instants, à condition de ne pas faire de Select.


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

  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » VBA recherche d'une valeur d'après ListBox et suppression de la ligne

Aller à :
 

Annonces Google
Publicité
Offres partenaires
Actualités relatives

Le moteur de recherche Yahoo souffle ses dix bougies

Publié le 02 March 2005

En 1994, deux étudiants américains de Stanford, David Filo et Jerry Yang, lançaient un site personnel baptisé « Jerry's Guide to the World Wide Web » et qui répertoriait les meilleures sources du Web d’outre atlantique. Après avoir séduit plusieurs Lire la suite

Un deuxième trimestre moribond pour Yahoo

Publié le 18 July 2007

Yahoo n’est plus à la fête. Le moteur de recherche américain enregistre un deuxième trimestre poussif après un premier exercice peu concluant. Sur l’année écoulée, le groupe constate un recul de 1,8% de son bénéfice net à 161 millions de dollars. Jerry Lire la suite

Turboscout, le super-métamoteur de recherche

Publié le 07 March 2005

Un étudiant singapourien de 21 ans viens de lancer Turboscout, un nouvel outil de recherche qui aide des utilisateurs d'Internet à accéder et comparer les résultats de plus de 90 moteurs de recherche à travers 7 catégories sur une simple page Web, Lire la suite

Le point sur tous les services de recherche de Google

Publié le 19 November 2006

Chercher une information sur Google, c’est très simple via un ou plusieurs mots-clés, mais connaissez-vous toutes les limites du fabuleux moteur de recherche ? Savez-vous que vous pouvez en plus des sites Internet et des images, trouver en quelques ... 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