Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/09/2011, 15h43   #1
Invité de passage
 
Inscription : mars 2008
Messages : 15
Détails du profil
Informations personnelles :
Âge : 51
Localisation : Canada

Informations forums :
Inscription : mars 2008
Messages : 15
Points : 4
Points : 4
Par défaut Interruption soudaine d'une macro sur .INSERT suite au passage de 2003 à 2007

Bonjour,
J'ai une macro qui insère une ligne afin d'y ajouter un total calculé (je désire voir les totaux sur la première ligne de mon rapport et non la dernière).

Elle fonctionne à merveille sur Excel 2003 mais pas en 2007.
En fait c'est l'instruction suivante qui cause problème:

Code :
Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
L'insertion de ligne se fait bien, mais la macro termine sans compléter, alors qu'elle est loin d'être terminée.
En passant, idem pour le ".Delete" qui détruit effectivement la ligne mais termine là, bêtement.

Auriez-vous une piste de solution pour moi ?
Merci infiniment (je commence à en perdre mes cheveux).
BobDall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 16h55   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Une première piste est de regarder dans l'explorateur d'objets (F2) et plus particulièrement la méthode 'Insert' sur un objet Range pour voir si l'appel est bon.

Sinon poste-nous le reste du code et indique l'endroit où ça plante et/ou n'a pas le comportement attendu parce que sinon on va avoir du mal à deviner...
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h12   #3
Invité de passage
 
Inscription : mars 2008
Messages : 15
Détails du profil
Informations personnelles :
Âge : 51
Localisation : Canada

Informations forums :
Inscription : mars 2008
Messages : 15
Points : 4
Points : 4
Bonjour Sclarckone,
J'ai utilisé "enregistrer macro" pour capturer la syntaxe exacte de l'insertion de ligne.

Voici le code en question. Ce sont les lignes 7 et 22 qui causent l'interruption.

Code :
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
Sub Calculer_Totaux()
ShortcutKey = "T"
 
FeuilleActive ' déterminer le nom de la feuille active
 
If WS <> "MENU" And WS <> "CALENDAR" Then
    If Totaux = 1 Then Rows("4:4").Delete
    Totaux = 1
 
' déterminer la dernière ligne affichée. Si 65536 alors la liste est vide, pas de totaux à afficher.
' sélection de la colonne DATE puisque toujours présente.
    If Feuille = 1 Then Range("M4").Select 'historique
    If Feuille = 3 Then Range("O4").Select 'courante
    If Feuille = 4 Then Range("O4").Select 'OCE
    If Feuille = 5 Then Range("F4").Select 'Histo avec TestTrack
 
    Selection.End(xlDown).Select
    i1 = ActiveCell.Row + 1 'pour palier à l'insertion de la ligne de total.
 
    If i1 < 65536 Then
        Range("A4").Select
        Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
 
    ' Calculer les totaux heures et dollars des rangées affichées (autofilter) seulement
        If Feuille = 1 Then  'historique
            On Error Resume Next 'au cas ou il y aurait des caractères non numéric
            For i = 4 To i1 + 1
                If Rows(i).Hidden = False Then
                    Heures = Heures + Range("N" & i)
                    Dollars = Dollars + Range("P" & i)
                End If
            Next
            Resume
            Range("N4").Value = Heures
            Range("N4").Select
               Selection.Font.Bold = True
               Selection.Interior.ColorIndex = 34
            Range("P4").Value = Dollars
            Range("P4").Select
               Selection.Font.Bold = True
               Selection.Interior.ColorIndex = 34
 
            If LANGUE = 1 Then Range("O4").Value = Worksheets("Captions").Range("E92")
            If LANGUE = 2 Then Range("O4").Value = Worksheets("Captions").Range("F92")
 
            Range("O4").Font.Bold = True
            Columns("N:P").EntireColumn.AutoFit
            Range("O4").Select
        End If
 
     End If
Else
    If ENGLISH = False Then
        MsgBox (Worksheets("Captions").Range("F51")), 16, "Erreur"
    Else
        MsgBox (Worksheets("Captions").Range("E51")), 16, "Error"
    End If
End If
 
End Sub
BobDall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h31   #4
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Qu'est-ce que la variable 'Totaux' à la ligne 7? Elle n'est pas définie avant...c'est une variable publique?
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h36   #5
Invité de passage
 
Inscription : mars 2008
Messages : 15
Détails du profil
Informations personnelles :
Âge : 51
Localisation : Canada

Informations forums :
Inscription : mars 2008
Messages : 15
Points : 4
Points : 4
Oui, c'est une variable public définie comme suit : Public Totaux As Integer
Elle me sert à retirer la ligne insérée lors d'un recalcule éventuel. Elle est également initialisée à 0 sur la relance du rapport (ce rapport extrait des données d'une base SQL selon des critères de recherches variables).
BobDall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 17h43   #6
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Et quand ça plante sur la ligne 7 ça donne quoi comme message d'erreur? Tu es sûr que 'Totaux' vaut effectivement quelque chose à ce moment (utilise le debugger pour vérifier)?
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 18h13   #7
Invité de passage
 
Inscription : mars 2008
Messages : 15
Détails du profil
Informations personnelles :
Âge : 51
Localisation : Canada

Informations forums :
Inscription : mars 2008
Messages : 15
Points : 4
Points : 4
La première fois 'totaux' = 0 et le code arrête soudainement sur après avoir exécuté la ligen 22. L'insertion se fait, mais le code arrête tout simplement.
Je le roule en debug et j'ai le même résultat: il arrête.

Par la suite, 'totaux = 1' et là le code arrête après l'exécution de la ligne 7.
Je suis dans le brouillard. Je pense que c'est une particularité de 2007 et/ou de Windows-7, mais quoi ?
BobDall est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 12h24   #8
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 668
Points : 7 668
Bonjour,

Vu que le problème se passe sur une modification du contenu de la feuille, ma question serait:

Y a-t-il une ou des procédure(s) événementielle(s) sur la feuille concernée?
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 17h22   #9
Invité de passage
 
Inscription : mars 2008
Messages : 15
Détails du profil
Informations personnelles :
Âge : 51
Localisation : Canada

Informations forums :
Inscription : mars 2008
Messages : 15
Points : 4
Points : 4
Bonjour AlainTech,
Désolé du délais mais j'ai été absent durant plusieurs jours.
Votre réponse m'a mené vers la solution.
Quoique je n'ai pas trouvé l'évènement en question, le fait d'insérer "Application.ScreenUpdating = False" en début de macro a résolu le problème.

Merci à tous pour votre aide.
BobDall est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h47.


 
 
 
 
Partenaires

Hébergement Web