Compatibilité macros Excel 2002 vers EXCEL 2007

Résolu
Signaler
Messages postés
3
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
14 novembre 2007
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour, je travail avec différentes macros sous Excel 2002, je viens de migrer un poste sous 2007 PRO, et un problème d'execution de l'une de mes macros m'embéte fortement. Le message d'erreur est le 1004 concernant un objet. Pour moi ce problème est lié au paramétrage de la sécurité des Macros Excel, mais je ne trouve pas le bon paramétre à modifier merci de me filler un petit coup de main.

5 réponses

Messages postés
3
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
14 novembre 2007

Merci pour tes informations, le problème est liée à la boucle selon les différents test effectué sous Excel 2007, les DO et Loop ne fonctionne plus tel que établie Sous les ancienne version.
CAD dans l'ancienne version :
Do
puis
Loop Until (variable)

Dans 2007

Do Until (Variable)
Loop

Donc une petite connerie quoi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Ce serait sûrement plus facile, quoique pas certain, de t'aider si on voyait le bout de code qui cause l'erreur.

MPi²
Messages postés
3
Date d'inscription
lundi 10 mai 2004
Statut
Membre
Dernière intervention
14 novembre 2007

Exact, voici le fraguement de ma macros le problème est localisé dans la partie en gras et souligné.

Application.DisplayAlerts = False
    Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(6), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    Application.DisplayAlerts = True
    
Do

    If Left(ActiveCell.Value, 5) = "Total" Then
 
    soustot = ActiveCell.Value
    ActiveCell.FormulaR1C1 = ""
    
    ActiveCell.Offset(0, 4).Select    ActiveCell.FormulaR1C1 soustot & " "
    Selection.Font.ColorIndex = 1
    Selection.Font.Bold = True
    
    With Selection
        .HorizontalAlignment = xlRight
        .VerticalAlignment = xlTop
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With
    
    ActiveCell.Offset(0, 1).Select
    Selection.Font.Bold = True
    Selection.Font.ColorIndex = 1
    
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    
    ' mise en place du titre du sous chapitre
    
    Selection.End(xlUp).Select
    ActiveCell.Offset(-2, -2).Select
    

    ActiveCell.FormulaR1C1 = soustot
    Selection.Replace What:="Total ", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False
    Selection.Font.Bold = True
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlTop
        .WrapText = True
        .Orientation = 0
        .AddIndent = False
        .ShrinkToFit = False
        .MergeCells = False
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = xlAutomatic
    End With
    
    Cells.Find(What:=soustot & " = ", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=True).Activate

    ActiveCell.Offset(1, -4).Select
    
    ' insérer 5 lignes entre les sous totaux
    
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
    Selection.EntireRow.Insert
            
    Else
     ActiveCell.Offset(1, 0).Select
    End If
    
    Loop Until ActiveCell.Value = "Total"

    ActiveCell.FormulaR1C1 = ""
    ActiveCell.Offset(-5, 0).Select
    Rows(ActiveCell.Row).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Clear
   
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Ouf ...
Je pensais trouver quelque chose de plus explicite....
C'est pourtant une commande de base très simple...(?)

La première chose que j'essaierais, c'est
MsgBox Activecell. Address
tout juste avant la ligne d'erreur.... mais tu l'as peut-être essayé... (?)

Et fais attention à ce genre de code    Cells.Find(What:soustot & " ", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=True) .Activate
Essaie d'éviter les Select et les Activate quand ce n'est pas nécessaire.
En Selectionnant, ton code peut se trouver déphasé par rapport à ce que tu faisais et tu risques de perdre le contrôle avec les Offset(...)

Crée plutôt une variable As Range
Dim Valeur As Range
Set Valeur = Cells.Find("=", LookIn:=xlFormulas)
If Not Valeur Is Nothing Then .... 'trouvé
......

MPi²
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Je ne pense pas que ce soit la raison...
Ces méthodes (voir plus bas) de boucler existent en VB depuis des lunes et devraient fonctionner encore sous 2007... j'imagine ...

Do
Loop Until

Do

Loop While

Do Until
Loop

Do While
Loop

Les 4 semblent faire la même chose,
mais les 2 premières boucles seront effectuées au moins une fois.
Les 2 dernières seront effectuées seulement si la condition est vraie.

C'est important de bien choisir laquelle on utilise selon les conditions en cours...

MPi²