Problème de compatibilité VBA Excel 2010 avec versions 2007 et 2003

jacky128

XLDnaute Nouveau
Bonjour,

J'ai créé une macro sur Excel 2010 qui fonctionne sans problèmes quand je la lance avec Excel 2010. Cependant, lorsque j'essaie avec Excel 2007 ou 2003, ça ne fonctionne plus.

Voici le code de la macro:



Code:
Sub MiseàjourUP1()
'
'Suppression du filtre Niveau3
'
    Sheets("Niveau3").Select
    Range("$I$1:$I$48").AutoFilter Field:=1
'
'Copier-Coller Liste Arrêts
'
    Sheets("Niveau2").Select
    Columns("A:D").Select
    Selection.ClearContents
    Range("E19").Select
    Sheets("Niveau3").Select
    Columns("A:D").Select
    Selection.ClearContents
    Range("E11").Select
    Workbooks.Open Filename:="T:\ListeArrets.xlsx"
    Sheets("Résultats").Select
    Columns("F:I").Select
    Selection.Copy
    Windows("Causes Arrêt Ligne et TRH - UP1.xlsm").Activate
    Range("B48").Select
    Sheets("Niveau2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("E29").Select
    Sheets("Niveau3").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("E15").Select
'
'
'Filtrer les 3 premières causes
'
    Sheets("Niveau3").Select
    ActiveSheet.Range("$I$1:$I$48").AutoFilter Field:=1, Criteria1:=RGB(255, _
        199, 206), Operator:=xlFilterCellColor
'
'Masquer les cellules vides Niveau3
'
Sheets("Niveau3").Select
    Dim cel As Range
    For Each cel In Range("H2:H49")
    If cel = "" Then
    cel.EntireRow.Hidden = True
    End If
    Next
'
'Fin 1 et date page d'accueil
'
Sheets("Accueil").Select
Windows("ListeArrets.xlsx").Activate
Sheets("En-Tête").Select
    Range("A2:C4").Select
    Selection.Copy
    Windows("Causes Arrêt Ligne et TRH - UP1.xlsm").Activate
    Sheets("Accueil").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("B30").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Save
    Windows("ListeArrets.xlsx").Activate
    ActiveWindow.Close
'
'
'
'
'
'Diagramme niveau3
'
Sheets("Diagramme niveau3").Select
Range("B1:C38").Select
    Selection.EntireRow.Hidden = False
    Range("A1:C39").Select
    Selection.ClearContents
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Sheets("Niveau3").Select
    Range("F2:H39").Select
    Selection.Copy
    Sheets("Diagramme niveau3").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-9
    Range("B1:B38").Select
    Application.CutCopyMode = False
'
'
'Masquer les cellules vides diagramme Niveau3
'
Sheets("Diagramme niveau3").Select
    Dim cels As Range
    For Each cels In Range("C1:C38")
    If cels = "" Then
    cels.EntireRow.Hidden = True
    End If
    Next

'
'Couleur graph niveau3
'
    Sheets("Diagramme niveau3").Select
    Dim Sér As Series, PlgX As Range, I As Long
    Set Sér = ActiveSheet.ChartObjects("Graphique 1").Chart.SeriesCollection(1)
    Set PlgX = Application.Range(Split(Sér.Formula, ",")(1))
    For I = 1 To Sér.Points.Count
        Sér.Points(I).Interior.Color = PlgX.Rows(I).Interior.Color
        Next I
'
End Sub


Je m'excuse pour le caractère peut être un peu indigeste de la macro, qui effectue des copier-coller et trie des tableaux.

Les erreurs semblent provenir des moments où la macro trie les données....

Est-ce que quelqu'un peut m'aider à rendre la macro compatible avec les versions 2003 et 2007 s'il vous plait ?

Merci d'avance pour votre aide!
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Problème de compatibilité VBA Excel 2010 avec versions 2007 et 2003

Bonjour Jacky128

Merci de mettre ton code entre les tags prévus pour ça
Code:
[/B][/COLOR] [COLOR=#0000cd][B][ /code] [/B][/COLOR]sans espace entre [ et /

Sur ExcelForum ça te vaudrait 1 avertissement :rolleyes:

A+
 
C

Compte Supprimé 979

Guest
Re : Problème de compatibilité VBA Excel 2010 avec versions 2007 et 2003

Salut Jaxky128

Nous aurions préféré que tu édites ton 1er post pour mettre ton code entre balises ;)

Petite remarque pour commencer,
si tu veux développer du code, fait le sur la version la plus ancienne,
elle sera alors compatible avec les autres mais ne fait pas l'inverse.

Ensuite ton code peut être optimisé, il faut éviter les "Select" qui ralentissent considérablement l'exécution

Voici le code optimisé
VB:
Sub Miseàjour()
  Dim WbkS As Workbook
  Dim Cel As Range
  '
  'Suppression du filtre Niveau3
  Sheets("Niveau3").Range("$I$1:$I$48").AutoFilter Field:=1
  '
  'Copier-Coller Liste Arrêts
  Sheets("Niveau2").Columns("A:D").ClearContents
  Sheets("Niveau3").Columns("A:D").ClearContents
  '
  ' Ouvrir le fichier des arrets
  Set WbkS = Workbooks.Open(Filename:="T:\ListeArrets.xlsx")
  '
  ' Réactiver ce classeur
  ThisWorkbook.Activate
  '
  ' Copier les colonnes du classeur source et les coller dans ce classuer
  WbkS.Sheets("Résultats").Columns("F:I").Copy _
    Destination:=ThisWorkbook.Sheets("Niveau2").Range("A1")
  
  WbkS.Sheets("Résultats").Columns("F:I").Copy _
    Destination:=ThisWorkbook.Sheets("Niveau3").Range("A1")
  '
  'Filtrer les 3 premières causes
  With Sheets("Niveau3")
    ' IMPOSSIBLE sur 2003
    '.Range("$I$1:$I$48").AutoFilter Field:=1, _
      Criteria1:=RGB(255, 199, 206), Operator:=xlFilterCellColor
    ' Masquer les cellules vides Niveau3
    For Each Cel In Range("H2:H49")
      If Cel = "" Then
        Cel.EntireRow.Hidden = True
      End If
    Next
  End With
  '
  ' Fin SPI et date page d'accueil
  Sheets("Accueil").Select
  WbkS.Sheets("En-Tête").Range("A2:C4").Copy _
    Destination:=ThisWorkbook.Sheets("Accueil").Range("A1")
  
  Application.CutCopyMode = False
  ThisWorkbook.Save
  ' Fermer le calsseur source
  WbkS.Close SaveChanges:=False
  '
  'Diagramme niveau3
  With Sheets("Diagramme niveau3")
    .Range("B1:C38").EntireRow.Hidden = False
    With .Range("A1:C39")
      .ClearContents
      .Borders(xlDiagonalDown).LineStyle = xlNone
      .Borders(xlDiagonalUp).LineStyle = xlNone
      .Borders(xlEdgeLeft).LineStyle = xlNone
      .Borders(xlEdgeTop).LineStyle = xlNone
      .Borders(xlEdgeBottom).LineStyle = xlNone
      .Borders(xlEdgeRight).LineStyle = xlNone
      .Borders(xlInsideVertical).LineStyle = xlNone
      .Borders(xlInsideHorizontal).LineStyle = xlNone
      With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
      End With
    End With
  End With
  Sheets("Niveau3").Range("F2:H39").Copy
  With Sheets("Diagramme niveau3").Range("A1")
    .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    ' Masquer les cellules vides diagramme Niveau3
    For Each Cel In Range("C1:C38")
      If Cel = "" Then
        Cel.EntireRow.Hidden = True
      End If
    Next
    'Couleur graph niveau3
    Dim Sér As Series, PlgX As Range, I As Long
    Set Sér = .ChartObjects("Graphique 1").Chart.SeriesCollection(1)
    Set PlgX = Application.Range(Split(Sér.Formula, ",")(1))
    For I = 1 To Sér.Points.Count
      Sér.Points(I).Interior.Color = PlgX.Rows(I).Interior.Color
    Next I
  End With
End Sub

Enfin, le filtrage sur couleur ne peut absolument pas fonctionner sur 2003
Il faut faire une boucle sur tes cellules et masquer les lignes dont la couleur n'est pas bonne

N'ayant pas de fichier à dispo, à toi des tester si cela fonctionne

A+
 

jacky128

XLDnaute Nouveau
Re : Problème de compatibilité VBA Excel 2010 avec versions 2007 et 2003

Merci beaucoup pour ta réponse BrunoM45, la macro est en effet bien plus rapide ainsi ! :)

En pièce jointe, j'ai mis un fichier comprenant le tableau que j'aimerai pourvoir modifier grâce à une macro COMPATIBLE AVEC EXCEL 2003 (à insérer ensuite dans la macro globale, dans la partie "Filtrer les 3 premières causes").

Le tableau présente différentes causes, dites "Cause1", qui elles-mêmes se détaillent en sous-causes, dites "Cause2" dans la colonne B. Pour chaque Cause2 il y a un temps en colonne C. La colonne D convertit ce temps en pourcentage, et la colonne E calcule le pourcentage correspondant à chaque Cause1 en sommant sur la colonne D. (CF. PJ)

Ce que je voudrais faire, c'est une macro qui sélectionne les 3 premières Causes1 (3 premières valeurs de la colonne E), puis masque les cellules à valeur nulle de la colonne D.

Le tableau que je souhaite obtenir se trouve dans le deuxième feuillet de la PJ.

Est-ce que quelqu'un a une idée de comment coder ceci en VBA avec Excel 2003 ??

Merci d'avance pour votre aide
 

Pièces jointes

  • Tableau à trier.xls
    43 KB · Affichages: 53
  • Tableau à trier.xls
    43 KB · Affichages: 58
  • Tableau à trier.xls
    43 KB · Affichages: 50

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 391
Membres
102 882
dernier inscrit
Sultan94