MFC dans Formes

Nikless

XLDnaute Junior
Bonjour le forum,

Je souhaite concaténer et mettre en forme des données dans des formes Excel afin de les intégrer à une présentation ou à des tableaux de bord.

J'ai utilisé 2 méthodes qui ne donnent pas satisfaction en concaténant les données et en superposant les formes.

J'imagine qu'en utilisant des Select Case sur VBA ça doit être à la fois possible de concaténer, de choisir la couleur de la police et le format de nombres.

Merci d'avance pour votre aide,

Nikless
 

Pièces jointes

  • Formes et MFC.xlsm
    21.2 KB · Affichages: 34

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : MFC dans Formes

Bonsoir Nikless,

Bon un peu de bricolage n'a jamais fait de mal :D

La méthode (ça reste du bricolage):


  • copier le texte concaténé en valeur dans la cellule E6
  • éditer directement le texte dans la cellule E6
  • en édition directe, on utilise le fait qu'un retour à la ligne s'obtient par Alt+Entrée et qu'on peut dans la cellule sélectionner une une suite de caractères puis appliquer à cette sélection (à l'aide du ruban) le format de texte qu'on désire (police, gras ou non, italique ou non, couleur de police, etc)
  • quand le résultat souhaité est atteint, on copie la cellule E6 et on la colle sur la feuille en tant qu'image liée.
  • on insère ensuite une forme rectangulaire dont on modifie le format pour obtenir ce qu'on désire (ici fond blanc, contour gris et "éclat et contours adoucis")
  • enfin on superpose l'image et la forme puis on les groupe
  • il suffit ensuite de copier cet ensemble et de le copier là où vous désirez

nota 1:
les deux triangles ont été dessinés à l'aide de formes.
nota 2: tout changement dans la cellule E6 (contenu ou mise en forme de texte) est répercuté sur l'image finale.

Avec un peu de pratique, la manip dure à peine 10 minutes.
 

Pièces jointes

  • Nikless-MFC dans forme-v1.xlsx
    25.9 KB · Affichages: 31

Nikless

XLDnaute Junior
Re : MFC dans Formes

Merci MaPomme pour cette approche fort agile.
La partie la plus chronophage demeure la mise en forme des données et le format du texte lors de l'étape 1.

Je reste convaincu qu'on doit pouvoir automatiser ce genre de tâches (possibilité de copier en VBA la format de la cellule d'origine).

Merci, j'y retourne !
 

PMO2

XLDnaute Accro
Re : MFC dans Formes

Bonjour,

Une piste avec le code suivant à copier dans un module Standard
Code:
Sub aa()
Dim S As Worksheet
Dim Rsource As Range
Dim R As Range
Dim C As Range
Dim C2 As Range
Dim SH As Shape
Dim PIC As Excel.Picture
Dim REC As Excel.Rectangle
Dim i&
Dim T(1 To 2)

'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°° Validité de la sélection °°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'--- On sort si la sélection n'est pas un Range ---
If TypeName(Selection) <> "Range" Then Exit Sub
'--- On sort si la sélection n'a pas 2 colonnes ---
Set Rsource = Selection
If Rsource.Columns.Count <> 2 Then
  MsgBox "La plage sélectionnée doit comporter 2 colonnes"
  Exit Sub
End If
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

Application.ScreenUpdating = False
'--- Copie la sélection dans une feuille temporaire ---
Rsource.Copy
Set S = Sheets.Add
S.Paste
Application.CutCopyMode = False

'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°° Aménagement de la plage copiée (feuille temporaire) °°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
With S.Cells
  .Font.Name = "Calibri"
  .Font.Size = 9
End With
S.Columns(2).Insert Shift:=xlToRight
S.Columns(2).Insert Shift:=xlToRight
Set R = S.UsedRange
For i& = 1 To R.Rows.Count
  Set C = S.Cells(i&, 1)
  If C <> "" Then
    C = Replace(C, " ", vbLf)
    '---
    Set C = C.Offset(0, 3)
    Set C2 = C.Offset(0, -2)
    '---
    If C >= 0 Then
      C.Font.Color = 5287936
      C.HorizontalAlignment = xlLeft
      '---
      C2 = 8
      With C2.Font
        .Color = 5287936
        .Name = "Webdings"
      End With
      '---
      Set C2 = C2.Offset(0, 1)
      C2 = "+"
      C2.Font.Color = 5287936
      C2.HorizontalAlignment = xlRight
    Else
      C.HorizontalAlignment = xlLeft
      '---
      C2 = 8
      With C2.Font
        .Color = vbRed
        .Name = "Webdings"
      End With
      '---
      Set C2 = C2.Offset(0, 1)
      C2 = " "
      C2.Font.Color = vbRed
      C2.HorizontalAlignment = xlRight
    End If
  End If
Next i&
'---
With S.Cells
  .EntireColumn.AutoFit
  .EntireRow.AutoFit
End With
ActiveWindow.DisplayGridlines = False
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

'--- Copie l'image de la plage ---
S.UsedRange.CopyPicture
'--- Destruction de la feuille temporaire ---
Application.DisplayAlerts = False
S.Delete
Application.DisplayAlerts = True
'--- Colle l'image de la plage ---
Selection.Offset(0, Rsource.Columns.Count + 1).PasteSpecial
'--- Création du rectangle arrondi ---
Set PIC = Selection
Set SH = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _
    Left:=PIC.Left - 10, Top:=PIC.Top - 10, Width:=PIC.Width + 20, Height:=PIC.Height + 20)
Set REC = SH.OLEFormat.Object
REC.Border.Color = 4626167
REC.Interior.Color = vbWhite
REC.SendToBack
'--- Groupe de l'image et du rectangle ---
T(1) = PIC.Name
T(2) = REC.Name
ActiveSheet.Shapes.Range(T).Group

'--- Nettoyage ---
Rsource.Select
Application.ScreenUpdating = True
End Sub

Il faut d'abord sélectionner la plage (A8:B18 dans l'exemple) puis lancer la macro aa (que vous pouvez renommer à votre guise).
 

Pièces jointes

  • Image d'une plage dans une Shape Rectangle et les grouper.xlsm
    30.8 KB · Affichages: 35

Nikless

XLDnaute Junior
Re : MFC dans Formes

Bonjour PM02 et GRAND merci pour cette piste déjà très aboutie.

Serait-il possible de ne pas copier là S.UsedRange en Image afin de garder plus de flexibilité dans l'édition de la forme (ajouter des commentaires à la mano, par exemple) ?

Comment lancer la procédure sur une sélection multiple ou faire tourner une boucle sur plusieurs plages ? En définissant des Array avec les différentes plages sur lesquelles faire la procédure, sans doute ?


Bonne journée à tous et à chacun,

Nikless
 

PMO2

XLDnaute Accro
Re : MFC dans Formes

Bonjour,

Serait-il possible de ne pas copier la S.UsedRange en Image afin de garder plus de flexibilité dans l'édition de la forme (ajouter des commentaires à la mano, par exemple) ?
Tout dépend ce que vous appelez commentaires
1) est-ce commentaire au sens Excel (objet Comment) ?
2) OU du texte dans d'autres cellules ?

Et à quel moment souhaitez vous les intégrer
1) directement dans la feuille source (avant le lancement de la macro) ?
2) OU dans la feuille temporaire qui est construite dans l'exécution de la macro et qui est détruite à sa fin d'exécution ?

A noter : La logique de la macro rend nécessaire l'emploi de la copie en Image
****************
Comment lancer la procédure sur une sélection multiple ou faire tourner une boucle sur plusieurs plages ?
Construisez un classeur avec plusieurs plages et soumettez le que je puisse voir ce qu'l en est.

A plus.
 

Nikless

XLDnaute Junior
Re : MFC dans Formes

Bonjour,
Merci pour votre retour PMO2,

Par "Commentaires", j'entends le fait de pouvoir modifier les données en dur le texte (au sein du texteframe de la forme) après avoir lancé la macro.
Cela me permettrait de retraiter ou annoter les chiffres que je présente, et ce, en éditant directement dans Powerpoint.

Nous butons sur un problème si la macro ne fonctionne uniquement avec le format Image.

Vu depuis ma hauteur de Hobbit de VBA, une solution de contournement serait de concaténer et mettre en forme les données provenant des cellules en utilisant une boucle ou une Array directement dans une Zone de Texte ou Shape.

Pour les plages multiples :
Dans le fichier joint, j'ai inséré de plages de données contiguës ("Ville") que je souhaite insérer dans leur forme respective.

Merci pour votre aide
 

Pièces jointes

  • Insérer des plages multiples dans des formes avec possibilité d'édition.xlsm
    24.7 KB · Affichages: 25
Dernière édition:

PMO2

XLDnaute Accro
Re : MFC dans Formes

Par "Commentaires", j'entends le fait de pouvoir modifier les données en dur le texte (au sein du texteframe de la forme) après avoir lancé la macro.
Cela me permettrait de retraiter ou annoter les chiffres que je présente, et ce, en éditant directement dans Powerpoint.
Nous butons sur un problème si la macro ne fonctionne uniquement avec le format Image.

Pour les plages multiples :
Dans le fichier joint, j'ai inséré de plages de données contiguës ("Ville") que je souhaite insérer dans leur forme respective.

Bonjour,

Voici un nouveau code qui prend en compte les plages multiples et l'ajout de commentaires.
Ces derniers peuvent être créés
1) soit directement dans la nouvelle feuille Excel
2) soit en copiant la plage et en la collant dans PowerPoint par collage spécial "Objet feuille de calcul Excel". Le double clic sur l'objet fait apparaître l'application Excel au sein de PowerPoint.

Code:
Sub xx()
Dim Szero As Worksheet
Dim S As Worksheet
Dim Rzero As Range
Dim R As Range
Dim C As Range
Dim C2 As Range
Dim Ville$
Dim i&
Dim j&
Dim T_Ranges() As Range
Dim SH As Shape
Dim REC As Excel.Rectangle
'---
If TypeName(Selection) <> "Range" Then Exit Sub
Set Szero = ActiveSheet
Set Rzero = Selection
ReDim T_Ranges(1 To Rzero.Columns.Count - 1)
'---
Application.ScreenUpdating = False
Set S = Sheets.Add(after:=Szero)
For j& = 2 To Rzero.Columns.Count
  Set Rzero = Range(Rzero.Cells(1, 1), Rzero.Cells(Rzero.Rows.Count, 1))
  Ville$ = Rzero.Offset(-1, 0).Cells(1, j&)
  Set Rzero = Application.Union(Rzero, Rzero.Offset(0, j& - 1))
  Rzero.Copy
  '---
  If R Is Nothing Then Set R = S.[b2]
  R.PasteSpecial
  '---
  Set T_Ranges(j& - 1) = Selection
  '--- Bornes de calage ---
  R.Offset(0, -1) = "Debut_" & Ville$
  R.Offset(Rzero.Rows.Count - 1, -1) = "Fin_" & Ville$
  '---
  Set R = S.Range("B" & S.UsedRange.Rows.Count + 4 & "")
Next j&
Application.CutCopyMode = False
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°° Aménagement de la plage copiée (feuille temporaire) °°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
With S.Cells
  .Font.Name = "Calibri"
  .Font.Size = 9
End With
S.Columns(3).Insert Shift:=xlToRight
S.Columns(3).Insert Shift:=xlToRight
Set R = S.UsedRange
For i& = 2 To R.Rows.Count + 1
  Set C = S.Cells(i&, 2)
  If C <> "" Then
    C = Replace(C, " ", vbLf)
    '---
    Set C = C.Offset(0, 3)
    Set C2 = C.Offset(0, -2)
    '---
    If C >= 0 Then
      C.Font.Color = 5287936
      C.HorizontalAlignment = xlLeft
      '---
      C2 = 8
      With C2.Font
        .Color = 5287936
        .Name = "Webdings"
      End With
      '---
      Set C2 = C2.Offset(0, 1)
      C2 = "+"
      C2.Font.Color = 5287936
      C2.HorizontalAlignment = xlRight
    Else
      C.Font.Color = vbRed
      C.HorizontalAlignment = xlLeft
      '---
      C2 = 8
      With C2.Font
        .Color = vbRed
        .Name = "Webdings"
      End With
      '---
      Set C2 = C2.Offset(0, 1)
      C2 = " "
      C2.Font.Color = vbRed
      C2.HorizontalAlignment = xlRight
    End If
  End If
Next i&
'---
With S.Cells
  .EntireColumn.AutoFit
  .EntireRow.AutoFit
End With
S.Columns(1).ColumnWidth = 40
ActiveWindow.DisplayGridlines = False
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
'--- Création du rectangle arrondi ---
For i& = LBound(T_Ranges) To UBound(T_Ranges)
  Set R = T_Ranges(i&)
  Set SH = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, _
    Left:=R.Left - 10, Top:=R.Top - 10, Width:=R.Width + 20, Height:=R.Height + 20)
  SH.Fill.Transparency = 1
  Set REC = SH.OLEFormat.Object
  REC.Border.Color = 4626167
  REC.Interior.Color = vbWhite
Next i&
'--- Nettoyage ---
S.[a1].Select
Application.ScreenUpdating = True
End Sub

Je veux bien aller plus loin mais je ne saurais le faire gratuitement ; il faudrait prévoir un budget.
Quoi qu'il en soit, vous avez le pied bien installé sur l'étrier.
 

Pièces jointes

  • Insérer des plages multiples dans des formes avec possibilité d'édition_pmo.xlsm
    32.7 KB · Affichages: 25

Nikless

XLDnaute Junior
Re : MFC dans Formes

GRAND merci PMO2,
Je vais exploiter cette procédure.

Y'a t'il des inconvénients ou des points de vigilance avec l'utilisation de collage spécial "Objet feuille de calcul Excel" ? (boulimie du fichier, actualisation des données...).

Je vous remercie de votre aide. Par curiosité, à quel montant s'élèverait le développement ?
Du reste, j'apprécie beaucoup la manière dont est structuré votre code.

Je vais continuer à avancer par moi-même maintenant que me revoilà bien mis en selle !
 

PMO2

XLDnaute Accro
Re : MFC dans Formes

Y'a t'il des inconvénients ou des points de vigilance avec l'utilisation de collage spécial "Objet feuille de calcul Excel" ? (boulimie du fichier, actualisation des données...).
Pour arriver à faire péter les processeurs actuels, il faut vraiment y aller très fort (ce n'est quand même pas des calculs pour la météo).
Pour l'actualisation des données, on peut coller avec liaison et obtenir l'interaction entre Excel et PowerPoint mais est-ce vraiment utile (à vous de voir).

Par curiosité, à quel montant s'élèverait le développement ?
S'il s'agit d'une simple mise "pied à l'étrier", c'est comme un cours à 60 euros l'heure.
Si c'est un développement avec un cahier des charges exhaustif, tout dépendra du temps d'analyse et de programmation. La base jour est compté 500 euros.

Je vais continuer à avancer par moi-même maintenant que me revoilà bien mis en selle !
Attention aux ruades, l'informatique est une vallée de larmes.

Bon courage et à plus.
 

Discussions similaires

Réponses
8
Affichages
242

Statistiques des forums

Discussions
312 485
Messages
2 088 813
Membres
103 971
dernier inscrit
abdazee