Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 12h35   #1
Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 94
Points : 40
Points : 40
Envoyer un message via MSN à lakhdar16
Par défaut exporter un résultat d'une zone de liste en XLS avec mise en forme "borders"

Bonjour,

j'ai une fonction qui me permet d'exporter le résultat d'une zone de liste en Excel, tout marche bien. je voulais ajouté la mise en forme de la plage exporter en rajoutant une bordure en double "xlDouble" pour toute la plage exportée.

le code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Set oWork = oExcel.Workbooks.Open(strNameFile)
 
        ' active la 1ere feuille
        Set oFeuille = oExcel.ActiveSheet
 
        '   recupère le n° de la dernière ligne rempli + 1
        l = oFeuille.Cells.SpecialCells(xlCellTypeLastCell).Row
 
        '   ouvre la requete avec la SQL select
        Set rst = CurrentDb.OpenRecordset(StrSql, dbOpenSnapshot, dbForwardOnly)
 
        ' compte le nombre de champs à copier (initialise le compteur c )
        C = rst.Fields.Count
        ' rajoute 1
        If l > 1 Then l = l + 1
 
        If Msgbox("Souhaitez-vous nettoyer le fichier EXCEL ?", vbYesNo, "Export EXCEL") = vbYes Then
            ' option nettoyage de feuille ouverte
            oFeuille.Rows("1:65536").ClearContents
            oFeuille.Rows("1:65536").ClearFormats
            oFeuille.Rows("1:65536").Clear
            ' debut de fichier
            l = 1
        End If
 
        If Msgbox("Souhaitez-vous insérer les noms des champs ?", vbYesNo, "Export EXCEL") = vbYes Then
            '   copie le nom des champs sur la première ligne
            For i = 1 To C
                oFeuille.Cells(l, i) = rst(i - 1).Properties("Caption")
                oFeuille.Cells(l, i).Interior.Color = RGB(0, 191, 255) ' c'est le gris Excel
 
            Next i '   traite chaque record
 
            oFeuille.Rows("1:l", "1:C").Borders.LineStyle = xlDouble
 
            ' ligne suivante
            l = l + 1
        End If
 
        ' copie le recordset
        oFeuille.Cells(l, 1).CopyFromRecordset rst
 
        '--------ACCESS-------------
        '   ferme le recordset libère l'objet
        rst.Close
        Set rst = Nothing
 
        '--------EXCEL--------------
        '   ajuste les cellules
        oFeuille.Rows.AutoFit
        '   rend la feuille visible
        oExcel.Application.Visible = True
        '   active la fenetre principale EXCEL
        oExcel.Windows(1).Visible = True
        '   sauve la feuille EXCEL
        oWork.Close (True)
        oExcel.Quit
        '   ferme l'objet xls
        Set oFeuille = Nothing
        Set oWork = Nothing
        Set oExcel = Nothing
    End If
le problème c'est j'arrive pas à le faire, pour toute la plage (pas toute la feuille).

je pense que l'erreur est dans le code suivant:

Code :
oFeuille.Rows("1:l", "1:C").Borders.LineStyle = xlDouble
quelqu'un a une idée pour m'expliquer comment puis-je appliquer une bordure en double pour la plage de la résultat exporté?

merci d'avance.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h10   #2
Candidat au titre de Membre du Club
 
Inscription : novembre 2010
Messages : 47
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 47
Points : 12
Points : 12
J'ai pas essayé mais essaie de changer cette ligne
Code :
oFeuille.Rows("1:l", "1:C").Borders.LineStyle = xlDouble
Comme cela
Code :
oFeuille.Rows("L1:C1", "L" & derniereLigne & ":C" & derniereLigne).Borders.LineStyle = xlDouble
Ou
Code :
oFeuille.Rows("L1:C" & derniereLigne).Borders.LineStyle = xlDouble
Ou
Code :
oFeuille.Rows("L1:C1").Borders.LineStyle = xlDouble
avec derniereLigne le numéro de ta dernière ligne remplie (ya des sujets qui traitent de ça il me semble)
zenico64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h19   #3
Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 94
Points : 40
Points : 40
Envoyer un message via MSN à lakhdar16
Bonjour,

merci pour ta réponse,

merci de bien lire le code, le "l" est le numéro de la dernière ligne à remplir, et le "C" c'est le nombre des champ à insérer.

ce que je veux c'est affecter la mise en forme au résultat de la zone de liste lors de l'exportation en Excel. en sachant le nombre des ligne à inséré "zone_de_liste.listCount" et le nombre de champ "C".

merci à vous.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 15h27   #4
Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 94
Points : 40
Points : 40
Envoyer un message via MSN à lakhdar16
pour encadrer la première ligne j'ai fais ça:

Code :
1
2
3
4
5
            For i = 1 To C
                oFeuille.Cells(l, i) = rst(i - 1).Properties("Caption")
                oFeuille.Cells(l, i).Interior.Color = RGB(0, 191, 255)
                oFeuille.Cells(l, i).Borders.LineStyle = xlDouble
            Next i '   traite chaque record
mais je ne sais pas comment appliquer sur toute la plage.

si quelqu'un peut m'indiquer ou me donner un coup de pouce.

merci .
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 11h38   #5
Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 94
Points : 40
Points : 40
Envoyer un message via MSN à lakhdar16
bonjour,

j'ai essayé la méthode par sélection:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 N = Me.lst_resultat.ListCount
.
.
.
.
.
.
 
        oFeuille.Range(Cells(l, 1), Cells(N, C)).Select 'pour sécelctionner la plage copier dans la feuille
 
        With Selection.Borders ' on applique la mise en forme
        .LineStyle = xlDot
        End With
mais ca marche pas erreur méthode Cells.

quelqu'un peut m'aider?

merci.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 10h28   #6
Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 94
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 94
Points : 40
Points : 40
Envoyer un message via MSN à lakhdar16
Bonjour;

j'ai espéré de trouver une réponse de votre part, mais bon ! après quelque recherche j'ai utiliser l'instruction " CurrentRegion " qui me permet de sélectionner les cellules non vides.

Code :
1
2
3
4
5
        Range("A1").CurrentRegion.Select ' pour sélectionner les cellules non vides 
 
        With Selection.Borders ' appliquer la mise en forme
        .LineStyle = xlDot
        End With
voila! avec ça j'obtiens ce que je veux comme résultat, si quelqu'un a une idée plus rassurante que celle là, ses remarque ou modifications sont les bienvenues.

merci à vous. je met résolu.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h51.


 
 
 
 
Partenaires

Hébergement Web