[RESOLU] [VBS] copier uniquement les lignes filtrées sous Excel

copier uniquement les lignes filtrées sous Excel [RESOLU] [VBS] - VB/VBA/VBS - Programmation

Marsh Posté le 22-07-2009 à 10:38:34    

Bonjour à tous,
 
Dans le cadre de mon stage je dois réaliser un script en VBS. Je n'utilise ce langage que depuis quelques jours.
Je dispose d'un fichier Excel recensant toutes les permissions sur les dossiers d'un serveur de stockage. Mon objectif est d'utiliser ce fichier afin de mettre à jour les permissions pour chaque utilisateur. En effet le nom des utilisateurs va changer, ce qui supprimera leurs permissions personnelles.
 
Chaque ligne comprend ses informations:
chemin du dossier, nom de compte, droits
 
Mon script fonctionne si je parcours toutes les lignes.Il récupère les informations de l'utilisateur souhaité et va mettre à jour les permissions en appelant un autre script fait par Microsoft : xcacls.vbs. Mais étant donné que le fichier fait environ 60000 lignes j'aimerais optimiser le traitement en filtrant uniquement l'utilisateur sur lequel je souhaite mettre à jour les permissions. Puis récupérer les informations uniquement des lignes filtrées.
 
Je réussi à filtrer avec ce code là:
Feuille_XLS.Range("B2" ).AutoFilter 2, OldUser  
 
(OldUser étant le nom de compte sur lequel on souhaite récupérer les permissions)
 
Ensuite je suis bloqué. J'ai parcouru les différents sujets sur internet, tester plusieurs choses mais je n'arrive pas à travailler uniquement sur les lignes visibles (je ne réussi pas à utiliser SpecialCells(xlTypeVisible) par exemple). De plus on ne trouve presque uniquement des informations pour VBA, et j'ai du mal à distinguer ce qui est pareil ou différent en VBS :/
 
Auriez vous une solution qui au choix:
- me permettrait de parcourir uniquement les lignes visibles
- me permettrait de copier les lignes visibles sur une nouvelle feuille.
 
Je vous remercie pour votre aide,
 
Cordialement,
 
-BøB-


Message édité par -BøB- le 23-07-2009 à 09:44:36
Reply

Marsh Posté le 22-07-2009 à 10:38:34   

Reply

Marsh Posté le 22-07-2009 à 15:32:58    

Bonjour
 
Le souci c'est que les lignes existent encore. Elles sont justes masquées.
 
Une solution simple, mais sale serait dans un premier temps d'exclure les lignes qui ont une hauteur = 0
 
Le mieux, c'est d'appliquer ton filtre, tout selectionner, copier dans un nouvel onglet, et faire ta recherche la dedans.
 
Le SpecialCells ne va pas t'avancer beaucoup, enfin avec mes connaissances de la chose. Parceque meme si tu recuperes le range de la zone filtrée, ca te servira a rien. (Sauf si les infos sont toutes a la suite pour la meme personne/user et encore)
 
Feuille_XLS <(--- c'est ton objet Excel ?
 
Edit : On va dire que oui

Code :
  1. Set Feuille_XLS = CreateObject("Excel.Application" )
  2. Feuille_XLS.Sheets(1).Select
  3. Feuille_XLS.Cells.Select
  4. Feuille_XLS.Selection.Copy
  5. Feuille_XLS.Sheets.Add
  6. Feuille_XLS.ActiveSheet.Paste
  7. Feuille_XLS.Range("A1" ).Select


Message édité par SuppotDeSaTante le 22-07-2009 à 15:40:00

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 08:42:58    

Merci pour ta réponse dje69r.  
J'ai trouvé une solution qui marche juste un peu avant que tu répondes. Elle revient au même que toi finalement. Au début je croyais que si je copiais toute ma feuille, il prenait aussi les cellules cachées. Je me suis embété à chercher compliquer pour rien finalement ^^
 
Feuilles_XLS c'était une feuille de excel.
 
Voici mon code final:

Code :
  1. Dim Fichier_XLS,nom_fichier
  2. Fichier_XLS = "E:\tools\Diffuser\Migration\dump_data.xls"
  3. nom_fichier="dump_data"
  4. set xlapp = WScript.CreateObject("EXCEL.application" )
  5. xlapp.Visible = True
  6. xlapp.workbooks.open   Fichier_XLS
  7. Set feuille_origine = xlapp.Worksheets(nom_fichier)
  8. Set Feuille_trie= xlapp.Worksheets.add
  9. feuille_origine.Range("B2" ).AutoFilter 2, OldUser
  10. feuille_origine.Cells.EntireRow.Copy
  11. Feuille_trie.Paste

Reply

Sujets relatifs:

Leave a Replay

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