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 11/11/2011, 18h53   #1
 
Inscription : février 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 30
Points : -1
Points : -1
Par défaut Erreur de compilation Next sans For

Bonjour,

Je suis dans une feuille Excel dont je traite les données par le biais d'un tableau croisé dynamique créé dans le code.
Une fois, le tableau créé et ça marche bien, je renomme la feuille du tableau en TAB_CROIS...

Puis je dois filtrer mon champ "Semaine" sur un certain nombre de valeur par le bout de code ci-dessous. Mais VBA me sort une erreur sur le Next en me disant: "Erreur de compilation - Next sans For"

Avez vous une idée ? Est ce l'action "With" qui crée un problème ? Où est mon erreur ?

Merci de votre aide
CH
Code :
1
2
3
4
For i = 1 To y
        Sheets("TAB_CROIS").Select
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine").PivotItems(Cells(9 + i, 1)).Visible = False
    Next
November-Oscar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 18h55   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
C'est à cause du "With" qui n'est pas fermé par en "End With".
D'ailleurs, je crois qu'il ne sert à rien...
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 11/11/2011, 19h16   #3
 
Inscription : février 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 30
Points : -1
Points : -1
Super merci, ça ne bloque plus là dessus... ça doit servir un peu quand même

Je viens de relancer mon programme.

Maintenant sur la ligne With, il me sort un

"Impossible de lire la propriété PivotItems de la classe Pivot Field"

A tout hasard, je mets le début du bout de code qui est avant pour la création de mon graphe croisé dynamique et du tableau associé... Ce n'est pas complet.

Merci encore pour la réponse rapide...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        "DATA!R1C1:R65536C" & z).CreatePivotTable TableDestination:="", _
        TableName:="Tableau croisé dynamique1", DefaultVersion:= _
        xlPivotTableVersion10
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    Charts.Add
    ActiveChart.Location Where:=xlLocationAsNewSheet
    With ActiveChart.PivotLayout.PivotTable.PivotFields("Semaine")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveChart.PivotLayout.PivotTable.AddDataField ActiveChart.PivotLayout. _
        PivotTable.PivotFields("Heure"), "Somme de Heure", xlSum
    With ActiveChart.PivotLayout.PivotTable.PivotFields("Projet")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveChart.PivotLayout.PivotTable.PivotFields("Code_tâche")
        .Orientation = xlPageField
        .Position = 1
    End With
J'ai testé autre chose sur mon second problème lié au message initial.

J'ai enlevé la boucle et pris une valeur existante dans mes données...

==> remplacer le Cells(9 + i, 1) par "2011S42"

Et là il rechange l'erreur, passe à ma ligne de code suivante qui
Code :
Worksheets("GRAPHE").Activate
et me laisse le message d'erreur suivant : " L'indice n'appartient pas à la sélection".

Je reste preneur de vos idées.
November-Oscar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2011, 07h04   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Comme dis plus haut par tedo01 placé comme il est ton With ne te sert strictement à rien, il doit même te générer une erreur. Si tu veux t'en convaincre regarde l'aide en cliquant sur With et en appuyant ensuite sur F1.
Le With sert à éviter de répéter le "sujet" de tes ligne de code, la partie incluse dans la même ligne que le With sera placé devant les points laissés seuls et ceux entre With et End With.

Pour ton second problème, as tu bien un onglet (une feuille) qui se nomme"Graphe" dans ton classeur actif?
Attention avec les ActiveWorkbook, il vaut mieux pointer ton classeur dans une variable ou au pire utiliser ThisWorkbook si tu veux parler du classeur qui contient la macro. Avec ActiveWorkbook, si l'utilisateur trouve le temps de traitement trop long et va faire un tour sur un autre classeur... badaboum ta macro utilise le classeur actif et vient y inscrire des choses dessus (déroulement de ta macro).
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/11/2011, 20h01   #5
 
Inscription : février 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 30
Points : -1
Points : -1
merci qwazerty
J'ai fait un essai en virant le with sans la boucle for pour ne plus afficher la première valeur et ça marche. Et en utilisant ThisWorkbook.Sheets("Graphe").Activate ça marche aussi...

Par contre, lorsque je veux remettre ma boucle qui tourne sur le contenu de plusieurs cellules, ça plante à nouveau sur la ligne ActiveSheet... ci dessous ma boucle For...

Code :
1
2
3
For i = 1 To y
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Semaine").PivotItems(Cells(9 + i, 1)).Visible = False
Next
Une idée ?

Merci encore
November-Oscar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web