IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

segmenter un cercle en VBA [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut segmenter un cercle en VBA
    bonjour,

    je voudrai savoir si le projet suivant peut-être réalisé complétement en VBA et quelles peuvent être les pistes...

    un cercle doit être tracé puis segmenté en n parties repérées de 0 à n-1

    n éléments de valeur 0 à n-1 , rangés de façon aléatoire sont stockés dans un tableau

    le 1er élément de ce tableau doit correspondre à la position horaire 3 du cercle

    des segments de droite relient les 'points' du cercle selon l'ordre rangé dans le tableau

    ainsi le dernier segment est relié au 1er segment du cercle

    si une couleur peut etre affecté a chaque segment de droite c est nickel

    si une flèche peut être adjointe à la première et à la dernière demi-droite pour connaitre le sens de lecture ce serait parfait...

    est_ce que tout cela est possible en VBA ? Pouvez vous m'aiguiller vers les appli, fonctions, macros

    merci pour vos conseils

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 355
    Points
    34 355
    Par défaut
    Hello,

    tout cela semble possible, mais pourrais-tu nous faire un "dessin" de ce qui doit être fait stp ?

    Dans l'idée, on serait sur la gestion :
    - soit d'un graphique avec des données
    - soit d'un dessin

    Par contre une question, dans quel optique as-tu besoin d'une telle réalisation ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    merci pour ta réponse jpcheck

    je n'ai pas de scan mais je vais me débrouiller

    je trouverai le moyen d'envoyer un croquis pour la semaine prochaine

    l'idée est de pouvoir automatiser le traçage de cercles pour n segments avec n! ( ? ) séquences possibles, en tout cas pas mal

    il faudra alors gérer les possibles et savoir archiver d'une manière claire et utile

    a bientot

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 355
    Points
    34 355
    Par défaut
    Pas besoin de scan, une simple image paint devrait faire l'affaire, non ?

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    hello jpcheck

    bon je ne maitrise guère PowerPoint. Les segments ne se conservent pas malgré l'enregistrement du fichier. la copie sur un document doc est aléatoire. j ai finalement réussi à en mettre une. j'espère que le document sera lisible. Sinon, je retente une autre fois.

    cordialement cercle 11.docx

    j ai fait une prévisualisation, ça devrait être exploitable...

  6. #6
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ouaou !

    Ca va être balaise à faire ça
    Je suis curieux de voir ce que ça va donner !

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Un début de piste qu'il va te falloir adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    Sub Test()
     
        Dim Fe As Worksheet
        Dim Max As Integer
        Dim Cercle As Shape
        Dim Trait As Shape
        Dim Arc As Single
        Dim Angle As Single
        Dim R_Cercle As Single
        Dim D_Cercle As Single
        Dim G_Cercle As Single
        Dim H_Cercle As Single
        Dim I As Integer
        Dim PosX As Single
        Dim PosY As Single
     
        Const Pi As Single = 3.14159265358979
     
        Set Fe = ActiveSheet
     
        'supprime les shapes existants
        For Each Cercle In Fe.Shapes: Cercle.Delete: Next Cercle
     
        'nombre de segments
        Max = 11
     
        G_Cercle = 100 'position du bord du cercle par rapport au coté gauche de la feuille
        H_Cercle = 100 'position du bord du cercle par rapport au coté haut de la feuille
        D_Cercle = 200 'diamètre
        R_Cercle = D_Cercle / 2 'rayon
     
        'longueur de l'arc
        Arc = D_Cercle * Pi / Max
     
        'angle découlant de la longueur de l'arc
        Angle = Arc / R_Cercle
     
        'cercle principal
        Set Cercle = Fe.Shapes.AddShape(msoShapeOval, G_Cercle, H_Cercle, D_Cercle, D_Cercle)
     
        'points sur le cercle principal
        For I = 1 To Max
     
            Set Trait = Fe.Shapes.AddLine(G_Cercle + R_Cercle, _
                                          H_Cercle + R_Cercle, _
                                          G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I), _
                                          H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I)))
     
            'formatage des traits
            With Trait.Line
     
                .Weight = 0.75
                .DashStyle = msoLineSquareDot
                .ForeColor.SchemeColor = 23
     
            End With
     
        Next I
     
        'mémorisation du point de départ
        PosX = G_Cercle + R_Cercle
        PosY = H_Cercle
     
        'traçage des droites
        For I = 1 To Max * 3
     
            If I Mod 3 = 0 Then
     
                Set Trait = Fe.Shapes.AddLine(PosX, _
                                              PosY, _
                                              G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I), _
                                              H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I)))
     
                PosX = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
                PosY = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
     
            End If
     
        Next I
     
    End Sub
    Avec couleurs et flèches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
     
    Sub Test()
     
        Dim Fe As Worksheet
        Dim Max As Integer
        Dim Cercle As Shape
        Dim Pointe As Integer
        Dim Trait As Shape
        Dim Texte As Shape
        Dim Arc As Single
        Dim Angle As Single
        Dim I As Integer
        Dim LTexte As Single
        Dim R_Cercle As Single, D_Cercle As Single, G_Cercle As Single, H_Cercle As Single
        Dim X1 As Single, X2 As Single, Y1 As Single, Y2 As Single
        Dim F_X1 As Single, F_X2 As Single, F_Y1 As Single, F_Y2 As Single
     
        LTexte = 15
     
        Const Pi As Single = 3.14159265358979
     
        Set Fe = ActiveSheet
     
        'supprime les shapes existants
        For Each Cercle In Fe.Shapes: Cercle.Delete: Next Cercle
     
        'nombre de segments
        Max = 11
        Pointe = 3
     
        G_Cercle = 100 'position du bord du cercle par rapport au coté gauche de la feuille
        H_Cercle = 100 'position du bord du cercle par rapport au coté haut de la feuille
        D_Cercle = 500 'diamètre
        R_Cercle = D_Cercle / 2 'rayon
     
        'longueur de l'arc
        Arc = D_Cercle * Pi / Max
     
        'angle découlant de la longueur de l'arc
        Angle = Arc / R_Cercle
     
        'cercle principal
        Set Cercle = Fe.Shapes.AddShape(msoShapeOval, G_Cercle, H_Cercle, D_Cercle, D_Cercle)
        Cercle.Fill.Transparency = 1
     
        For I = 1 To Max
     
            'traits en pointillés depuis le centre
            Set Trait = Fe.Shapes.AddLine(G_Cercle + R_Cercle, _
                                          H_Cercle + R_Cercle, _
                                          G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I), _
                                          H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I)))
     
     
            'formatage des traits
            With Trait.Line
     
                .Weight = 0.75
                .DashStyle = msoLineSquareDot
                .ForeColor.SchemeColor = 23 'couleur max 80
     
            End With
     
            'les zones de texte
            Set Texte = Fe.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                                             G_Cercle + R_Cercle + (R_Cercle + 20) * Sin(Angle * I + (Angle / 2)) - LTexte / 2, _
                                             H_Cercle + (R_Cercle - (R_Cercle + 20) * Cos(Angle * I + (Angle / 2))) - LTexte / 2, _
                                             LTexte, _
                                             LTexte)
     
            With Texte
     
                .TextFrame.Characters.Text = IIf(I < 11, I, 0)
                .TextFrame.HorizontalAlignment = xlCenter
                .TextFrame.VerticalAlignment = xlCenter
                .Line.Visible = msoFalse
     
            End With
     
        Next I
     
        'mémorisation du point de départ
        X1 = G_Cercle + R_Cercle
        Y1 = H_Cercle
     
        'traçage des droites
        For I = 1 To Max * Pointe
     
            If I Mod Pointe = 0 Then
     
                X2 = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
                Y2 = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
     
                Set Trait = Fe.Shapes.AddLine(X1, _
                                              Y1, _
                                              X2, _
                                              Y2)
     
                'couleurs des traits
                Trait.Line.ForeColor.SchemeColor = I
                'épaisseur des traits
                Trait.Line.Weight = 1.5
     
                F_X1 = X1 + (X2 - X1) / 2
                F_Y1 = Y1 - (Y1 - Y2) / 2
     
                F_X1 = X1 + (X2 - X1) / 2
                F_Y1 = Y1 - (Y1 - Y2) / 2
     
                'sens des flèches
                If X1 < X2 Then
     
                    F_X2 = F_X1 + 10 * Cos(Atn((Y1 - Y2) / (X2 - X1)))
                    F_Y2 = F_Y1 - 10 * Sin(Atn((Y1 - Y2) / (X2 - X1)))
     
                Else
     
                    F_X2 = F_X1 - 10 * Cos(Atn((Y1 - Y2) / (X2 - X1)))
                    F_Y2 = F_Y1 + 10 * Sin(Atn((Y1 - Y2) / (X2 - X1)))
     
                End If
     
                'trait des flèches
                Set Trait = Fe.Shapes.AddLine(F_X1, _
                                              F_Y1, _
                                              F_X2, _
                                              F_Y2)
     
                'ajout des flèches
                Trait.Line.EndArrowheadStyle = msoArrowheadTriangle
                Trait.Line.Weight = 1.5
                Trait.Line.ForeColor.SchemeColor = 2 'couleur rouge
     
                'mémorise la position
                X1 = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
                Y1 = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
     
            End If
     
        Next I
     
    End Sub

  8. #8
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oua Theze super taf !!!!!!!

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Oua Theze super taf !!!!!!!
    Merci ;-) !

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour à toutes et tous,

    Un grand merci à osiri, ça fait plaisir d'avoir des retours sur le travail effectué !

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    hello Theze ,

    désolé de ne répondre que maintenant mais je ne suis pas toujours connecté mais t inquiète je ne suis pas un ingrat

    j ai testé ton premier programme j en ai été suffoqué car tu m as permis de découvrir que le séquençage était modulo, il n était pas si aléatoire que ça; en réalité j obtenais les valeurs de chacun des n éléments par une fonction propre à chaque élement , je n avais pas remarqué qu'ils étaient aussi simplement liés entre eux, fi des n fonctions indépendantes que je me farcissai...

    finalement les combinaisons possibles sont plus réduites. J ai tardé pour te remercier car en réalité j ai testé ton programme et adapté à certains besoins. Finalement comme on obtient des figures géométriques, le point de départ devient secondaire d autan plus que lorsque Max sera grand, l'image de ses pointes vont être estomper à moins d augmenter la résolution . Pour Max=19 par exemple, ajouté +1 ou -18, retiré -1 ou + 18 donnera la meme figure. c'est prodigieux.

    je te passe une vue de ce que je voulais. Avec la figure je voulais y mettre une légende et ensuite le tableau de la séquence propre à chaque module. mais il apparait un décalage car le rayon du cercle ne coïncide pas avec la longueur d un nombre entier de cellules. faut que je cogite sur ça.

    c est une drôle de coïncidence que tu ai trouvé la fonction génératrice des séquences. Je pensai que les segments auraient été tracé à partir d un tableau et non d'une fonction "découverte". Pour d'autres cas, j ai certaines séquences qui ne sont pas modulo

    ex1 : nb de segments 2467 ; séquence de 11 élts : 34 258 483 707 931 1156 1380 1604 1828 2053 2277
    ex2 : nb de segments 59 ; séquence de 11 élts : 2 7 13 18 23 29 34 40 45 50 56
    ex3 : nb de segments 13305 ; séquence de 13 élts : 267 1291 2314 3338 4361 5385 6408 7432 8455 9478 10502 11525 12549

    j ai tardé aussi à te répondre car j ai testé ton programme et j ai essayé d'automatiser la construction des figures ; tracé des traits est tres énergivore ( pour le micropross ) , j ai voulu avoir 500 figures pour Max=1003. j en ai eu qu'environ 300 et un fichier de 20MO. je voulais te présenter mon travail meme non abouti mais bien avancé grâce à toi.

    j ai souvent lu ici ou ailleurs des réponses des interventions à des problèmes... en plus de conseils avisés et éclairés, d'un certain niveau, d'une disponibilité, y a en plus plein de la générosité et ça je peux vous dire que ... ça vous marque

    voici le code de la macro, jsp qu'elle passera sinon je me débrouillerai autrement, a plus sacré pro ! Théze et encore merci. Bien à toi

    je vais regarder ta deuxieme proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
     Sub segmentation_cercle()
    '
    ' segmentation_cercle Macro
    '
     
    Dim Fe As Worksheet
        Dim Max As Long
        Dim Modulateur As Long, ModulateurMax As Long
        Dim Cercle As Shape
        Dim Trait As Shape
        Dim Arc As Single
        Dim Angle As Single
        Dim R_Cercle As Single
        Dim D_Cercle As Single
        Dim G_Cercle As Single
        Dim H_Cercle As Single
        Dim I As Long
     
        Dim Offset_X As Integer, Offset_Y As Integer
        Dim PosX As Single
        Dim PosY As Single
     
        Const Pi As Single = 3.14159265358979
     
        Set Fe = ActiveSheet
     
        ' efface le format et le contenu de toutes les cellules , sinon si slt le contenu : cells.clear.contents
        Cells.Clear
     
        'supprime les shapes existants
        For Each Cercle In Fe.Shapes: Cercle.Delete: Next Cercle
     
        'nombre de segments
        Max = 1003
        ModulateurMax = (Max - 1) * 0.5
     
        G_Cercle = 100 'position du bord du cercle par rapport au coté gauche de la feuille
        H_Cercle = 100 'position du bord du cercle par rapport au coté haut de la feuille
        D_Cercle = 200 'diamètre
        R_Cercle = D_Cercle / 2 'rayon
     
        'longueur de l'arc
        Arc = D_Cercle * Pi / Max
     
        'angle découlant de la longueur de l'arc
        Angle = Arc / R_Cercle
     
        'cercle principal
        'Set Cercle = Fe.Shapes.AddShape(msoShapeOval, G_Cercle, H_Cercle, D_Cercle, D_Cercle)
     
        'points sur le cercle principal, ce sont les n rayons
       ' For I = 1 To Max
     
        '    Set Trait = Fe.Shapes.AddLine(G_Cercle + R_Cercle, _
                                          H_Cercle + R_Cercle, _
                                          G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I), _
                                          H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I)))
     
            'formatage des traits
        '    With Trait.Line
     
         '       .Weight = 0.75
        '        .DashStyle = msoLineSquareDot
        '        .ForeColor.SchemeColor = 32   ' 23 : bleu
     
        '    End With
     
       ' Next I
     
        'mémorisation du point de départ
        PosX = G_Cercle + R_Cercle
        PosY = H_Cercle
        Offset_X = 0
        Offset_Y = 0
     
        'traçage des cercles par ligne de 4
     
        For Modulateur = 1 To ModulateurMax
     
        'traçage des droites pour un cercle
        For I = 1 To Max * Modulateur
     
            If I Mod Modulateur = 0 Then
     
                Set Trait = Fe.Shapes.AddLine(PosX + Offset_X, _
                                              PosY + Offset_Y, _
                                              G_Cercle + Offset_X + R_Cercle + R_Cercle * Sin(Angle * I), _
                                              H_Cercle + Offset_Y + (R_Cercle - R_Cercle * Cos(Angle * I)))
     
                PosX = G_Cercle + R_Cercle + R_Cercle * Sin(Angle * I)
                PosY = H_Cercle + (R_Cercle - R_Cercle * Cos(Angle * I))
     
                 'formatage des traits
            With Trait.Line
     
                .Weight = 0.5       ' 0,75
                .DashStyle = msoLineSquareDot
                .ForeColor.SchemeColor = 2    ' 23 : bleu ; 2 : rouge
     
            End With
     
            End If
     
        Next I
     
        ' décalage à droite de X pour cercle suivant
        Offset_X = Offset_X + 3 * G_Cercle
     
        If Modulateur Mod 3 = 0 Then
        ' changement de ligne ou de rangée au bout du 3ème cercle aligné
        Offset_X = 0
        Offset_Y = Offset_Y + 3 * G_Cercle
     
        End If
     
        Next Modulateur
     
        Dim Ligne As Integer
        Dim Colonne As Integer
        Dim Offset_Ligne As Integer
        Dim Offset_Colonne As Integer
     
     
        ' écriture des tags des modulateurs
        Ligne = 26
        Colonne = 4
        Offset_Ligne = 24
        Offset_Colonne = 6
     
        For Modulateur = 1 To ModulateurMax
     
         Cells(Ligne, Colonne).Select
     
         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
     
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
     
     
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
     
        Selection.Font.Bold = True
         Cells(Ligne, Colonne).Value = Modulateur & "  &  " & Max - Modulateur
     
         Colonne = Colonne + Offset_Colonne
     
         If Modulateur Mod 3 = 0 Then
         Colonne = 4
         Ligne = Ligne + Offset_Ligne
         End If
     
        Next Modulateur
     
     
     
    '
    End Sub

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    C'est magnifique !!! et joliment présenté

    je ne connaissais pas la fonction shape, elle est encore mystérieuse pour moi ; et la trigo c est un peu loin

    il me faudra un certain temps pour digérer ton programme mais il va me permettre plus tard de m'ouvrir d'autres possibles.


    en tout cas super taf et en un temps record... you're a champion


    PS: ya un truc qui m'intrigue : c'est pas possible de faire coincider le chiffre avec le sommet de la pointe ?

    cordialement

  13. #13
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    PS: ya un truc qui m'intrigue : c'est pas possible de faire coincider le chiffre avec le sommet de la pointe ?
    Si c'est possible, j'ai fais comme sur ton image mais je suis en weekend et je n'ai pas de pc !
    Je regarde début de semaine prochaine et te reposte un code
    Bon weekend de Pâques !

  14. #14
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    hello Theze

    c'est tres sympa de ta part et je te remercie d'avance

    le dessin a été une idée donnée par Jpcheck afin de mieux illustrer ma demande

    j ai utilisé Paint pour la première fois ; j ai détourné la configuration par défaut donné par paint pour un camembert
    les numéros étaient initialement destinés à des rubriques pour chaque portion, c'est pour ça qu'ils étaient placés à hauteur du milieu de chaque portion

    j ai remplacé le nom des rubriques par les numéros mais leur position n était pas exactement ce que je voulais

    comme tu as pu le constater aussi, les rayons dans ma macro ne me servent pas. Paint me les avait mises d office et je ne savais pas comment les effacer. Après coup je me suis dit qu' en utilisant la même encre que celle du fond du cercle ?

    n empêche ta programmation pourra toujours me servir dans un autre projet mais surtout m aider a comprendre l'usage de certaines fonctions

    bon weekend de Pâques à toi aussi et également à tous les développeurs

    allez zou, c 'est l'heure de cacher le chocolat...

  15. #15
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Pour le positionnement des zones de texte sur les points, remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set Texte = Fe.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                                     G_Cercle + R_Cercle + (R_Cercle + 20) * Sin(Angle * I + (Angle / 2)) - LTexte / 2, _
                                     H_Cercle + (R_Cercle - (R_Cercle + 20) * Cos(Angle * I + (Angle / 2))) - LTexte / 2, _
                                     LTexte, _
                                     LTexte)
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set Texte = Fe.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                                     G_Cercle + R_Cercle + (R_Cercle + 20) * Sin(Angle * I) - LTexte / 2, _
                                     H_Cercle + (R_Cercle - (R_Cercle + 20) * Cos(Angle * I)) - LTexte / 2, _
                                     LTexte, _
                                     LTexte)

  16. #16
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    encore merci Theze

    ça marche impeccable ; même si les étiquettes un moment donné seront à éviter quand Max est trés grand car elles se juxtaposeront de trop

    par contre comme la longueur de LTexte varie selon la taille de Max, je l'ai mis à 30 ( le 0 du 10 ne se voyait qu’après avoir manuellement élargi l'étiquette). je ne sais pas comment lui faire un dimensionnement auto.

    ce que tu as fourni me permet d avancer grandement dans mon projet et me permet de mieux connaitre les possibilités du VBA. je te remercie chaleureusement.

    je ne sais pas si tu connais la figure du nœud de trèfle ( cas pour Max = 3 - le triangle dans le cercle) ? est-il possible dans cet ordre d'idée au lieu de tracer des traits rectilignes entre deux points modulo, de tracer des traits curvilignes? Le problème est de savoir entre autre quel rayon aura cet arc?

    sinon c'est pas grave. c'est déjà fort bien abouti.

    j'ai un autre questionnement qui me turlupine mais qui fera l'objet d'un autre topic; il est en lien avec le cercle que tu me permets de dessiner.

    bien à toi et à tous.

  17. #17
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Regardes avec les arcs de cercle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Arc()
     
        Dim Fe As Worksheet
        Dim S As Shape
     
        Set Fe = ActiveSheet
        Set S = Fe.Shapes.AddShape(msoShapeArc, 150, 150, 300, 200)
     
        S.Adjustments(2) = 20
     
    End Sub

  18. #18
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    merci pour le tuyau

    je n ai pas encore eu le temps de l'exploiter , mais ça viendra bien


    encore merci

    je clos la discussion pour le forum

    a plus sur d'autres problèmes astucieux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intersection entre segment et cercle
    Par chadliii dans le forum Mathématiques
    Réponses: 15
    Dernier message: 03/10/2019, 18h52
  2. Tracer un cercle en VBA
    Par Derrick1 dans le forum VB.NET
    Réponses: 1
    Dernier message: 05/12/2012, 16h36
  3. Modifier graphique en VBA (forme et segment)
    Par lbar012001 dans le forum VBA Access
    Réponses: 8
    Dernier message: 10/06/2009, 15h39
  4. Réponses: 3
    Dernier message: 22/06/2008, 16h06
  5. Arc de cercle sous VBA excel?
    Par fredieuric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/11/2006, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo