XL 2010 Bug Macro affecte image à listes déroulantes

Orson83

XLDnaute Impliqué
Bonjour la communauté,
J'ai un bug dans une macro qui permet de générer des images "flèche" à chaque liste déroulante.
En effet, toutes les flèches ne sont pas attribuées à mes listes et j'ai une erreur d'exécution 1004.
Merci pour votre aide. Mon exemple est annexé.
Tchotchodu31
 

Pièces jointes

  • Affecte-fleches-V1.xlsm
    23.6 KB · Affichages: 15
Solution
Re,
Exact, ça rame un peu. Mais on trouve toujours une solution même si elle est vraiment bancale.
En insistant un peu, certains DoEvents ont été supprimés en accélérant le process avec un figeage écran:
Code:
Sub AffecteFlèche()
Application.ScreenUpdating = False
 For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
   ActiveSheet.Shapes("fleche1").Copy
   c.Offset(, 1).Select
    DoEvents
    ActiveSheet.Paste
    DoEvents
    With Selection
        .Name = c.Address
        .Left = c.Offset(, 1).Left
        .Top = c.Offset(, 1).Top + 1
        .Height = c.Offset(, 1).Height
        .OnAction = "clicFlèche"
    End With
 Next c
End Sub

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Tchotchodu31, Riton, MaPomme,
Sur 2007 c'est totalement aléatoire, mais il ne va jamais jusqu'à la fin.
Une piste peut être : si je mets un point d'arrêt sur Next c et que je boucle à la main alors ça marche impeccable.
Par contre pas de solution.
Un truc qui marche juste pour tester, mettre des DoEvents partout. par contre il faut que je les double. c'est vraiment bizarre. Comme si quand il faisait le paste, le paste précédent n'était pas terminé. :eek:
VB:
Sub AffecteFlèche()
 For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
   ActiveSheet.Shapes("fleche1").Copy
   c.Offset(, 1).Select
   DoEvents
   DoEvents
   ActiveSheet.Paste
   DoEvents
   DoEvents
   Selection.Name = c.Address
   Selection.Left = c.Offset(, 1).Left
   Selection.Top = c.Offset(, 1).Top + 1
   Selection.Height = c.Offset(, 1).Height
   Selection.OnAction = "clicFlèche"
   DoEvents
   DoEvents
 Next c
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Exact, ça rame un peu. Mais on trouve toujours une solution même si elle est vraiment bancale.
En insistant un peu, certains DoEvents ont été supprimés en accélérant le process avec un figeage écran:
Code:
Sub AffecteFlèche()
Application.ScreenUpdating = False
 For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
   ActiveSheet.Shapes("fleche1").Copy
   c.Offset(, 1).Select
    DoEvents
    ActiveSheet.Paste
    DoEvents
    With Selection
        .Name = c.Address
        .Left = c.Offset(, 1).Left
        .Top = c.Offset(, 1).Top + 1
        .Height = c.Offset(, 1).Height
        .OnAction = "clicFlèche"
    End With
 Next c
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @sylvanu

Pour 1000 cellules, entre 0.47 et 0.60 secondes en 2010.
VB:
Sub AffecteFlèche()
Dim arr As Shape, T0
   T0 = Timer
   Application.ScreenUpdating = False
   For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
      Set arr = ActiveSheet.Shapes("fleche1").Duplicate
      With c.Offset(, 1)
         arr.Name = c.Address
         arr.Left = .Left
         arr.Top = .Top + 1
         arr.Height = .Height
         arr.OnAction = "clicFlèche"
      End With
   Next c
   MsgBox Format(Timer - T0, "0.00\ sec.")
End Sub
 

Orson83

XLDnaute Impliqué
Re,
Exact, ça rame un peu. Mais on trouve toujours une solution même si elle est vraiment bancale.
En insistant un peu, certains DoEvents ont été supprimés en accélérant le process avec un figeage écran:
Code:
Sub AffecteFlèche()
Application.ScreenUpdating = False
For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
   ActiveSheet.Shapes("fleche1").Copy
   c.Offset(, 1).Select
    DoEvents
    ActiveSheet.Paste
    DoEvents
    With Selection
        .Name = c.Address
        .Left = c.Offset(, 1).Left
        .Top = c.Offset(, 1).Top + 1
        .Height = c.Offset(, 1).Height
        .OnAction = "clicFlèche"
    End With
Next c
End Sub
Merci Sylvanu, cette macro fonctionne parfaitement.
Effectivement, je pense que la macro initiale posait problème avec Excel 2010.
Bonne soirée.
François
 

Orson83

XLDnaute Impliqué
Re @sylvanu

Pour 1000 cellules, entre 0.47 et 0.60 secondes en 2010.
VB:
Sub AffecteFlèche()
Dim arr As Shape, T0
   T0 = Timer
   Application.ScreenUpdating = False
   For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
      Set arr = ActiveSheet.Shapes("fleche1").Duplicate
      With c.Offset(, 1)
         arr.Name = c.Address
         arr.Left = .Left
         arr.Top = .Top + 1
         arr.Height = .Height
         arr.OnAction = "clicFlèche"
      End With
   Next c
   MsgBox Format(Timer - T0, "0.00\ sec.")
End Sub
Merci Sylvanu, cette macro fonctionne parfaitement.
Effectivement, je pense que la macro initiale posait problème avec Excel 2010.
Bonne soirée.
François
Re @sylvanu

Pour 1000 cellules, entre 0.47 et 0.60 secondes en 2010.
VB:
Sub AffecteFlèche()
Dim arr As Shape, T0
   T0 = Timer
   Application.ScreenUpdating = False
   For Each c In Cells.SpecialCells(xlCellTypeAllValidation)
      Set arr = ActiveSheet.Shapes("fleche1").Duplicate
      With c.Offset(, 1)
         arr.Name = c.Address
         arr.Left = .Left
         arr.Top = .Top + 1
         arr.Height = .Height
         arr.OnAction = "clicFlèche"
      End With
   Next c
   MsgBox Format(Timer - T0, "0.00\ sec.")
End Sub
Merci mapomme, cette macro fonctionne parfaitement.
Effectivement, je pense que la macro initiale posait problème avec Excel 2010.
Bonne soirée.
François
 

Discussions similaires

Réponses
17
Affichages
879

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400