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 06/01/2012, 14h24   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 0
Points : 0
Par défaut erreur débogage 9, travail avec 2 fichiers

Bonjour,

Je vous écris car je deviens ...fou

En effet j'ai eu en tête de créer une macro VBA utilisée sous Excel, que j'ai testée et qui fonctionne (cool).

Etant donné que cette macro doit simplifier la tâche de plusieurs personnes, j'ai voulu l'installer sur leurs différents postes (même OS, même office).

Chez certains ça fonctionne (youpi) chez d'autres non, et ça me sort une erreur que je ne comprend pas.

Je pars d'un fichier excel "temporaire" que j'enregistre sous le nom "brut" celui-ci va faire un prétraitement et va ouvrir un fichier excel "travail" afin de récolter les données et mettre en forme le résultat tout en enregistrant le fichier dont le nom dépend d'une variable donnée par "travail".

Pour simplifier, j'ai un fichier "temporaire" que j'enregistre sous le nom "brut" (histoire de pouvoir jongler avec mon fichier "travail" car il m'est impossible de savoir à l'avance le nom du fichier temporaire) j'ouvre et utilise le fichier "travail" afin de compléter le fichier "brut" et l'enregistrer avec le nom "résultat X" dont X dépend de la donnée transmise par l'utilisateur.

Je fini par supprimer le fichier "brut" et je ferme "travail" afin de garder en focus "résultat X"

Donc j'utilise des fonctions telles que Windows("nom_fichier").activate et Sheets("nom_feuille").select pour faire mon traitement et tout fonctionne bien... sauf pour 2 postes.

L'erreur que j'ai "l'indice n'appartient pas à la sélection" intervient quand je reprend le focus de "brut" après avoir fait le traitement dans "travail"

Windows("brut.xls").activate est surligné

Et je ne comprend pas car :
1. cela fonctionne sur d'autres postes
2. le fichier "brut.xls" est bien ouvert au moment de l'exécution de la macro
3. je ne vois aucun rapport avec un indice, je n'utilise pas de tableau ou quoique ce soit

bref, je ne fais que des "save" "open" "windows().activate" et sheet().activate et à la fin kill et close




________________
Période 1 : fichier 'temporaire' ouvert
Période 2 : fichier 'temporaire' enregistré comme "brut" -> traitement
Période 3 : fichiers "brut" et "travail" sont ouverts -> traitement
Période 4 : fichier "brut" enregistré comme "résultat X", fichier "travail" tjs ouvert
Période 5 : fichier "brut" supprimé, fichier "travail" fermé, fichier "résultat X" en focus
Muggsy_68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h29   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Alors déjà, il faut éviter de travailler avec des Activate, Select... Il faut utiliser des variables objets !
Ensuite, il vaut mieux travailler avec Worksheets qu'avec Windows.

Enfin, si tu ne nous donnes pas ton code, on ne peut pas t'aider !
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h35   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 0
Points : 0
Merci pour la réponse même si ça ne change rien au problème d'utiliser ou non activate.

Car ça n'explique pas pourquoi avec la même config, la macro ne fonctionne pas chez uns et fonctionnes chez d'autres.

J'oubliais, je travail avec le classeur de macro personnel ce qui permet à la macro de fonctionner partout.

Je vais voir comment afficher le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
    Windows("Travail.xls").Activate
    Sheets("Feuil2").Select
 
    nom = Range("Z1").FormulaR1C1       ' oui c'est moche mais j'ai du bidouiller
    data1 = Range("Z2").FormulaR1C1
    data2 = Range("Z3").FormulaR1C1
    data3 = Range("Z4").FormulaR1C1
    data4 = Range("Z5").FormulaR1C1
 
    Range("Z1").FormulaR1C1 = ""  'Remise à l'état initial
    Range("Z2").FormulaR1C1 = ""
    Range("Z3").FormulaR1C1 = ""
    Range("Z4").FormulaR1C1 = ""
    Range("Z5").FormulaR1C1 = ""
 
    ''''''''''''''''''''''''''''''''''
    nom_fichier = "Résultat" & nom & ".xls" 
 
    Windows("Brut").Activate
    Sheets("Brut").Select    'ceci étant le nom de la feuille
Ce code est lancé depuis "travail.xls" après avoir cliqué sur le bouton

l'erreur surligne la ligne 20

PS : à la base je voulais utiliser "FSO" sauf que j'avais systématiquement des erreurs vba, donc j'ai utilisé activate et select qui eux, fonctionnaient
Muggsy_68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h46   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Si ça change beaucoup de chose, tu n'aurais pas de problème avec un code propre. Plutôt que de travailler directement sur des objets Classeur, Feuille, tu simules des actions de l'utilisateur dans Excel, du coup, tu es très dépendant de la configuration d'Excel, de l'environnement, de la rapidité de la machine...
D'ailleurs, normalement, tu ne devrais même pas avoir besoin de sauver ton fichier temporaire.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 14h52   #5
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 0
Points : 0
Le fichier temporaire vient d'un autre logiciel, et change de nom à chaque fois.

Etant donné que je devais travailler entre deux fichiers, il me fallait bien fixer le nom des classeurs pour les activer à ma guise.

Encore une fois, le parc informatique est le même, XP, excel 2003, même ram etc.

S'il faut que je recode tout, j'aimerai savoir par quel miracle sur 3 pc ça marche et pas sur 2 autres.
Muggsy_68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h03   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Je suppose que certains PC affichent les extensions et d'autres non, du coup, tu auras parfois
Code :
Windows("Brut").Activate
et parfois
Code :
Windows("Brut.xls").Activate
Si tu travaillais de la façon suivante, tu n'aurais pas le problème :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim wbTravail As Workbook
Dim wbTemp As Workbook
Dim wsTravail As Worksheet
Dim wsTemp As Worksheet
 
Set wbTravail = ThisWorkbook
Set wbTemp = Workbooks.Add
Set wsTravail = wbTravail.Worksheets("Feuil1")
Set wsTemp = wbTemp.Worksheets("Feuil1")
 
'Maintenant tu peux travailler sur les classeurs sans les activer et même sans sauver le classeur temporaire
 
'Par exemple effacer une cellule
wsTemp.Range("A1").ClearContents
 
'Recopier une cellule
wsTemp.Range("A1").Value = wsTravail.Range("C2").Value
 
'...
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h08   #7
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 0
Points : 0
Juste avant, j'ai essayé en remplaçant tous les windows par worksheet, et bizarrement, j'obtenais la même erreur que sur les autres postes.

Ce que je ne comprend pas c'est que à chaque fois que j'utilise activate j'écris (nom_fichier.extension) alors pourquoi au premier changement de focus c'est bon et pas au deuxième ?

Sinon, par ta méthode, dois-je activer des références pour que VBE détecte l'utilisation des objets ?

PS : Quel noob ! j'avais oublié un .xls pour un windows().activate

du coup, comme tu l'a mentionné, sur les pc affichant l'extension ça ne fonctionnait pas

Merci merci
Muggsy_68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h22   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Pardon, il fallait remplacer Windows par Workbooks.
Et pas besoin d'extension pour les objets Excel de base comme les Workbooks, Worksheets, Range... D'ailleurs tu les utilises déjà, mais en leur appliquant uniquement des Select, Activate au lieu de les attribuer à des variables.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h26   #9
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 5
Points : 0
Points : 0
en fait, dans mon post je disais que j'avais windows("brut.xls").activate de surligné, mais c'était bel et bien "brut" j'avais oublié un .xls

et comme mon pc, a les extensions masquées, cela fonctionnait quand même.

En tout cas merci pour le coup de main
Muggsy_68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h30   #10
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Du coup, tu peux mettre le post en résolu...

Par contre, garde en tête mes conseils, je ne disais pas ça pour t'embêter. Je comprends que tu ne veuilles pas tout refaire ce que tu as déjà fait, mais pour la prochaine fois, je t'assure que ça simplifiera ton code, le rendra plus rapide, moins buggué, moins buggué et surtout moins buggué...
Je ne suis pas le seul à hurler dès qu'il voit un Range("A1").Select dans du code
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup 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 04h20.


 
 
 
 
Partenaires

Hébergement Web