Afficher les lignes par groupe en excel avec vb.net

malakrouhhi Messages postés 69 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 24 février 2010 - 17 déc. 2009 à 18:12
bonjourc Messages postés 47 Date d'inscription mardi 19 mars 2013 Statut Membre Dernière intervention 23 mars 2013 - 6 janv. 2010 à 16:21
Bonjour à tous et à toutes,

ben ,tjrs avec le vb.net et l'excel.

j'ai un fichier excel qui est deja rempli a partir d'une base de données sql/server,

ben pour un nombre de lignes il y a une information partagée, Alors moi je veux regrouper chaque groupe par ce nom "commun"

comme par exemple ça :
procedure
1-procedure1-traitement
2-procedure2-analyse
Manuel
1-Manuel1-Facture
2-Manuel2-BC


et ainsi de suite
Alors si qlq'1 a une idée n'hésitez pas de ma la passer,
je développe sous vb.net2008

Merci d'avance

Cordialement

Fati

10 réponses

sanaaSooma Messages postés 46 Date d'inscription dimanche 31 décembre 2000 Statut Membre Dernière intervention 9 mars 2010
21 déc. 2009 à 17:59
bonjour,

J'ai le même problème, estceque qlq'1 peux aider?????????!!!!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 déc. 2009 à 09:41
Outils
Macro
Nouvelle Macro
OK
Fusionne tes cellules via le menu format de cellules
Outils
Macro
Arrêter l'enregistrement
Alt+F11

code de la macro retenu :

Sub Macro1()
    Selection.MergeCells = True
End Sub


donc, pour une plage donnée, il suffit de mettre sa propriété MergeCells à True, tout simplement.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
bonjourc Messages postés 47 Date d'inscription mardi 19 mars 2013 Statut Membre Dernière intervention 23 mars 2013
29 déc. 2009 à 13:21
Je ne comprend aps très bien le problème; mais il me semble que c'est un tri simple.
Pour savoir comment faire, il faut utiliser l'aide aux macros, et en créer une.
Je te donnerai bien le code si tu veux, mais ai-je bien compris ton problème?
0
malakrouhhi Messages postés 69 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 24 février 2010 2
29 déc. 2009 à 16:58
MERCI pour vos réponses même si j'ai bcp attendu mais c pas grave,ce qui compte le plus c'est le résultat


voilà c'est pas justement un tri mais un regroupement des cellules qui ont un mot en commun
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malakrouhhi Messages postés 69 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 24 février 2010 2
29 déc. 2009 à 17:01
ah oui j'ai oublié,
ça doit passer lors du traitement du fichier Excel dans le code vb.net
0
bonjourc Messages postés 47 Date d'inscription mardi 19 mars 2013 Statut Membre Dernière intervention 23 mars 2013
30 déc. 2009 à 13:44
Bonjour
alors je pense qu'il faut d'abord définir la plage, et ensuite grouper cette plage.

Pour définir la plage, tu peux faire:
Option Explicit

Sub Test_Group()
Dim c As Range
Dim MaPlage As Range
Dim Ligne As Long
'On ne part pas de la première ligne, mais de la seconde. En effet, la fonction "group" sous excel a cette particularité qu'il
'faut obligatoirement une ligne de titre ou de synthèse (=> Données/Grouper et créer un plan/option)
Ligne = 1
'On initialise la plage a grouper
Set MaPlage = Feuil1.Range("A1").Offset(Ligne)
'On boucle jusqu'à la première cellule vide (cellule vide non accepté dans ce schéma)
Do While Feuil1.Range("A1").Offset(Ligne) <> ""
    'on regarde si la cellule en question est de ^m valeur que la cellule suivante
    If Feuil1.Range("A1").Offset(Ligne).Value = Feuil1.Range("A1").Offset(Ligne + 1).Value Then
        'si oui, on agrandit la plage pour prendre en compte la cellule
        Set MaPlage = Union(MaPlage, Feuil1.Range("A1").Offset(Ligne))
    Else
        'si non, on agrandit la plage pour prendre en compte la cellule
        Set MaPlage = Union(MaPlage, Feuil1.Range("A1").Offset(Ligne))
        'et on groupe
        MaPlage.Rows.Group
        'on "saute une ligne, pour toujours tenir compte de cette ligne de titre
        Ligne = Ligne + 1
        'et on réinitialise la plage
        Set MaPlage = Feuil1.Range("A1").Offset(Ligne + 1)
    End If
    'on passe à la ligne suivante
    Ligne = Ligne + 1
'et on boucle
Loop
End Sub

Voila ce que j'ai compris, et voila (en gros) comment j'y répondrais.
0
malakrouhhi Messages postés 69 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 24 février 2010 2
6 janv. 2010 à 13:28
Bonjour bonjourc;

Merci pour votre code ,
je l'ai testé mais ça me genère une erreur au niveau du
 
MaPlage = Union(MaPlage, xlWorkSheet.Range("A1").Offset(Ligne))


il me donne que "Union" n'est pas déclaré!!!!

Merci d'avance
0
bonjourc Messages postés 47 Date d'inscription mardi 19 mars 2013 Statut Membre Dernière intervention 23 mars 2013
6 janv. 2010 à 15:11
Tu peux me donner le message d'erreur exact?
Après, "union" reste une fonction de base à mon avis assez facile à contourner.

(mais je viens de réessayer sur un autre PC, et ca marche pas trop mal.)



Le vrai voyage, c'est d'y aller. Une fois arrivé, le voyage est fini. Aujourd'hui les gens commencent par la fin.
0
malakrouhhi Messages postés 69 Date d'inscription lundi 9 novembre 2009 Statut Membre Dernière intervention 24 février 2010 2
6 janv. 2010 à 15:32
Voici l'erreur :


Erreur 3 Le nom 'Union' n'est pas déclaré.
0
bonjourc Messages postés 47 Date d'inscription mardi 19 mars 2013 Statut Membre Dernière intervention 23 mars 2013
6 janv. 2010 à 16:21
Je n'arrive pas à trouver d'antécédents sur le web.
Vous êtes sur que "MaPlage" et "xlWorkSheet.Range("A1").Offset(Ligne)" sont bien des range?
Est ce que vous avez enlevé le "Set" (nécessaire pour ce genre d'opération)?

sinon, je crains de ne plus avoir d'idée. Essayer tout de même de rechercher "union" dans le menu d'aide d'Excel, il devrait le trouver, peut-etre ceci vous donnera une indication.

nb : J'en viens; essayer de remplacer le union par Application.union.
Cela marchera peut-être.




Le vrai voyage, c'est d'y aller. Une fois arrivé, le voyage est fini. Aujourd'hui les gens commencent par la fin.
0
Rejoignez-nous