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 07/03/2010, 14h56   #1
Invité de passage
 
Inscription : mars 2010
Messages : 8
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 8
Points : 3
Points : 3
Par défaut Objets, Set, .Activate et d'autres horreurs

Bonjour à tous.

Je commence en cours les objets, et je m'y perds !

Exercice pour Mardi :
Ecrire une procédure exercice1b qui successivement choisit une cellule aléatoirement dans la plage A1:J10 de la feuille active, attend 2 secondes et la colore avec une couleur aléatoire en faisant appel à la procédure exercice1a.


Voiçi la procédure exercice1a (qui fonctionne ) :
Code :
1
2
3
Sub exercice1a()
    ActiveCell.Interior.ColorIndex = Int(Rnd() * 49 + 1)
End Sub
Et voiçi ma procédure exercice1b (qui ne fonctionne pas ) :
Code :
1
2
3
4
5
6
7
8
Sub exercice1b()
    Dim rg As Range, ce As Range
    Set rg = Range("A1:J10") 'indique que rg est dans telle série de cellules
    Set ce = rg.Cells(Int(Rnd() * 9 + 1), Int(Rnd() * 9 + 1)) 'rg.Cells est la liste des cellules qu'elle contient
    ce.Activate
    Application.Wait Now + TimeValue("0:00:02") 'attend 2 secondes
    Call exercice1a
End Sub
Erreur affichée : "Erreur d'execution '1004' : Erreur définie par l'application ou par l'objet"

Note importante : On est obligés d'utiliser les syntaxes relatives aux objets.

Pourquoi ça ne marche pas ?
Merci d'avance.

Kwick
Kwick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2010, 16h53   #2
Membre Expert
 
Inscription : juillet 2007
Messages : 2 134
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 2 134
Points : 2 154
Points : 2 154
Salut Kwick et le forum
Citation:
Pourquoi ça ne marche pas ?
Parce que ça n'a pas de jambes

Chez moi, ça fonctionne. Donc, difficile de t'aider.

Juste une remarque : Tu travailles avec ActiveCell => ça t'oblige à utiliser des Sélect/Activate).
- Il me semblerait plus judicieux de transmettre le paramètre ce à la seconde macro, soit en tant qu'adresse, soit en tant que cellule.
- Les Select/Activate ont quelques limitations, entre autres de ne pouvoir fonctionner correctement si elles concernent une plage d'une autre feuille que celle liée au module de classe "feuille" dans laquelle est le code.
- Ces instructions, non contentes de rendre plus illisible le code, ralentissent notablement son fonctionnement.
A+
Gorfael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2010, 16h55   #3
Membre Expert
 
Avatar de supersnail
 
Homme
Inscription : novembre 2006
Messages : 1 395
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 1 395
Points : 1 971
Points : 1 971
Bonjour,

Ton erreur a lieu sur quelle ligne?
__________________
Toute question technique envoyée en MP ira directement à la poubelle

Un code ne marchera jamais,il n'a jamais reçu la capacité de se déplacer.
Inutile donc de dire "ça marche pas", donnez plûtot des informations précises afin de mieux pouvoir vous aider.


Grand gourou de la -attitude - Sauvons Internet!
supersnail est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2010, 17h11   #4
Inactif
 
Inscription : février 2010
Messages : 517
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 517
Points : 513
Points : 513
Salut,
C'est application.Wait qui réserve parfois des surprises, notamment avec Excel 2007
Privilégie plutôt (pour 2 seules secondes) l'utilisation de la fonction Timer, ainsi :
Code :
1
2
3
4
deb = Timer
   Do While Timer - deb < 2
      DoEvents
    Loop
et tu échapperas aux caprices de la version 2007
babaothe 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 +1. Il est actuellement 07h06.


 
 
 
 
Partenaires

Hébergement Web