how to show pdf file in asp.net c# : Text select tool pdf software application dll winforms html wpf web forms vba-excel3-part1812

VBA-Programmer efficacement Excel
Maj 2008
3)).SpecialCells(xlCellTypeBlanks)
MsgBox NbVide - MaPlage.Cells.Count
End Sub
La boite de dialogue affiche "4". Cela vient du fait que l'ordre SpecialCells(xlCellTypeBlanks) cherche les
cellules effectivement vides (c'est à dire qui ne contiennent ni valeur ni formule) alors que la fonction
CountBlank compte les cellules dont la valeur est vide. On obtient donc deux informations différentes.
Supposons maintenant que je le but soit d'obtenir un objet Range avec toutes les cellules dont la valeur est vide.
Cette plage ne peut pas être trouvée directement, nous allons donc écrire la fonction qui le fait. J'utilise donc ma
fonction ChercheVide, qui appelle une fonction PlageCelluleVide qui renvoie l'objet Range désiré.
Public Sub ChercheVide()
Dim MaPlage As Range, NbVide As Integer, MaFeuille As Worksheet
NbVide = Application.WorksheetFunction.CountBlank(Range(Cells(1, 1),
Cells(16, 3)))
If NbVide>0 Then Set MaPlage = PlageCelluleVide(Range(Cells(1, 1),
Cells(16, 3)))
MsgBox NbVide - MaPlage.Cells.Count
End Sub
Public Function PlageCelluleVide(PlageSource As Range) As Range
Dim MaPlage As Range, PremAdresse As String
Set MaPlage = PlageSource.Cells.Find("", PlageSource.Cells(1, 1),
xlValue, xlWhole)
If Not MaPlage Is Nothing Then
PremAdresse = MaPlage.Address
Set PlageCelluleVide = MaPlage
Do
Set MaPlage = PlageSource.FindNext(After:=MaPlage)
If MaPlage Is Nothing Then Set PlageCelluleVide = MaPlage Else
Set PlageCelluleVide = Union(PlageCelluleVide, MaPlage)
Loop While Not MaPlage Is Nothing And MaPlage.Address <>
PremAdresse
End If
End Function
Bien sûr on peut aussi faire une énumération de toutes les cellules, mais c'est beaucoup plus long. Vous
noterez que quel que fut le cas, j'ai conditionné l'affectation de l'objet Range au fait qu'il y ait au moins une
cellule vide afin de ne pas déclencher une erreur d'exécution.
Recherche de valeur particulière
Ce genre de recherche suit le même principe que la recherche ci-dessus. La fonction de décompte s'appelle
"CountIf", et on utilise de préférence la méthode "Find" à une énumération.
Il y a néanmoins une astuce très efficace bien que méconnue et qui consiste à utiliser la méthode Autofilter.
Cette méthode ne fonctionne bien que sur une colonne mais rien n'empêche de faire une boucle. Je vais prendre
un exemple. Je cherche l'ensemble des cellules dont la valeur vaut 24 dans une plage. Je devrais normalement
utiliser Find avec le code suivant :
Public Sub Recherche1()
Dim MaPlage As Range, PlageCellule24 As Range, PremAdresse As String,
MaCell As Range
Set MaPlage = ActiveSheet.Cells(1, 15).CurrentRegion
Set MaCell = MaPlage.Cells.Find(24, MaPlage.Cells(1, 1), xlValue,
xlWhole)
If Not MaCell Is Nothing Then
PremAdresse = MaCell.Address
Set PlageCellule24 = MaCell
Do
Set MaCell = MaPlage.FindNext(After:=MaCell)
Set PlageCellule24 = Union(PlageCellule24, MaCell)
Page 31/44
Text select tool pdf - search text inside PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn how to search text in PDF document and obtain text content and location information
how to select text in pdf image; how to select text in pdf
Text select tool pdf - VB.NET PDF Text Search Library: search text inside PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Learn How to Search Text in PDF Document and Obtain Text Content and Location Information in VB.NET application
pdf text select tool; how to select text in a pdf
VBA-Programmer efficacement Excel
Maj 2008
Loop While Not MaCell Is Nothing And MaCell.Address <>
PremAdresse
End If
End Sub
Ce code fonctionne parfaitement bien, mais le code suivant fait la même chose cent cinquante fois plus
vite sur une plage de 4000 éléments.
Public Sub Recherche2()
Dim MaPlage As Range, PlageCellule24 As Range, compteur As Long
Set MaPlage = ActiveSheet.Cells(1, 15).CurrentRegion
For compteur = 1 To MaPlage.Columns.Count
MaPlage.Columns(compteur).AutoFilter field:=1, Criteria1:=24
If PlageCellule24 Is Nothing Then Set PlageCellule24 =
MaPlage.Columns(compteur).SpecialCells(xlCellTypeVisible) Else Set
PlageCellule24 =
Application.Union(MaPlage.Columns(compteur).SpecialCells(xlCellTypeVisible)
, PlageCellule24)
MaPlage.AutoFilter
Next compteur
PlageCellule24.Select
End Sub
Comme vous le voyez sur chaque colonne de la plage, j'applique l'AutoFilter sur la colonne. Celui ci
masque toutes les lignes qui ne correspondent pas au critère, et je récupère la plage des cellules non masquées
avec 
MaPlage.Columns(compteur).SpecialCells(xlCellTypeVisible)
Constantes et formules
L'autre utilisation fréquente de la méthode "SpecialCells" est pour la gestion des tableaux contenant des
formules. En effet dans le cas classique d'utilisation d'un tableur, il y a un certain nombre de données fixes
(nommées constantes) qui alimentent les formules de calcul. Si ces plages sont continues, il n'y a pas de
problèmes majeurs pour intervenir dessus, mais ce n'est pas toujours le cas. La ligne suivante supprime tous les
nombres constants présents sur une feuille, sans toucher aux formules:
ActiveSheet.UsedRange.CurrentRegion.SpecialCells(xlCellTypeConstants,
xlNumbers).ClearContents
L'exemple suivant verrouille toutes les cellules contenant une formule.
ActiveSheet.UsedRange.CurrentRegion.SpecialCells(xlCellTypeFormulas).Locked
=True
La ligne suivante renvoie une plage contenant toutes les cellules en erreur :
Set MaPlage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas,
xlErrors)
Format conditionnel
Je traite ce cas, car il concerne un sujet qui revient très souvent sur les forums Excel. Très souvent, on
trouve des questions du style, "comment trouver les cellules dont le fond est rouge?". Comme les cellules d'Excel
ne rougissent pas spontanément, c'est en général une recherche sur une cellule ayant un format conditionnel.
Comme les règles d'un format conditionnel découlent du contenu d'une cellule (valeur ou formule) il convient de
faire porter la recherche sur ce contenu, et non sur l'effet visuel qui n'est que le résultat d'un test de ce contenu.
Néanmoins certains cas peuvent être plus complexes, nous allons donc regarder cela dans l'exemple suivant.
Toutefois, ne perdons pas de vu que le but est toujours d'éviter une énumération des cellules. Envisageons le cas
de la recherche de doublons sur une colonne.
L'objet FormatCondition
Chaque cellule peut avoir une collection FormatConditions qui peut contenir jusqu'à trois objets
FormatCondition. Cet objet se décompose globalement en deux parties, les règles et le format. Pour simplifier,
on définit des règles qui, lorsqu'elles sont remplies, modifient le format de la cellule. Les propriétés de format
s'obtiennent en passant par les objets borders, font et interior. Les règles se définissent à l'aide de la méthode
Add de la façon suivante.
Page 32/44
C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
select text in pdf file; how to select all text in pdf file
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
Tools Tab. Item. Name. Description. 1. Select tool. Select text and image on PDF document. 2. Hand tool. Pan around the document. Go To Tab. Item. Name. Description
cannot select text in pdf file; converting pdf to searchable text format
VBA-Programmer efficacement Excel
Maj 2008
Add(Type, Operator, Formula1, Formula2)
Type est soit xlCellValue (valeur de la cellule) soit xlExpression (formule n'étant pas contenue dans la
cellule)
Operator peut être xlBetween, xlEqual, xlGreater, xlGreaterEqual, xlLess, xlLessEqual, xlNotBetween ou
xlNotEqual, il est ignoré si le type est xlExpression.
Formula1 est la valeur ou l'expression associée au format conditionnel. Il peut s'agir d'une valeur constante,
d'une chaîne, d'une référence de cellule ou d'une formule.
Formula2 est la valeur ou l'expression associée au second élément du format conditionnel lorsque Operator
vaut xlBetween ou xlNotBetween (sinon, l'argument est ignoré). Il peut s'agir d'une valeur constante, d'une
chaîne, d'une référence de cellule ou d'une formule.
N.B : il existe une méthode Modify qui permet de changer une règle existante.
Pour reprendre le cas qui nous intéresse, je veux que le fond des cellules doublonnées soit rouge. J'utilise
alors le code suivant :
With ActiveSheet.Columns(11).FormatConditions
.Add Type:=xlExpression, Formula1:="=NB.SI(C11;LC)>1"
.Item(.Count).Interior.ColorIndex = 3
End With
Dans ce cas, toutes les cellules doublonnées de la colonne 11 auront un fond rouge. C'est là que l'utilisateur
se demande comment récupérer les cellules ayant un fond rouge et qu'une énumération de la plage lui paraît
inévitable. Pourtant, il ne faut pas poser le problème ainsi. Le format conditionnel sert à donner une indication
"visuelle" à l'utilisateur. Notons d'ailleurs que le format conditionnel est volatile, il n'est donc pas détecter
comme un format différent lors d'une énumération de cellule. Lorsque l'on veut accéder à la plage des doublons
on doit passer par un tableau, et utiliser le tri. Je vous donne le code ci-dessous
Sub PlageDoublon()
Dim Depart As Long, maplage As Range, TabRes() As Long, MaChaine As
String
Dim montab As Variant, comptX As Long
Application.ScreenUpdating = False
Depart = GetTickCount
Application.Calculation = xlCalculationManual
Set maplage = ActiveSheet.Range(Cells(1, 11), Cells(1, 11).End(xlDown))
With maplage.Offset(, -1)
.FormulaLocal = "=ligne()"
.Value = .Value
End With
Set maplage = maplage.Offset(, -1).Resize(, 2)
maplage.Sort maplage.Cells(1, 2), xlAscending
montab = maplage.Value
ReDim TabRes(1 To 1)
For comptX = 2 To UBound(montab, 1) - 1
If montab(comptX, 2) = montab(comptX + 1, 2) Or montab(comptX, 2) =
montab(comptX - 1, 2) Then
TabRes(UBound(TabRes)) = montab(comptX, 1)
ReDim Preserve TabRes(1 To UBound(TabRes) + 1)
End If
Next comptX
Erase montab
maplage.Sort maplage.Cells(1, 1), xlAscending
maplage.Columns(1).ClearContents
Set maplage = maplage.Offset(, 1).Resize(, 1)
maplage.Cells.EntireRow.Hidden = True
If UBound(TabRes) > 1 Then
For comptX = 1 To UBound(TabRes) - 1
maplage.Cells(TabRes(comptX), 1).EntireRow.Hidden = False
Next comptX
Page 33/44
VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.
to install and use the PDF page(s) extraction tool. can use it to extract all images from PDF document. Dim page As PDFPage = doc.GetPage(3) ' Select image by
pdf searchable text; pdf find highlighted text
C# WPF PDF Viewer SDK to annotate PDF document in C#.NET
An advanced PDF annotating tool, which is compatible with all Windows systems and supports Click to select drawing annotation with default properties. Text box.
search text in multiple pdf; how to select all text in pdf
VBA-Programmer efficacement Excel
Maj 2008
End If
Set maplage = maplage.SpecialCells(xlCellTypeVisible)
maplage.Interior.ColorIndex = 3
maplage.Cells.EntireRow.Hidden = False
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox GetTickCount - Depart
End Sub
Cette fonction est extrêmement rapide sur une très grande plage contenant de nombreux doublons (pour
65000 éléments contenant 4700 doublons elle prend environ 9 secondes contre plus de dix minutes pour une
méthode "standard").
AdvancedFilter
Si le but est simplement de récupérer une plage sans doublon, ce qui est différent de ce qu'on a cherché à
faire au dessus on utilise alors un filtre particulier AdvancedFilter
Sa syntaxe est la suivante
expression.AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)
Action est soit xlFilterInPlace, soit xlFilterCopy. Dans le premier cas le filtre est dit "en place", il
fonctionne alors comme les filtres classiques par masquage des colonnes. Dans l'autre cas, le résultat apparaît sur
une plage différente et continue.
CriteriaRange est la plage contenant les critères du filtre, pour plus de renseignements sur son
fonctionnement consultez dans l'aide la rubrique " Exemples de critères pour le filtre élaboré".
CopyToRange est la plage de destination si le filtre n'est pas en place.
Unique permet justement d'enlever les doublons.
Le code suivant crée donc une plage sans doublon à droite de la plage source.
Sub PlageSansDoublons()
Dim maplage As Range, Depart As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set maplage = ActiveSheet.Range(Cells(1, 11), Cells(1, 11).End(xlDown))
maplage.AdvancedFilter xlFilterCopy, , maplage.Offset(, 1).Resize(1,
1), True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Notons que pour une plage de 65536 cellules contenant 4700 doublons le traitement prends tout de même
environ 7 minutes. Un filtre en place serait d'ailleurs plus long. Il peut être rentable dès lors de créer sa propre
fonction, dérivée de celle vu auparavant, afin d'accélérer notablement la vitesse de traitement.
Validation
Notons que nous pouvons, dans le cas d’un formulaire, limiter les saisies à l'aide de l'objet validation. Dans
notre cas le code suivant interdira la possibilité de saisir un doublon.
Public Sub SaisieDoublon()
Dim maplage As Range
Set maplage = ActiveSheet.Columns(11)
With maplage.Validation
.Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop,
Formula1:="=NB.SI(C11;LC)=1"
.ErrorTitle = "valeur déjà existante"
End With
End Sub
Graphique
La mise en forme des graphiques par programme n'est pas très compliquée. Nous verrons un exemple de
Page 34/44
VB.NET PDF - Annotate PDF with WPF PDF Viewer for VB.NET
An advanced PDF annotating tool, which is compatible with all Windows systems and supports Click to select drawing annotation with default properties. Text box.
search pdf documents for text; search text in pdf image
C# HTML5 Viewer: Load, View, Convert, Annotate and Edit OpenOffice
Office PowerPoint (.ppt, .pptx) on webpage, Convert CSV to PDF file online C#.NET RasterEdge HTML5 Viewer particular text tool can select text on all
pdf text search; search pdf for text in multiple files
VBA-Programmer efficacement Excel
Maj 2008
mise en forme un peu complexe à la fin de ce chapitre. Le problème majeur de la manipulation des graphiques
est la manipulation des séries.
Création / ajout de séries
Il y a plusieurs méthodes pour ajouter des séries. La plus simple, mais aussi la moins souple et l'ajout
implicite à la création. En effet si une plage de cellules est sélectionnée lors de la création du graphe, Excel trace
les séries automatiquement. Sauf dans certains cas triviaux, cette méthode est à éviter. Pour regarder l'ajout de
séries je vais prendre le cas du tracé nuage de points suivant :
Soit trois colonnes de températures qui seront mes ordonnées, et Pression qui sera ma colonne d'abscisses.
Si j'utilise le code suivant, je vais obtenir un tracé de quatre séries au lieu des trois séries que je désire.
Public Sub TestGraphe()
Page 35/44
VB.NET PowerPoint: VB Codes to Create Linear and 2D Barcodes on
supported by this VB.NET PPT barcode inserting tool? apply PPT slide getting method to select the target offers users the human readable text setting option
select text in pdf; how to select text on pdf
TIFF to PDF Converter | Convert TIFF to PDF, Convert PDF to TIFF
to PDF Converter is a windows tool that converts TIFF-PDF Conversion; Able to preserve text and PDF Select "Convert to PDF"; Select "Start" to start conversion
text select tool pdf; find and replace text in pdf
VBA-Programmer efficacement Excel
Maj 2008
Dim MonGraphe As Chart
Range(Cells(1, 1), Cells(99, 4)).Select
ThisWorkbook.Charts.Add
End Sub
Bien entendu, je pourrais récupérer les valeurs de la première série et les mettre comme abscisse de chaque
série, mais ce ne serait ni clair, ni efficace.
Attention, cela induit qu'Excel essaie toujours d'interpréter la sélection de la feuille active comme une
plage de données. Il faut donc, si on a utilisé des sélections dans le code antérieur à la création du graphe, veiller
à ramener la sélection à une seule cellule.
Création par la propriété DataSource
Lorsque la plage est bien positionnée, c'est à dire avec les abscisses en première ligne ou colonne, on peut
utiliser cette méthode. Elle présente l'avantage d'implémenter un grand nombre de séries simultanément.
Public Sub TestGraphe()
Dim MonGraphe As Chart, MaPlage As Range
Set MaPlage = Worksheets("donnees").Range(Cells(1, 1), Cells(99, 4))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
MonGraphe.SetSourceData MaPlage, xlColumns
End Sub
Création par ajout
Cette méthode est similaire à la précédente, seulement on ajoute les données à la collection des séries.
Public Sub TestGraphe()
Dim MonGraphe As Chart, MaPlage As Range
Set MaPlage = Worksheets("donnees").Range(Cells(1, 1), Cells(99, 4))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
MonGraphe.SeriesCollection.Add MaPlage, xlColumns, True, True
End Sub
Création par copier / coller
Cette méthode est particulière. Elle consiste à créer l'objet graphe au préalable puis de copier la plage de
données afin de réaliser un collage de séries.
Public Sub TestGraphe()
Dim MonGraphe As Chart, MaPlage As Range
Set MaPlage = Worksheets("donnees").Range(Cells(1, 1), Cells(99, 4))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
MaPlage.Copy
MonGraphe.SeriesCollection.Paste xlColumns, True, True, True, True
End Sub
Ces deux méthodes sont efficaces, mais utilisables uniquement dans certains cas. Nous allons voir
maintenant des méthodes standards beaucoup plus universelles. Ces méthodes reposent sur un principe différent.
On crée d'abord l'objet série, puis on lui affecte ses valeurs. Cela permet de travailler sur des plages discontinues,
et la position de la colonne contenant les abscisses n'a plus d'importance
Création par valeur
Public Sub TestGraphe()
Dim MonGraphe As Chart, MaPlage As Range, MaSerie As Series, compteur
As Long
Set MaPlage = Worksheets("donnees").Range(Cells(2, 1), Cells(99, 4))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
For compteur = 2 To MaPlage.Columns.Count
Set MaSerie = MonGraphe.SeriesCollection.NewSeries
Page 36/44
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
NET developers to search text-based documents, like PDF, Microsoft Office The well built-in text search tool is compatible with most Text Select, Copy & Paste.
pdf make text searchable; select text in pdf
VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
NET read PDF, VB.NET convert PDF to text, VB.NET An advanced PDF converter tool, which supports to be are allowed to set scaling value and select compress mode
search pdf documents for text; how to select text in pdf image
VBA-Programmer efficacement Excel
Maj 2008
MaSerie.Values = "=" & MaPlage.Columns(compteur).Address(True,
True, xlR1C1, True)
MaSerie.XValues = "=" & MaPlage.Columns(1).Address(True, True,
xlR1C1, True)
MaSerie.Name = "=" & MaPlage.Cells(1).Offset(-1, compteur -
1).Address(True, True, xlR1C1, True)
Next compteur
End Sub
Comme nous le voyons, dans ce cas je passe par une création série par série de mon graphe.
Création par formule
Similaire à la méthode précédente mais un peu moins lisible.
Public Sub TestGraphe()
Dim MonGraphe As Chart, MaPlage As Range, MaSerie As Series, compteur
As Long, toto
Set MaPlage = Worksheets("donnees").Range(Cells(2, 1), Cells(99, 4))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
For compteur = 2 To MaPlage.Columns.Count
Set MaSerie = MonGraphe.SeriesCollection.NewSeries
MaSerie.Formula = "=SERIES(" & MaPlage.Cells(1).Offset(-1, compteur
- 1).Address(True, True, xlR1C1, True) & "," &
MaPlage.Columns(1).Address(True, True, xlR1C1, True) & "," &
MaPlage.Columns(compteur).Address(True, True, xlR1C1, True) & "," &
compteur - 1 & ")"
Next compteur
End Sub
Pour mémoire une formule d’une série suit la syntaxe suivante :
SERIES(Nom,PlageX,PlageY,Ordre)
Modification de séries
La modification est en général de deux types : la modification d'une plage ou l'extension de la série. La
modification de la plage se fait en attaquant une des propriétés Values, Xvalues ou Formula. L'extension se fait
avec la méthode Extend. Je ne donnerai pas d'exemple dans ce cas puisque la méthode est rarement utilisée.
Série de plages discontinues
Nous allons voir un cas particulier, qui peut être utile. Tout d'abord, il faut savoir qu'il n'y a pas obligation à
utiliser des plages continues, ni même des plages de dimensions identiques pour les abscisses et les ordonnées.
Néanmoins, créer par le code une série de plages discontinues n'est pas évident. Pour étudier ce cas je reprends
mon exemple précédent, mais en cherchant à tracer un point sur 10. Le code suivant fait cela :
Public Sub TestGraphe1()
Dim MonGraphe As Chart, MaPlage As Range, compteur As Long, toto
Set MaPlage = Worksheets("Donnees").Cells(2, 1).Resize(, 4)
For compteur = 1 To Worksheets("Donnees").Cells(2,
1).Resize(Worksheets("Donnees").Cells(2, 1).End(xlDown).Row - 1).Rows.Count
\ 10
Set MaPlage = Application.Union(MaPlage, MaPlage.Offset(compteur *
10 + 1))
Next compteur
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlXYScatter
MonGraphe.SetSourceData MaPlage, xlColumns
End Sub
Pourtant ce code n'est pas utilisable à volonté, puisque passé un certain nombre de points, Excel ne peut
Page 37/44
VBA-Programmer efficacement Excel
Maj 2008
plus écrire la formule série à cause d'un trop grand nombre de caractères.
Exemple 1 : création d'un graphique personnalisé
Dans ce premier exemple nous allons créer un graphique composé à partir d'un tableau pour obtenir par le
code un graphe personnalisé (voir ci-dessous)
Dans ce cas, le tableau est correctement ordonné, nous pouvons donc procéder à une création groupée des
séries. Il s'agit d'un graphique superposé, c'est à dire possédant deux types de courbes, avec des histogrammes
cumulés et une série en nuage de points. Plusieurs méthodes de création seraient possibles, mais dans ce cas, la
plus simple consiste à créer un graphique "histogramme cumulé" avec toutes les séries, puis à agir sur la dernière
série pour la transformer en nuage de points.
Comme nous l'avons vu précédemment la fonction commencera ainsi :
Public Sub CreationGraphe1()
Dim MonGraphe As Chart, MaPlage As Range
Set MaPlage = Worksheets("donnees").Range(Cells(2, 7), Cells(14, 12))
Set MonGraphe = ThisWorkbook.Charts.Add
MonGraphe.ChartType = xlColumnStacked100
MonGraphe.SetSourceData MaPlage, xlColumns
A ce point j'ai crée un graphe de base contenant toutes les séries. Je vais maintenant modifier la série "total"
afin de pouvoir la mettre en nuage de points et l'affecter à l'axe secondaire des ordonnées.
With MonGraphe.SeriesCollection(5)
.ChartType = xlXYScatterSmoothNoMarkers
.AxisGroup = 2
With .Border
.Weight = xlMedium
.LineStyle = xlAutomatic
.ColorIndex = 4
End With
End With
Je vais maintenant mettre les libellés des axes et du titre
With MonGraphe
.HasTitle = True
With .ChartTitle
.Characters.Text = "ANNEE 2001"
.Shadow = True
.Border.Weight = xlHairline
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Characters.Text = "Proportion"
Page 38/44
VBA-Programmer efficacement Excel
Maj 2008
End With
With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Characters.Text = "Total (hrs)"
End With
End With
Et j'ai obtenu avec une fonction très courte le graphe désiré.
Exemple 2 : création d'un graphique complexe
Dans cet exemple nous allons très largement compliquer la tâche en créant un graphique à l'aide du tableau
ci-dessous.
Ce style de graphe est assez souvent utilisé pour des essais scientifiques. Dans le cas présent on trace des
résultats moyens pour une expérience avec leur écart type de reproductibilité. On trace ensuite, les résultats de la
nouvelle série d'expérience, (les ronds rouges) ce qui permet de visualiser rapidement une série de résultats
anormaux (ce qui est le cas dans cet exemple).
Dans ce cas je vais créer les séries les unes après les autres. En effet, pour faire ce graphique de type
StockHLC il faut que les trois premières séries soit dans l'ordre suivant (maximum, minimum, moyenne) ce qui
n'est pas le cas de mon tableau. Ma fonction commencera ainsi :
Public Sub CreationGraphe2()
Dim MonGraphe As Chart, maplage As Range, MaSerie As Series, compteur
As Long
Dim Mini As Single, Maxi As Single
Set maplage = Worksheets("donnees").Range(Cells(20, 7), Cells(25, 13))
Mini = Application.WorksheetFunction.Min(maplage.Columns(1),
maplage.Columns(2))
Mini = Int(Mini / (Int(Log(Mini) / Log(10)) * 10)) * Int(Log(Mini) /
Log(10)) * 10
Maxi = Application.WorksheetFunction.Max(maplage.Columns(1),
maplage.Columns(2))
Maxi = (Int(Maxi / (Int(Log(Maxi) / Log(10)) * 10)) + 1) *
Int(Log(Maxi) / Log(10)) * 10
Set MonGraphe = ThisWorkbook.Charts.Add
For compteur = 1 To 3
Set MaSerie = MonGraphe.SeriesCollection.NewSeries
MaSerie.Values = "=" & maplage.Columns(Choose(compteur, 5, 6,
3)).Address(True, True, xlR1C1, True)
MaSerie.XValues = "=" & maplage.Columns(1).Address(True, True,
xlR1C1, True)
MaSerie.Name = Choose(compteur, "max", "min", "moyenne")
Next compteur
MonGraphe.ChartType = xlStockHLC
Page 39/44
VBA-Programmer efficacement Excel
Maj 2008
For Each MaSerie In MonGraphe.SeriesCollection
With MaSerie.Border
.LineStyle = xlContinuous
.Weight = xlThin
If MaSerie.PlotOrder = 3 Then .ColorIndex = 1 Else .ColorIndex
= 5
End With
Next
J'ajoute ensuite la série de résultats, que je mets en forme :
Set MaSerie = MonGraphe.SeriesCollection.NewSeries
With MaSerie
.ChartType = xlXYScatter
.Values = "=" & maplage.Columns(2).Address(True, True, xlR1C1,
True)
.XValues = "=" & maplage.Columns(1).Address(True, True, xlR1C1,
True)
.Name = "resultat"
.MarkerStyle = xlMarkerStyleCircle
.MarkerForegroundColorIndex = 3
.MarkerSize = 10
.ApplyDataLabels xlDataLabelsShowValue, False, True
With .DataLabels
.Position = xlLabelPositionLeft
.Font.ColorIndex = 3
End With
End With
Ensuite je vais faire une opération particulière, qui consiste à afficher les labels de la série "max" puis à
modifier leur texte afin d'afficher une chaîne de la forme "Moyenne ± Ecart".
Set MaSerie = MonGraphe.SeriesCollection(1)
MaSerie.ApplyDataLabels xlDataLabelsShowLabel
For compteur = 1 To MaSerie.Points.Count
MaSerie.Points(compteur).DataLabel.Text = maplage(compteur,
7).Value
Next compteur
Enfin je supprime les deux entrées de la légende (min et max) et j'ajuste l'axe.
With ActiveChart.Axes(xlValue)
.MinimumScale = Mini
.MaximumScale = Maxi
End With
With MonGraphe.Legend
.LegendEntries(1).Delete
.LegendEntries(1).Delete
End With
End Sub
De voir apparaître deux fois LegendEntries(1).Delete peut sembler être une erreur, mais cela vient du fait
que la suppression de la première entrée donne le rang un à la deuxième. Ceci est une source d'erreur, il convient
donc de faire attention lors de l'utilisation de Delete sur les collections Excel.
Piloter Excel avec Visual Basic 6
Comme nous l'avons vu le pilotage est extrêmement simple puisque la programmation est la même. Il suffit
juste d'ajouter Excel lors du typage des variables, et de déclarer tous les objets Excel utilisés comme variable.
Notons toutefois que dans certains cas on peut s'affranchir de certains objets s'ils sont uniques ou inutiles dans la
procédure. Par exemple, si mon traitement porte sur une seule feuille de calcul je pourrais utiliser la fonction
suivante :
Page 40/44
Documents you may be interested
Documents you may be interested