LE NEWSMAGAZINE Nº1 DES NOUVELLES TECHNOLOGIES
124 utilisateurs connectés

Excel : aide pour créer une macro [Résolu]

papalin le 11 juin 2009 à 18h24
Bonjour,
Sur Excel de Office Xp ou 2000, je demande de l’aide pour écrire une macro "s'executant" sans bouton de commande » sous une condition.

-Feuille active « Machin » (ou si cette feuille est activée depuis l'onglet)
-Dans la plage de cellules de « A1 : A50 » si une cellule au moins contient un nombre
-Aucune instruction. :non:

-Sinon dans cette même plage, si toutes les cellules sont vides :
-Afficher une boite dialogue d’avertissement (ou un UserForm). :bounce:


je galère un peu avec les macros.
Merci de votre aide,


-->Message édité par papalin le 15/06/2009 00:30:54<--
Gorfael le 12 juin 2009 à 00h56
Salut
papalin a écrit :
bonjour,
sur excel de office xp ou 2000, je demande de l’aide pour écrire une macro &quot;s'executant&quot; sans bouton de commande &raquo; sous une condition.

-feuille active &laquo; machin &raquo; (ou si cette feuille est activée depuis l'onglet)
-dans la plage de cellules de &laquo; a1 : a50 &raquo; si une cellule au moins contient un nombre
-aucune instruction. :non:

-sinon dans cette m&ecirc;me plage, si toutes les cellules sont vides :
-afficher une boite dialogue d’avertissement (ou un userform). :bounce:
Difficile de répondre à une telle demande : Quand doit-on lancer la macro ?
- À l'activation de la feuille "Machin" ?
- À la désactivation de la feuille "Machin" (quand on change de feuille) ?
Si les cellules de A1:A50 ne sont pas vide (formule ou texte) que doit-on faire (Zéro étant un nombre, il faut le différencier de vide) ?
Si une cellule contient un nombre et qu'on l'efface. Doit-on faire apparaître la boîte à message ?
A+
-------
Plus tu es moins précis, moins les réponses sont plus adaptées!
La qualité et la précision de la réponse sont proportionnelles à celles de la question, et la conditionne.
willyplaisir le 12 juin 2009 à 13h17
bonjour à tous,

te propose cette macro toute simple à copier dans la feuille Machin

lance l'éditeur Alt F11: et clique 2 fois dans la feuille Machin située dans la fenêtre de gauche.

Private Sub Worksheet_Change(ByVal Target As Range)
Range("A1:A50").Select

With Selection
For Each cel In Selection
If IsEmpty(cel) Then v = v + 1
Next
End With

If v = 50 Then MsgBox "zone A1:A50 vide", vbCritical
End Sub

:salut:

papalin le 12 juin 2009 à 23h52
Bonjour,
pour répondre à Gorfael et pour tenter d'être plus précis : dans un classeur j'ai plusieurs feuilles dont une que j'appellerai par exemple "PAINS" et qui liste une quantité de petits pains.
Quand la liste de petits pains est épuisée (cette liste étant masquée par nécessité et numérotée de 1 à x..)je voudrais que la macro se lance (Msgbox) m'informant qu'il n'y a plus de petits pains. Je voudrais aussi que le lancement de cette macro se fasse à chaque fois qu'un autre utilisateur ouvre la feuille "PAINS" pour l'en informer et qu'elle s'arrête en changeant de feuille.
Important : si j'ouvre une feuille nommée "CROISSANTS" la macro ne doit pas se lancer. Uniquement quand j'ouvre la feuille "PAINS".
Je parle de cellule vide (sans mention, ni formule), pas d'une valeur égale à zéro. La macro proposée par willyplaisir m'envoie un message d'erreur, un bug semble-t-il.
j'espère qu'une telle macro est possible même si elle semble surperflue et qu'il y a d'autres solution de message d'information. Je tiens à mon message sous forme de MsgBox
Merci à tous



-->Message édité par papalin le 12/06/2009 23:59:47<--
willyplaisir le 13 juin 2009 à 09h56
re,
lances l'editeur Alt F11
macro à copier dans la feuille "Pains"

'--------------------------
Private Sub Worksheet_Activate()
Range("A1:A50").Select
v = 0
With Selection
For Each cel In Selection
If IsEmpty(cel) Then v = v + 1
Next
End With

If v = 10 Then MsgBox "Zone A1:A50 vide", vbCritical
End Sub

'----------------------
papalin le 13 juin 2009 à 23h19
Willyplaisir,
J'ai copié collé ta macro dans l'éditeur.
De retour dans la feuille "PAINS" quand j'efface le contenu de la liste de A1:A50, pas de lancement de la macro.???
Quand je quitte la feuille "PAINS" et que je la resélectionne, la plage A1:A50 est sélectionnée par la macro qui se lance puis j'ai un message d'erreur :"erreur d'execution 429 : "un composant activeX ne peut pas créer d'objet". Mystère ! + bug d'Excel !
Je vais essayer de "traduire" chaque étape de ta macro :
1 -..... WorkSheet_Activate : feuille active à l'écran ....?
2 -Range("A1:A50").Select : sélection de la plage de cellules...?
3 -v = 0 : valeur égale zéro ?
4 -With sélection : avec cette sélection ????
5 - For Each cel In Selection : comprends pas
6 - Is Empty (cel)Then v = v+1 : là non plus
7 - Next : suivant ?
8 - End with : fin avec la sélection ??
9 - if v = 10 Then MsgBox etc... : si v (valeur?)=10 affichage de Msgbox d'avertissement.Mais que signifie le chiffre 10 ?
Merci
*Là je prends carrément des cours ...!
A+



-->Message édité par papalin le 14/06/2009 09:14:07<--
willyplaisir le 14 juin 2009 à 10h55
salut,
1 -..... WorkSheet_Activate : macro qui s'active dès que tu selectionnes la feuille pains

2 -Range("A1:A50").Select : sélection de la plage de cellules

3 -v = 0 : compteur mis à zéro

4 -With sélection : avec cette sélection plage A1:A50

5 - For Each cel In Selection :boucle,pour chaque cellule de la selection A1:A50

6 - Is Empty (cel)Then v = v+1 : si la cellule est vide alors incrémente la variable v

7 - Next : suivant , on recommence la boucle For

8 - End with : on quitte la sélection

9 - if v = 10 Then MsgBox etc... : si v =10 alors affichage de Msgbox d'avertissement.
pardonnes moi j'ai crée chez moi la macro avec la plage A1:A10 d'où le chiffre 10 nombres
donc tu dois mettre le chiffre 50
--------------

macro à copier dans la feuille "Pains" en lançant l'éditeur

'--------------------------
Private Sub Worksheet_Activate()
Range("A1:A50").Select
v = 0
With Selection
For Each cel In Selection
If IsEmpty(cel) Then v = v + 1
Next
End With

If v = 50 Then MsgBox "Zone A1:A50 vide", vbCritical
End Sub
'---------------------------

chez moi ,ce programme fonctionne bien. quelle version d'Excel as tu?

quant à ton bug:
http://faq.vb.free.fr/index.php?question=40

Pourquoi j'obtiens l'erreur 429 après l'installation de mon application ?
Symptômes : Après une installation d'une application VB sur un poste, l'exécution de l'application peut générer une erreur 429 : ActiveX ne peut créer l'objet. Cette erreur signifie qu'un composant n'est pas référencé dans la base de registres. Dans la plupart des cas le composant en question est manquant dans le package d'installation. Le problème se situe au niveau de la détection du composant manquant.

Solutions : Plusieurs démarches sont possibles :

Utiliser Process explorer (disponible sur http://www.sysinternals.com) qui permet de lister les DLL en cours d'utilisation par l'application depuis un poste sur lequel l'application fonctionne puis de comparer la présence et la version de celles-ci sur le poste défaillant.
utiliser Regmon (disponible sur http://www.sysinternals.com) pendant l'exécution de l'application sur le poste défaillant afin de surveiller les opérations sur la base des registres afin de voir quel CLSID est absent dans la base des registres.
Ces fiches techniques peuvent également être utiles dans la résolution de ce problème :

Q177394 HOWTO: Troubleshoot Run-Time Error '429' in DCOM Applications
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q177394

Q244264 INFO: Error 429 When Automating Office Applications
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q244264

http://www.developpez.net/forums/d112252/autres-langages/general-visual-basic(...)


:salut:



-->Message édité par willyplaisir le 14/06/2009 11:33:56<--
papalin le 14 juin 2009 à 18h38
Salut,
merci pour tes explications et les liens sur le web. Tu es au top dans la création de macros!
Je m'y intéresse depuis peu et je me sers beaucoup de l'outil "créer une macro". A partir de là j'essaye de comprendre les étapes pas à pas dans l'éditeur et j'arrive à faire des petits trucs, je trouve ça intéressant !
Connais-tu des livres ou un site qui donne des exemples que l'on adapte pour ses besoins personnels ? J'ai acheté 2 livres pour programmmer sous Excel mais c'est un peu (beaucoup) du chinois ! Ma version d'Excel : office Xp. Je vais essayer ta macro sur une autre version : Excel 2000 (boite étudiant) que je possède.
merci A+
willyplaisir le 14 juin 2009 à 20h46
bonsoir,

si cela t'interesse, voici des sites pour apprendre et comprendre et réaliser tes prochains programmes.


http://dominiquemaniez.developpez.com/access/fonctionsVBA/
http://www.excel-exercice.com/
http://bvrve.club.fr/Astuces_Michel/accueil.htm
http://bvrve.club.fr/Astuces_Michel/05excelvba.php
http://www.cathyastuce.com/excel/form_qqesfonctions.php
http://www.trucsastuces.com/vslist.php?softid=2
http://www.lecompagnon.info/excel/donnees.htm
http://www.pcastuces.com/pratique/bureautique/excel/default.htm
http://www.excel-downloads.com/
http://www.excel-pratique.com/
http://users.skynet.be/visual-basic/fonctions.html
http://silkyroad.developpez.com/Excel/MiseEnFormeConditionnelle/
http://www.cbanque.com/excel/mise+en+forme.php
http://www.top-assistante.com/bureau/excel/mfc2.php
http://www.info-3000.com/excel/index.php
http://www.excel-downloads.com/forum/archive/f-4-p-24.html
http://www.simple-excel.com/index.htm
http://dj.joss.free.fr/faq.htm
http://office.microsoft.com/fr-fr/excel/HP051993911036.aspx?pid=CH06252775103(...)
http://www.top-assistante.com/bureau/excel/tcd/tcd3.php
http://mvergriete.club.fr/excel.html
http://bvrve.club.fr/Astuces_Michel/excelvba.php
http://www.medsyn.fr/perso/g.perrin/cyberdoc/excel/main.htm
http://excel.developpez.com/
http://www.info-3000.com/vbvba/index.php
http://officeassistant.ibelgique.com/excel_vba.html
http://www.excelabo.net/
http://ericrenaud.fr/
http://www.excel-online.net/index2.htm
http://www.excel-online.net/

bonnes lectures et conserves ces sites dans tes favoris EXCEL

:salut:
Gorfael le 14 juin 2009 à 21h43
Salut papalin et le forum
quand la liste de petits pains est épuisée (cette liste étant masquée par nécessité et numérotée de 1 à x..)
Et ça signifie ? Je pose souvent des questions qui semblent idiotes, mais quand on explique un problème à travers des postes, souvent on oublie que ni le fichier, ni la manière de travailler ne sont accessibles, et que l'évidence, ne l'est que pour celui qui connaît tout du problème, et pas quelques infos.

Comme willyplaisir a commencé à répondre, je vais me servir de ses idées. : la colonne A de "pains" contient le nombre de pains. les cellules des lignes 1 à X contiennent des infos et le fait qu'elles soient vides signifie que le lot de pain est épuisé.
La Msgbox doit être visualisée si :
- la liste devient vide
- on entre dans la feuille "PAINS" et que la liste est vide
- on sort de la feuille "PAINS" et que la liste est vide :
<Alt>+<F11> => en haut à gauche dans Projet-VBA Project, tu doubles-cliques sur le module "ThisWorkBook" et tu colles les macros suivantes :
'******** sous-programme commun ***************************************
Sub test_Liste()
'déclarations =====================
Dim Cel As Range 'cel est une plage de cellule
Dim F As Worksheet 'f est une feuille de calcul
'M.E.I ============================
Set F = Sheets("PAINS") 'initialisation de F
'Traitement =======================
For Each Cel In Range(F.[A1], F.[A65536].End(xlUp))
'pour chaque cellule de F de A1 à dernière non vide en A
If Not (IsEmpty(Cel)) Then Exit Sub
'si cel n'est pas vide, arrêter la macro
Next Cel
'cel suivante
MsgBox "Pains épuisés", vbCritical + vbOKOnly, "Pénuries"
'boîte à message
End Sub

'******** on entre dans la feuille ************************************
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "PAINS" Then
'si la feuille concernée est "PAINS"
Call test_Liste
'appel du sous-programme
End If
End Sub

'******** Une cellule de la feuille est passée en mode édition ********
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "PAINS" And Not (Intersect(Target, Range("A:A")) Is Nothing) Then
'si la feuille concernée est PAINS et la cellule appartient à colonne A
Call test_Liste
'lancer le sous-programme
End If
End Sub

'******** on sort de la feuille **************************************
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "PAINS" Then
Call test_Liste
End If
End Sub
Tu testes

Pour apprendre, il y a les macros "apprentissage" (Outils>>Macro>>Nouvelle Macro)

et le fait de faire un sujet le plus précis possible
- les données (adresses des plages, nom des feuilles)
- ce qu'on voudrait que la macro fasse
- le but de la macro.
Ces deux dernières infos peuvent permettre de te proposer une autre méthode de raisonnement, pour atteindre ton but.
Des données précises te permettront de savoir quelles instructions concernent quelles données, et donc de comprendre ce que fait la macro (même non renseignée), et de l'adapter correctement.
A+
-->Message édité par Gorfael le 14/06/2009 21:52:36<--
-------
Plus tu es moins précis, moins les réponses sont plus adaptées!
La qualité et la précision de la réponse sont proportionnelles à celles de la question, et la conditionne.
papalin le 15 juin 2009 à 00h20
Salut Gorfael et les autres !
Pour te répondre : ta question n'était pas idiote.
Merci pour ton aide. En te basant sur l'aide de Willyplaisir tu as parfaitement compris et résolu mon problème.
J'ai très légèrement modifié la ligne "traitement" du sous programme commun :
For Each Cel In Range(F.["A1:A50"])
pour cibler spécifiquement la plage de cellule qui concerne mon travail et retiré la partie "On sort de la feuille". Et le programme fonctionne exactement comme je le voulais. Merci encore :)
PS Je conserve précieusement tout ton programme et celui de Willyplaisir pour le décortiquer et apprendre.
A + papalin :salut:
-->Message édité par papalin le 15/06/2009 00:29:34<--


À PROPOS DU FORUM MICRO HEBDO

LES FORUMS THÉMATIQUES ET TECHNIQUES

LES FORUMS GÉNÉRAUX

ARCHIVES DU FORUM

publicité
01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Nous contacter  |  Charte de confiance  |  Voir notice légale

01net.  -  01men  -  RMC  -  BFM Radio  -  BFM TV  -  TousLesPodcasts  -  01informatique.fr  -  Association RMC-BFM
Tous droits réservés © 1999 - 2009 Internext - 01net.