Réaliser une matrice avec Excel [Résolu]

SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention - 18 févr. 2012 à 23:22 - Dernière réponse : SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention
- 26 févr. 2012 à 14:52
Bonsoir le Forum,

J'ai un petit problème de codage... Voici ce que je cherche à faire. Je dispose d'un axe X définit sur une plage [XD;XF]. Je parcours l'axe X en incrémentant d'un pas nommé PX.
J'ai la même chose avec un second axe, l'axe Y. Il est définit par une plage [YD;YF]. Et on parcours l'intégralité de cet axe avec un pas qui vaut PY.

XD,XF,PX, et YD,YF,PY sont des variables de types Double et sont à fixer par l'utilisateur. Elles sont donc connues et le système est donc paramétré.

Maintenant je cherche à remplir 2 colonnes dans une feuille Excel de la manière suivante :

Colonne A / Colonne B
XD / YD
XD / YD+PY
XD / YD+PY+PY
...
XD / YF
XD+PX / YD
XD+PX / YD+PY
XD+PX / YD+PX+PX
...
XD+PX / YF
XD+PX+PX / YD
ETC

Je ne parviens pas à réaliser cette matrice ! Un peu d'aide serait la bien venue si possible.

Au cas ou ma méthodologie ne soit pas la bonne, je donne quelques détails sur ce que je souhaite faire du code. En gros j'ai 2 axes X et Y qui représentent une largeur de photo en pixel et une hauteur de photo en pixel. Je désire placer un certains nombre de points sur cette photo avec la résolution que je veux. Mais je n'arrive pas à automatiser le placement des points car je ne sais pas créer la matrice.

Je reste disponible si vous avez besoin de plus d'infos.

André
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention - 26 févr. 2012 à 14:52
1
Merci
Bonjour le Forum,

Je viens pour poster le code que j'ai mis au point et qui me permet de réaliser un maillage circulaire sur une surface.

Je donne rapidement quelques explications pour pouvoir comprendre le code plus aisément. Tout d'abord je commence par définir une largeur et une hauteur de ma fenêtre. Cette fenêtre est celle qui contiendra un certain nombre de points par la suite. Cette fenêtre est définie de manière rectangulaire ou carrée.

Une fois les paramètres rentrés, il reste à définir le pas en largeur ainsi que le pas en hauteur pour placer le nombre de points voulu. Cela défini la résolution en quelque sorte.

Suite à ces opérations, nous obtenons donc une grille de points définis de manière rectangulaire. Pour avoir une maille circulaire, j'ai tout simplement décidé de supprimer tous les points qui se trouvent sur un rayon plus grand que le rayon désiré. Ainsi on ne garde que les points se trouvant à l'intérieur d'un cercle.

Je fais ensuite tracer sur un graphique tous ces points de manière à en avoir un aperçu visuel et mieux contrôler le résultat.

Et voilà, on obtient un maillage (X,Y) de cette façon. Idéal pour les graphiques 3D et mon application.

Note : Ce code est valable sous Excel 2007 et peux ne pas fonctionner sous une version inférieur (notamment le graphique qui emploie des mises en formes non reconnues). Pour les premiers test je ne vous conseil pas de mettre un pas trop fin sinon le pc risque de mettre 5 bonnes min à calculer tout ça (et oui je ne suis pas sur que mon code soit bien optimisé^^)


Voulou.

Cordialement,

André

Code à placer dans un module uniquement :


Option Explicit

Public Sub MAILLAGE_RECTANGULAIRE()

Dim XD As Long, XF As Long, PX As Double, NBX As Long

Dim YD As Long, YF As Long, PY As Double, NBY As Long

Dim CX As Double, CY As Double

Dim i As Long, j As Long, q As Double, n As Double


On Error GoTo 0 'Enlève le gestionnaire d'erreur s'il était mis en place
Application.ScreenUpdating = False 'Désactive l'affichage
Application.DisplayAlerts = False 'Désactive les alertes

For i = Sheets.Count To 1 Step -1 'On rend visible toutes les feuilles temporairement
    Sheets(i).Visible = 1
Next

On Error Resume Next
Sheets.Add.Name = "MAILLAGE" 'Créé toujours un onglet de départ
On Error GoTo 0

Sheets("MAILLAGE").Cells.Clear
Sheets("MAILLAGE").Tab.Color = RGB(0, 176, 240) 'Met l'onglet en Bleu

For i = Sheets.Count To 1 Step -1 'On supprime tous les onglets sauf un
    If Sheets(i).Name <> "MAILLAGE" And Sheets.Count <> 1 Then
        Sheets(i).Delete
    End If
Next

XD = 0
XF = 260
PX = 2
NBX = ((XF - XD) / PX) + 1

YD = 0
YF = 260
PY = 2
NBY = ((YF - YD) / PY) + 1

CX = (XF - XD) / 2
CY = (YF - YD) / 2

Range("B2") = "MAILLAGE DE LA SURFACE"
Range("B3") = "Paramètres"
Range("B4") = "Largeur initiale"
Range("B5") = "Largeur finale"
Range("B6") = "Pas en largeur"
Range("B7") = "Nombre de points par ligne"
Range("B8") = "Nombre de points maximal par fenêtre"
Range("B9") = "COORDONNÉES"
Range("B10") = "Coordonnées des points en X"
Range("C3") = "Unités"
Range("C4") = "Pixel"
Range("C5") = "Pixel"
Range("C6") = "Pixel"
Range("D3") = "Application"
Range("D4") = XD
Range("D5") = XF
Range("D6") = PX
Range("D7") = NBX
Range("D8") = 32000

Range("E3") = "Paramètres"
Range("E4") = "Hauteur initiale"
Range("E5") = "Hauteur finale"
Range("E6") = "Pas en hauteur"
Range("E7") = "Nombre de points en colonne"
Range("E8") = "Nombre de points dans cette fenêtre"
Range("E10") = "Coordonnées des points en Y"
Range("F3") = "Unités"
Range("F4") = "Pixel"
Range("F5") = "Pixel"
Range("F6") = "Pixel"
Range("G3") = "Application"
Range("G4") = YD
Range("G5") = YF
Range("G6") = PY
Range("G7") = NBY
Range("G8") = Range("D7") * Range("G7")


Range("B11") = XD 'Axe des X
For i = 11 To Range("G8") Step NBY
    For j = i To (i + NBY) + (NBY - 2)
    Range("B" & i + NBY) = Range("B" & i) + PX
    Range("B" & j + 1) = Range("B" & j)
    Next
Next


For i = 11 To Range("G8") + NBX Step NBY 'Axe des y
Range("E" & i) = YD
    For j = i To i + NBY - 2
    Range("E" & j + 1) = Range("E" & j) + PY
    Next
Next

q = Sheets("MAILLAGE").UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques

For i = q + 1 To 11 Step -1 'Suppression des rayons trop grands
If ((Range("B" & i) - CX) ^ 2 + (Range("E" & i) - CY) ^ 2) ^ (1 / 2) > CX Then
Cells(i, 1).EntireRow.Delete
End If
Next

n = Sheets("MAILLAGE").UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques

Call MISE_EN_FORME(Range("B2:G" & n + 1), Range("B2:G2,B9:G9,B10:D10,E10:G10"), Range("B2,B3,B9,B10,E10,C3,D3,E3,F3,G3"), Range("B2,B3,B9,B10,E10,C3,D3,E3,F3,G3"), Range("B2,B9"), Range("C7:C8,F7:F8"), Range("D4:D6,G4:G6"))

For i = 11 To n + 1
Range("B" & i & ":D" & i).MergeCells = True
Range("E" & i & ":G" & i).MergeCells = True
Next

    Range("A1:A1").Select 'GRAPHIQUE NUMERO 1
    ActiveSheet.Shapes.AddChart.Select 'Créer un graph batard pour le supprimer ensuite
    ActiveChart.SetSourceData Source:=Range("A1:B1") 'Ne rien changer
    ActiveSheet.ChartObjects(1).Left = Range("A1").Left 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Top = Range("A1").Top 'Positionnement de l'accroche
    ActiveSheet.ChartObjects(1).Width = Range("A1:B2").Width 'Dimensionnement de la largeur
    ActiveSheet.ChartObjects(1).Height = Range("A1:B2").Height 'Dimensionnement de la hauteur
    ActiveChart.ChartType = xlXYScatter 'Type de Graph
    ActiveChart.SeriesCollection(1).Delete 'Supprime la série inutile
    ActiveChart.ChartArea.Format.ThreeD.Visible = msoTrue 'Permet l'affichage du biseau
    ActiveChart.ChartArea.Format.ThreeD.BevelTopType = msoBevelCircle 'Sélectionne le type de biseau
    ActiveChart.ChartArea.Format.ThreeD.BevelTopDepth = 12 'Réglage du biseau
    ActiveChart.ChartArea.Format.ThreeD.BevelTopInset = 29 'Réglage du biseau
    ActiveChart.SeriesCollection.NewSeries 'Créer une nouvelle série correcte
    ActiveChart.SeriesCollection(1).Name = "=""Y VS X""" 'Nom de la série
    ActiveChart.SeriesCollection(1).XValues = Range("B11:B" & n) 'Valeurs en abscisse
    ActiveChart.SeriesCollection(1).Values = Range("E11:E" & n) 'Valeurs en ordonnée
    ActiveChart.SeriesCollection(1).MarkerStyle = -4168 'Permet de mettre le point de coordonnée en forme de croix
    ActiveChart.SeriesCollection(1).MarkerSize = 6 'Taille des points de coordonnées
    ActiveChart.ChartTitle.Text = "COORODONNÉES Y EN FONCTION DE X" 'Nom du Graphique
    ActiveChart.ApplyLayout (1) 'Créer la légende pour X, pour Y et un titre de graph
    ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = "X (Pixels)" 'Nom de l'axe X
    ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "Y (Pixels)" 'Nom de l'axe Y
    ActiveChart.SetElement (msoElementPrimaryValueGridLinesMinorMajor) 'Quadriallage horizontal primaire et secondaire
    ActiveChart.SetElement (msoElementPrimaryCategoryGridLinesMinorMajor) 'Quadriallage vertical primaire et secondaire
    ActiveChart.Axes(xlCategory).MaximumScaleIsAuto = True 'Abscisse Maximum
    ActiveChart.Axes(xlCategory).MajorUnitIsAuto = True 'Unité principale des abcsisses
    ActiveChart.Axes(xlCategory).MinorUnitIsAuto = True 'Unité secondaire des abscisses
    ActiveChart.Axes(xlValue).MaximumScaleIsAuto = True 'Ordonnée Maximum
    ActiveChart.Axes(xlValue).MajorUnitIsAuto = True 'Unité principale des ordonnées
    ActiveChart.Axes(xlValue).MinorUnitIsAuto = True 'Unité secondaire des ordonnées
    ActiveChart.Axes(xlCategory).ScaleType = xlLinear 'Mettre l'échelle des abcisses en Linéaire (Ou logarytmique)
    ActiveChart.Axes(xlValue).ScaleType = xlLinear 'Mettre l'échelle des ordonées en Linéaire
    ActiveChart.Axes(xlCategory).MajorTickMark = xlOutside 'Graduation principale à l'extérieur
    ActiveChart.Axes(xlCategory).MinorTickMark = xlCross 'Graduation secondaire sur l'axe
    ActiveChart.Axes(xlValue).MajorTickMark = xlOutside 'Graduation principale à l'extérieur
    ActiveChart.Axes(xlValue).MinorTickMark = xlCross 'Graduation secondaire sur l'axe
    ActiveChart.Axes(xlCategory).TickLabelPosition = xlLow 'Forcer l'axe X en bas
    ActiveChart.Axes(xlValue).TickLabelPosition = xlLow 'Forcer l'axe Y à gauche
    ActiveChart.ChartType = xlXYScatter 'Type de Graph
    ActiveChart.ChartArea.Font.Name = "Cambria" 'Mettre tout le graph en cambria
    ActiveChart.ChartArea.Font.Size = 12 'Mettre tout le graph en taille 12
    ActiveChart.ChartArea.Font.Bold = True 'Mettre tout le graph en gras
    ActiveChart.ChartTitle.Font.Size = 14.5 'Mettre le titre du graph en taille 14.5
    ActiveChart.Legend.Font.Size = 10 'Mettre la légende du graph en taille 10
    ActiveChart.Legend.Position = xlRight 'Réglage de la légende
    ActiveChart.Axes(xlCategory).TickLabels.NumberFormat = "0" 'Détermine le nombre de décimales de l'axe X
    ActiveChart.Axes(xlValue).TickLabels.NumberFormat = "0" 'Détermine le nombre de décimales de l'axe Y

    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="GRAPH (1)" 'Permet de déplacer le Graph dans une nouvelle feuille

    Sheets("GRAPH (1)").Tab.Color = RGB(0, 176, 80) 'Met l'onglet en vert

    Sheets("GRAPH (1)").Move After:=Sheets("MAILLAGE") 'Permet de déplacer de manière relative des onglets (After/Before)


Application.ScreenUpdating = True 'Rétablit l'affichage
Application.DisplayAlerts = True 'Rétablit les alertes
On Error GoTo 0 'Enlève le gestionnaire d'erreur s'il était mis en place

End Sub

Private Sub MISE_EN_FORME(Optional Tableau As Variant, Optional Fusion As Variant, Optional Bordure As Variant, Optional Gras As Variant, Optional Violet As Variant, Optional Gris As Variant, Optional Vert As Variant, Optional Orange As Variant)

Dim colonne As Long

'----------------
    Cells.Select
    With Selection.Font
        .Name = "Cambria"
        .Size = 12
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontMajor
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
    End With
'-----------------

'-----------------
    If IsMissing(Tableau) Then
    GoTo Tableau
    End If
    Tableau.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
Tableau:
'-------------

'-------------
    If IsMissing(Fusion) Then
    GoTo Fusion
    End If
    Fusion.Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = True
    End With
Fusion:
'------------

'------------
    If IsMissing(Bordure) Then
    GoTo Bordure
    End If
    Bordure.Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Bordure:
'------------

'-----------
    If IsMissing(Gras) Then
    GoTo Gras
    End If
    Gras.Font.Bold = True
Gras:
'----------

'----------
    If IsMissing(Violet) Then
    GoTo Violet
    End If
    Violet.Select
    With Selection.Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With Selection.Interior.Gradient.ColorStops.Add(0)
        .Color = RGB(204, 0, 255)
    End With
    With Selection.Interior.Gradient.ColorStops.Add(1)
        .Color = RGB(204, 192, 218)
    End With
Violet:
'---------

'----------
    If IsMissing(Gris) Then
    GoTo Gris
    End If
    Gris.Select
    With Selection.Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With Selection.Interior.Gradient.ColorStops.Add(0)
        .Color = RGB(165, 165, 165)
    End With
    With Selection.Interior.Gradient.ColorStops.Add(1)
        .Color = RGB(216, 216, 216)
    End With
Gris:
'---------

'----------
    If IsMissing(Vert) Then
    GoTo Vert
    End If
    Vert.Select
    With Selection.Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With Selection.Interior.Gradient.ColorStops.Add(0)
        .Color = RGB(0, 176, 80)
    End With
    With Selection.Interior.Gradient.ColorStops.Add(1)
        .Color = RGB(146, 208, 80)
    End With
Vert:
'---------

'----------
    If IsMissing(Orange) Then
    GoTo Orange
    End If
    Orange.Select
    With Selection.Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With Selection.Interior.Gradient.ColorStops.Add(0)
        .Color = RGB(255, 192, 0)
    End With
    With Selection.Interior.Gradient.ColorStops.Add(1)
        .Color = RGB(252, 213, 180)
    End With
Orange:
'---------

'---------
Rows("1:1").Select 'Réglage de la hauteur
Range(Selection, Selection.End(xlDown)).RowHeight = 16

colonne = Cells.Find("*", , , , xlByColumns, xlPrevious).Column 'Compte le nombre de colonnes dynamiques

Range("A:A," & Nombre_en_Lettre(colonne + 1) & ":" & Nombre_en_Lettre(colonne + 1)).ColumnWidth = 2 'Réglage de la largeur

Columns("A:" & Nombre_en_Lettre(colonne)).EntireColumn.AutoFit 'Ajuste la largeur au contenu

Range("A1:" & Nombre_en_Lettre(colonne + 1) & "1").Select 'Pour régler le zoom de la page pour que sa rentre complètement
ActiveWindow.Zoom = True

Range("A1:A1").Select 'Pour se replacer de manière propre sur la feuille
'-------------

End Sub

Function Nombre_en_Lettre(Nombre As Long) As String

If Nombre > 0 And Nombre < 257 Then
    Nombre_en_Lettre = Split(Cells(Nombre).Address, "$")(1)
Else
    Nombre_en_Lettre = Error(9)
End If

End Function

Merci SERIEUXETCOOL 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 123 internautes ce mois-ci

Commenter la réponse de SERIEUXETCOOL
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 févr. 2012 à 21:49
0
Merci
Bonjour,
je ne vois pas trop ce que pourrait être la matrice, sur deux colonnes, des coordonnées de points qui correspondraient à un plan composé de x pixels par y pixels.
Je ne vois non plus pas trop ce que tu cherches à faire.
Dans quoi (quel contrôle) se trouve cette "photo" ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention - 20 févr. 2012 à 13:52
0
Merci
Bonjour Ucfoutu,

J'ai finalement réussi à créer la matrice dont j'avais besoin. Grâce à quelques lignes VBA j'y suis parvenu. C'était un problème de logique principalement. Je placerais le code ce soir car je ne l'ai pas sous la main actuellement.

Ceci étant dit, je vais t'en dire d'avantage sur ce que je cherche à faire. Je sais maintenant charger une image sous Excel. En gros je choisis le chemin du fichier à ouvrir, et je le charge dans contrôle image. Mon image apparait donc à l'écran.

Maintenant j'aimerais placer des points sur cette image, et en récupérer les composantes R, G, B. Une fois ces coordonnées trouvées il faut les convertir en HSI pour en récupérer la valeur HUE (You, teinte).

Donc pour résumer je place dans une colonne les coordonnées X de mes pixels, dans la colonne B les coordonnées Y de mes pixels et enfin je remplis automatiquement les colonnes avec R,G,B,H,S,I,HUE.


Les fonctions de conversions existent mais je ne les connais pas. Et pour commencer je ne sais ni placer un point sur une image ni en récupérer ses composantes.


La finalité de la chose peut être décrite comme ci après :

Mes images représentent TOUTES la même forme circulaire d'un objet. Les seules choses qui varient sur les images sont : La position centrale du cercle (le cercle se décale d'une photo à une autre de manière aléatoire), le diamètre du cercle, et les couleurs qui composent l'image.
En gros mon image est colorée avec diverses teintes. Du rouge, du vert, du jaune, tu bleu, etc. Chaque couleur représente une épaisseur de film d'huile. On parle la d'interférométrie optique. Du coup je veux pouvoir ouvrir une photo, placer des points suivant les coordonnées que j'ai décidé et en extraire les composantes R,G,B du pixel. Ensuite je veux convertir les pixels R,G,B en HSI pour obtenir des HUE (You, teinte).
C'est à partir de la que je peux convertir mes HUE en épaisseur de film d'huile.


Des questions, des remarques n'hésites surtout pas Ucfoutu. Probablement que ma méthode d'approche n'est pas la bonne ?

Cordialement,

André
Commenter la réponse de SERIEUXETCOOL
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 févr. 2012 à 14:19
0
Merci
Avant d'aller où que ce soit :
Ta photo est donc dans un contrôle image (sans hdc, donc).
Par quelle méthode envisages-tu, sur un contrôle image, de relever la couleur de l'une quelconque de ses coordonnées ?
J'ai personnellement des difficultés à "voir" un tel mécanisme, sur un contrôle image, en VBA, sans passer par l'utilisation complexe de fonctions de l'Api de Windows, en prenant en considération :
- les position/dimensions du container de ce contrôle, par rapport à l'écran
- les position/dimension de ce contrôle par rapport à son container

J'ai encore plus de difficultés à voir comment, depuis VBA et dans un contrôle sans hdc, tu pourrais y dessiner quoi que ce fût (tes points..)

Et (mais très accessoire car laisserait entendre que les deux premières difficultés ne sont plus là) : encore de plus grandes difficultés à comprendre, si tu parvenais à y dessiner des points, quelle couleur, autre que celle de ce point ainsi dessiné, tu pourrais y relever.

Excel est un tableur, André. Et ce que tu cherches à faire là est
- un joli détournement de sa vocation.
- impossible, sans appel à des fonctions de l'Api de Windows que tu auras les plus grandes difficultés à maîtriser à ton niveau.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention - 20 févr. 2012 à 16:59
0
Merci
aie aie aie, si Ucfoutu est pessimiste sur l'étude de faisabilité de ma demande....c'est qu'il à sans doute raison !

Ce qui veut donc dire que c'est mal engagé pour la suite. Mais j'aimerais bien comprendre tout de même réellement ou est la limitation. Pour ce faire quelques questions suffiront à m'éclairer Ucfoutu.

- Est il possible de charger une image sur Excel ?
- Une fois l'image chargée et affichée, est il possible de placer des points sur l'image en fonction des coordonnées de pixels ?
- Une fois les points placés, est il possible de récupérer les coordonnée R,G,B de certains pixels ?
- Est il possible de remplir une feuille Excel avec les coordonnées des pixels, les composantes R,G,B ?
-Est il possible de convertir une image (ou un pixel) R,G,B en HSI ???

Je pense que si l'on peut répondre par oui à chaque question c'est déjà une bonne chose. Maintenant si l'on peut lier les questions les unes aux autres c'est encore autre chose.

Sinon quelle est la question qui n'est pas réalisable par Excel ?

Ceci étant dit, il est vrai que je débute réellement avec les images sous VBA et Excel. Je n'ai absolument aucune visibilité sur la difficulté que cela représente. Je veux bien admettre que ce n'est pas simple.
Comme je l'ai dit Ucfoutu, la méthode que j'envisage n'est probablement pas la meilleure. Mais je te demande quand même une chose : Pense tu qu'il soit possible de manipuler des images de façon très basique tout de même ? Après tout ma demande est "simple" (charger une image et récupérer les coordonnées de quelques pixels).

Car quand je me balade sur le net, il me suffit de taper sur google "récupérer la couleur d'un pixel à l'écran" pour obtenir tout plein de choses très intéressantes. Je me dis alors que c'est envisageable probablement.

Merci en tout cas d'avoir été franc Ucfoutu. Je vais continuer de m’interroger sur la suite.

Fonctions API de Windows dis tu...

A plus André
Commenter la réponse de SERIEUXETCOOL
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 févr. 2012 à 17:06
0
Merci
1)
Est il possible de charger une image sur Excel ?

oui, mais dans un contrôle image (sans hdc et donc non traitable lui-même, tant en lecture qu'en dessin)
2)
Une fois l'image chargée et affichée, est il possible de placer des points sur l'image en fonction des coordonnées de pixels

non : pour la raison indiquée en 1)
Les autres question n'ont alors plus lieu d'être !

Et si tu te lances (cela va être dur à ton niveau) dans l'étude de faisabilité à l'aide des fonctions de l'API de Windows, tu vas te heurter de toutes manières à un obstacle quasi incontournable : celui, une fois le dessin modifié, d'en assurer la persistance !

Excel n'est pas fait pour ce genre de traitement, loin de là
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 févr. 2012 à 17:11
0
Merci
Ah oui ...
Il serait par contre beaucoup moins compliqué de dessiner sur un userform lui-même (on sait en récupérer le handle et le hdc relativement facilement). Et à partir de là : y dessiner.
Mais là encore : problème majeur : celui de la persistance (et également de la conservation de l'image transformée).
Abandonne ton idée.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 févr. 2012 à 17:15
0
Merci
Maintenant : si tu possèdes VB6, on peut voir comment, depuis VB6, piloter EXCEL. On utiliserait alors une picturebox de VB6 comme surface de traitement du dessin.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
SERIEUXETCOOL 336 Messages postés dimanche 3 avril 2011Date d'inscription 12 juin 2012 Dernière intervention - 21 févr. 2012 à 23:59
0
Merci
Bonsoir Ucfoutu, le forum

Dsl de répondre tardivement, je n'ai pas eu accès à une machine today. Et manque de peau je n'ai pas internet chez moi en ce momment. J'utilise mon smartphone...

Bref, je ne dispose pas de vb6 mais de "Microsoft Visual basique 6.3". Ça doit être différent je pense.

Bon je pense que je vais suivre tes conseils Ucfoutu et mettre de côté mes ambitions pour le moment.
De toute façon c'était par pur curiosité et j'étais intrigué de pousser un peu plus loin les capacités d'Excel.
Limites ateintes on dirait.

De toute façon je dispose actuellement d'un logiciel qui traite des images. Avec le logiciel, j'ouvre mon image, je la convertit directement en Hsi, je place mes points sur l'image, je extrait dans un fichier texte les coordonnées des points avec le Hue correspondant. Et ensuite seulement je réinjecte ces points sur Excel pour en tracer une représentation 3D.
Du coup avec mon logiciel je peux déjà faire pas mal de choses j'avoue.
La seule limitation du logiciel est que je ne peux placer sur mon image qu'un certain nombre de points. La limite est faible (environ 23 000 points). Ce qui me donne une résolution faible pour mon application.
Voilà pourquoi je pensais utiliser les capacités de stockage d'Excel 2007 et ses quelques 1 000 000 de lignes. Soit une résolution quasi illimité moyennant un tps de caclul plus ou moins long.

Bon ben je vais sans doute utiliser mon logiciel de traitement d'image avec Excel.

Dommage^^

Je vais continuer de chercher encore un peu par curiosité. J'ai encore des pistes a explorer...

André

ps : dans le cas ou j'abandonne l'idée d'utiliser Excel pour traiter les images ce post n'est alors plus résolu. Je m'explique je cherche à créer une maille de points. En gros je défini une largeur et une hauteur, ainsi que le nombre de points à placer dans cette fenêtre. J'ai réussi à créer un maillage sous vba. (je place le code dès que je retrouve internet).
Le problème c'est que la grille est carrée, ou rectangulaire. Sur mes photos je veux mailler des cercles. Or mon maillage carré n'est pas adapté pour mes cercles.
Du coup je cherche à réaliser un autre maillage pour des cercles. On pourrait par exemple définir les.coordonnées X et Y du centre du cercle, un rayon maximal du cercle, et le pas de résolution. Je ne sais pas si je m'exprime bien ?
Je placerais un photo avec mon maillage. Ce sera plus clair.
En gros j'aimerais définir le centre du cercle, tracer un premier cercle de rayon définit par l'utilisateur, puis on réduit le rayon d'un pas et on trace un autre cercle plus petit. Ensuit on se devais d'un pas.et on trace de nouveau un cercle plus petit. On aurait ainsi un certain nombre de.cercles tous concentriques qui définissent mon maillage.

Voilà^^. Plouf j'ai l'impression de mal m'exprimer. Et avec le smartphone difficile de.rédiger proprement.
Mes excuses.
Commenter la réponse de SERIEUXETCOOL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.