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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA - Selections lignes tableau sous Excel

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA - Selections lignes tableau sous Excel

n°2059509
fidoboulet​te
Posté le 25-02-2011 à 05:30:29  profilanswer
 

Bonjour,
 
J'ai fait une recherche sur le forum et je n'ai rien trouvé qui corresponde à mon problème alors voilà:
J'ai réalisé sous VBA un programme me créant un tableau Excel. Dans la suite de mon programme, je souhaiterai sélectionner toutes les lignes de ce tableau pour pouvoir, entre autre, trier les données à partir de la première colonne. Il est possible que certaines lignes soient vides sauf la première colonnes, du coup la "fonction" curent region ne fonctionne pas. Le nombre de ligne peux être variable mais pas le nombre de colonne.... ça ressemble à quelque chose de ce genre:
 
 
...
5 2 1 14 25
4
3 1 2 30 12
2  
1 9 4 15 78
 
Merci d'avance de votre aide car là je ne vois vraiment pas comment démarrer la macro.

mood
Publicité
Posté le 25-02-2011 à 05:30:29  profilanswer
 

n°2059545
mmarle
Posté le 25-02-2011 à 10:00:27  profilanswer
 

Bonjour,
 
Voici un petit bout de code qui devrait répondre au problème.
 

Code :
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2. '*************************'
  3. '* Sélection de ligne(s) *'
  4. '*************************'
  5. 'Déclaration variable(s)'
  6. Dim DEB As Integer
  7. Dim FIN As Integer
  8. 'Attribution des valeurs'
  9. DEB = 1
  10. FIN = Range("A65536" ).End(xlUp).Row
  11. 'Sélection'
  12. Range("A" & DEB, "A" & FIN).EntireRow.Select
  13. End Sub


 
Il ne reste plus qu'a ajouter la commande "Sort" pour trier les lignes.
 
@bientôt

n°2059573
fidoboulet​te
Posté le 25-02-2011 à 10:56:44  profilanswer
 

Ouaouh!!! quelle rapidité!! je m'empresse de tester ceci et te tiens au courant... quoiqu'il en soit, merci!!!!
 
EDIT: Et bien avec une petite adaptation à mon besoin, cela à parfaitement fonctionné... encore merci.
Par contre, histoire d'améliorer ma compréhension, que veulent dire en "bon français" les lignes de programme?


Message édité par fidoboulette le 25-02-2011 à 13:39:08
n°2061430
fidoboulet​te
Posté le 06-03-2011 à 15:11:23  profilanswer
 

mmarle a écrit :

Bonjour,
 
Voici un petit bout de code qui devrait répondre au problème.
 

Code :
  1. Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  2. '*************************'
  3. '* Sélection de ligne(s) *'
  4. '*************************'
  5. 'Déclaration variable(s)'
  6. Dim DEB As Integer
  7. Dim FIN As Integer
  8. 'Attribution des valeurs'
  9. DEB = 1
  10. FIN = Range("A65536" ).End(xlUp).Row
  11. 'Sélection'
  12. Range("A" & DEB, "A" & FIN).EntireRow.Select
  13. End Sub


 
Il ne reste plus qu'a ajouter la commande "Sort" pour trier les lignes.
 
@bientôt


 
Bonjour, bonjour,
 
bon ben finalement, je reviens vers vous car je ne m'en sort pas finalement avec le tri....
Alors voila le code que j'ai ecrit à partir de la réponse de mmarle:
 

Code :
  1. Sub Reinit_R14()
  2. '
  3. Sheets("R14" ).Select
  4. Dim DEB As Integer
  5. Dim FIN As Integer
  6. DEB = 9
  7. FIN = Range("A65536" ).End(xlUp).Row
  8. Range("A" & DEB, "H" & FIN).Select
  9. ActiveWorkbook.Worksheets("R14" ).Sort.SortFields.Clear
  10. ActiveWorkbook.Worksheets("R14" ).Sort.SortFields.Add Key:=Range("A9" ), _
  11.         SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  12. End Sub


 
Sur la ligne Range, si j'ai bien compris, on peut dire à la macro où se trouvent les données: ici entre les colonnes A et H.... jusqu'ici, tout fonctionne bien, j'ai bien tout mon tableau qui est sélectionné au lancement de la macro....
 
Après, à partir de l'enregistreur de macro, j'ai lancé un tri et recopié le code.... mais là, rien ne se fait... ce que je voudrai, c'est que le tri soit croissant à partir de la colonne A.... je suppose que c'est pas très dur à corriger mais je ne vois pas où est le problème...  
D'ailleurs, si quelqu'un pouvait m'expliquer la signification de la ligne 9: "ActiveWorkbook.Worksheets("R14" ).Sort.SortFields.Clear" ce serait très gentil.
merci de votre aide.
 
EDIT: Bon ben je viens de résoudre mon pb en rajoutant les lignes suivantes (merci l'enregistreur :D ):

Code :
  1. With ActiveWorkbook.Worksheets("R14" ).Sort
  2.         .SetRange Range("A" & DEB, "H" & FIN)
  3.         .Header = xlGuess
  4.         .MatchCase = False
  5.         .Orientation = xlTopToBottom
  6.         .SortMethod = xlPinYin
  7.         .Apply
  8.     End With


 
Je ne sais pas si la ligne setRange est orthodoxe mais ça fonctionne bien.... peut être avez vous plus simple?


Message édité par fidoboulette le 06-03-2011 à 15:22:16
n°2061575
mmarle
Posté le 07-03-2011 à 10:39:26  profilanswer
 

Salut fidoboulette,
 
Ce code fonctionne bien.
 

Code :
  1. Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  2.  
  3. '*************************'
  4. '* Sélection de ligne(s) *'
  5. '*************************'
  6. 'Déclaration variable(s)'
  7. Dim DEB As Integer
  8. Dim FIN As Integer
  9. 'Attribution des valeurs'
  10. DEB = 1
  11. FIN = Range("A65536" ).End(xlUp).Row
  12. 'Sélection'
  13. Range("A" & DEB, "A" & FIN).EntireRow.Select
  14. 'Tri automatique des lignes'
  15. With Selection
  16.     .Sort Key1:=Range("A" & DEB), order1:=xlAscending, header:=xlGuess, Orientation:=xlTopToBottom
  17. End With
  18.  
  19. End Sub


@+

n°2061705
fidoboulet​te
Posté le 07-03-2011 à 18:03:58  profilanswer
 

mmarle a écrit :

Salut fidoboulette,
 
Ce code fonctionne bien.
 

Code :
  1. Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  2.  
  3. '*************************'
  4. '* Sélection de ligne(s) *'
  5. '*************************'
  6. 'Déclaration variable(s)'
  7. Dim DEB As Integer
  8. Dim FIN As Integer
  9. 'Attribution des valeurs'
  10. DEB = 1
  11. FIN = Range("A65536" ).End(xlUp).Row
  12. 'Sélection'
  13. Range("A" & DEB, "A" & FIN).EntireRow.Select
  14. 'Tri automatique des lignes'
  15. With Selection
  16.     .Sort Key1:=Range("A" & DEB), order1:=xlAscending, header:=xlGuess, Orientation:=xlTopToBottom
  17. End With
  18.  
  19. End Sub


@+


 
Je confirme....  :D merci

n°2062100
fidoboulet​te
Posté le 09-03-2011 à 17:32:56  profilanswer
 

Bonjour à tous et surtout à mmarle qui est mon sauveur....  :)  
j'ai encore deux problème et une fois résolus, je viendrai à bout de mon "projet".
alors voila:
une fois que j'ai fait mes petites manip avec mon tableau... je souhaite dans un premier temps enregistrer mon fichier puis effacer toutes mes données (du tableau sus cité) et toutes les feuilles sauf trois qui sont identifiées... une sorte de réinitialisation en somme.
Une fois fait, je veux ré-enregistrer le tout sous un nom que j'appellerai "modèle".
 
En faisant une recherche sur google, j'ai trouvé des bout de lignes qui colleraient... presque!
Le nom du premier enregistrement se ferait en fonction de la valeurs de certaines cellules d'une feuille... mais surtout, je voudrais que l'enregistrement se fasse dans le dossier où il a été ouvert.
voici le bout de code d'enregistrement:
 

Code :
  1. Sheets("PVD" ).Select
  2.     Dim Chemin
  3.     Chemin = "C:\Users\Pierre\Documents\Mes documents\ONF\Fond de coupe\"
  4.     Dim MonFichier
  5.     MonFichier = Chemin & Range("K7" ).Value & " _ VB FDC _ P" & Range("E26" ).Value2 & ".xls"
  6.     ActiveWorkbook.SaveAs Filename:=MonFichier, _
  7.     FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
  8.     ReadOnlyRecommended:=False, CreateBackup:=False


 
le problème c'est que là je lui indique un chemin et je ne vois pas comment triturer le code pour que ça s'enregistre dans un répertoire "relatif" (je sais pas si je suis clair.... :whistle: )
 
Mon deuxième problème est que un peu plus loin, je voudrait effacer toutes les feuilles du classeurs sauf trois feuilles qui portent tjrs le même nom.
Pareil, après une recherche google, j'ai trouvé un bout de code qui théoriquement devrait le faire:
 

Code :
  1. Dim Feuille As Worksheet
  2.     On Error Resume Next
  3.     Application.DisplayAlerts = False
  4.     For Each Feuille In Worksheets
  5.      If (Feuille.Name <> "PVD,R14,bases de référence" ) Then
  6.         Feuille.Delete
  7.      End If
  8.     Next


or dans ce cas, il m'éfface tout  sauf la dernière feuille nommée "bases de référence"...
voilà, vu que je ne comprend pas grand chose à ce que je fais, peut être que c'est trois fois rien à modifier mais je n'y arrive pas...
merci de votre aide.


Message édité par fidoboulette le 09-03-2011 à 17:33:44
n°2062116
mmarle
Posté le 09-03-2011 à 19:11:01  profilanswer
 

Salut fidoboulette,
 
A - Pour le chemin relatif, si j'ai bien compris, ce serait le chemin par défaut où se trouve le classeur ouvert.
 

Code :
  1. Chemin = ActiveWorkbook.Path & Application.PathSeparator

Code :
  1. Activeworkbook.path

est le chemin du classeur ouvert  
 
et

Code :
  1. Application.PathSeparator

est un "\".
 
 
B - Pour la suppression de feuille(s) (Réinitialisation)
 
Cas où les feuilles à garder sont au début:

Code :
  1. '****************************'
  2. '* Suppression des Feuilles *'
  3. '****************************'
  4. 'Déclaration variable(s)'
  5. Dim Feuille As Byte
  6. Dim DEB As Byte
  7. Dim FIN As Byte
  8. 'Attribution valeur'
  9. DEB = 4
  10. FIN = Sheets.Count
  11. 'Procédure'
  12. For Feuille = FIN To DEB Step -1
  13.     Sheets(Feuille).Delete
  14. Next Feuille


 
Cas où les feuilles à garder sont à la fin:

Code :
  1. '****************************'
  2. '* Suppression des Feuilles *'
  3. '****************************'
  4. 'Déclaration variable(s)'
  5. Dim Feuille As Byte
  6. Dim DEB As Byte
  7. Dim FIN As Byte
  8. 'Attribution valeur'
  9. DEB = 1
  10. FIN = Sheets.Count - 3
  11. 'Procédure'
  12. For Feuille = DEB To FIN
  13.     Sheets(Feuille).Delete
  14. Next Feuille

Il ne reste plus qu'a adapter le code.
 
@+

Message cité 1 fois
Message édité par mmarle le 10-03-2011 à 07:54:03
n°2062362
fidoboulet​te
Posté le 10-03-2011 à 18:35:01  profilanswer
 

mmarle a écrit :

Salut fidoboulette,
 
A - Pour le chemin relatif, si j'ai bien compris, ce serait le chemin par défaut où se trouve le classeur ouvert.
 
B -  
'Cas où les feuilles à garder sont à la fin'
 
'Déclaration variable(s)'
Dim Feuille As Byte
Dim DEB As Byte
Dim FIN As Byte
 
'Attribution valeur'
DEB = 1
FIN = Sheets.Count - 3
 
'Procédure'
For Feuille = DEB To FIN
    Sheets(Feuille).Delete
Next Feuille[/cpp]Il ne reste plus qu'a adapter le code.
 
@+


 
Génial  :D ... merci Mais lorsque je lance ma macro, j'ai le message d'erreur "déclaration existante dans portée en cours"...
effectivement, j'utilise déjà la fonction Dim DEB et Dim FIN au début pour sélectionner automatiquement mon tableau.... comment pallier à ce problème?
 
Pour le pt A - tu as tout à fait compris... le fichier excel doit pouvoir être transporté d'une clé USB à une autre, ou sur un PC.... donc l'enregistrement doit se faire dans le répertoire où le fichier est ouvert.
 
Merci à toi.

n°2062435
mmarle
Posté le 11-03-2011 à 08:43:29  profilanswer
 

Salut fidoboulette,
 
Le message d'erreur survient dès lors qu'une variable est déclarée plus d'une fois sous le même nom.
 

Code :
  1. Sub MaProcédure()
  2. Dim DEB As integer
  3. ...
  4. ...
  5. ...
  6. Dim DEB as integer
  7. ...
  8. ...
  9. ...
  10. End Sub

Une erreur est générée! Il suffit donc de supprimer une des deux déclarations où bien de déclarer sous un autre nom (Exemple: DEBTab pour le tableau et DEBFeu pour les feuilles)
@+

mood
Publicité
Posté le 11-03-2011 à 08:43:29  profilanswer
 

n°2062696
fidoboulet​te
Posté le 11-03-2011 à 18:27:07  profilanswer
 

mmarle a écrit :

Salut fidoboulette,
 
Le message d'erreur survient dès lors qu'une variable est déclarée plus d'une fois sous le même nom.
 

Code :
  1. Sub MaProcédure()
  2. Dim DEB As integer
  3. ...
  4. ...
  5. ...
  6. Dim DEB as integer
  7. ...
  8. ...
  9. ...
  10. End Sub

Une erreur est générée! Il suffit donc de supprimer une des deux déclarations où bien de déclarer sous un autre nom (Exemple: DEBTab pour le tableau et DEBFeu pour les feuilles)
@+


 
Bonjour mmarle (et les autres aussi...),
bon j'ai encore un problème... et un message d'erreur: "Erreur execut '9': L'indice n'appartient pas à la sélection" ... lorsque je lance le débogage, j'ai la ligne "Sheet(Feuille).Delete" qui est surlignée en jaune..
je me suis dit que ce n'était pas "Feuille" qu'il fallait mettre entre les parenthèses mais le nom du dernier onglet (pour moi, il s'appelle "Base de référence).... mais apparemment ce n'est pas ça.....
 
Donc dans mon effacement d'onglet, je voudrai garder les 3 derniers et effacer tous ceux avant.... j'ai donc repris ton code comme ceci en modifiant le nom:
 

Code :
  1. '****************************'
  2.     '* Suppression des Feuilles *'
  3.     '****************************'
  4.  
  5.     'Cas où les feuilles à garder sont à la fin'
  6.  
  7.     'Déclaration variable(s)'
  8.     Dim Feuille As Byte
  9.     Dim DEBFeu As Byte
  10.     Dim FINFeu As Byte
  11.  
  12.     'Attribution valeur'
  13.     DEBFeu = 1
  14.     FINFeu = Sheets.Count - 3
  15.  
  16.    'Procédure'
  17.    For Feuille = DEBFeu To FINFeu
  18.    Sheets("bases de référence" ).Delete
  19.    Next Feuille

 
Je suppose que c'est une erreur bête mais vu que je ne suis qu'une bille en macro....
merci encore à toi
 

n°2063626
mmarle
Posté le 15-03-2011 à 14:52:25  profilanswer
 

Salut fidoboulette,
 
Je ne comprend pas, je viens de vérifier le code et tout fonctionne!
 
Peut-être pourrais-tu publier le code complet de ton application, avec une description précise de toutes les tâches que tu souhaites réaliser en fonction des conditions requises (Exemples:Nbre de feuilles par défaut, leurs noms, etc...).
 
@+

n°2063723
fidoboulet​te
Posté le 15-03-2011 à 16:34:34  profilanswer
 

mmarle a écrit :

Salut fidoboulette,
 
Je ne comprend pas, je viens de vérifier le code et tout fonctionne!
 
Peut-être pourrais-tu publier le code complet de ton application, avec une description précise de toutes les tâches que tu souhaites réaliser en fonction des conditions requises (Exemples:Nbre de feuilles par défaut, leurs noms, etc...).
 
@+


Salut,
en fait, j'ai trouvé la réponse en demandant à des spécialistes informatiques de ma boite....
voici le code qu'ils m'ont proposé et qui fonctionne très bien pour mon cas:

Code :
  1. '* Suppression des Feuilles *'
  2.     Dim ws As Worksheet
  3. Application.DisplayAlerts = False
  4. Application.ScreenUpdating = False
  5. For Each ws In Worksheets
  6.     If ws.Name <> "PVD" And ws.Name <> "R14" And ws.Name <> "bases de référence" Then
  7.         ws.Delete
  8.     End If
  9. Next
  10. Application.DisplayAlerts = True
  11. Application.ScreenUpdating = True


 
mon problème est résolu...  :bounce:  
et mon fichier est quasiment terminé...  
Je viens juste de découvrir un nouveau souci avec une impression automatique mais j'en ferai part au forum (et à toi puisque tu es le seul à avoir proposé des soluces....  :D ) si je ne trouve pas.
en tout cas, merci bcps de t'être décarcassé
A+

n°2063922
mmarle
Posté le 16-03-2011 à 07:52:33  profilanswer
 

Oui trés bonne solution que de parcourir la collection Worksheets!
 
@bientôt

n°2063927
fidoboulet​te
Posté le 16-03-2011 à 08:36:23  profilanswer
 

mmarle a écrit :

Oui trés bonne solution que de parcourir la collection Worksheets!
 
@bientôt


 
Ah?? c'est ce que j'ai fais???  :D  
Non vraiment, j'y comprend pas grand chose aux macros... mais cette année j'aurai des formations donc j'espère que ça m'éclairera un peu... c'est vraiment chiant de faire des trux que je ne comprend aps complètement.....  :fou:  
merci encore à toi


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

  VBA - Selections lignes tableau sous Excel

 

Sujets relatifs
Supprimer des lignescopier lignes excel et coller dans corps de mail outlook (VBA)
[VBA Excel] Keycode -> ? [Résolu]Excel ?
Sauts de lignes Textarea (nl2br fonctionne pas)afficher un fichier texte dans un tableau avec android
[VBA] Dernière ligne vide dans un fichier excel vide 
Plus de sujets relatifs à : VBA - Selections lignes tableau sous Excel


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR