Exécution macro excel
Fermé
Melycea
-
Modifié par Melycea le 13/05/2011 à 15:29
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 16 mai 2011 à 17:36
ccm81 Messages postés 10907 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 janvier 2025 - 16 mai 2011 à 17:36
A voir également:
- Exécution macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
9 réponses
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
13 mai 2011 à 16:36
13 mai 2011 à 16:36
re
RQ1. il me semble que la macro remplit LA cellule sélectionnée classeur A feuille 1 colonne D oui/non ?
si c'est non, peux tu me dire qu'est ce qu'elle est censée faire?
RQ2. cette macro doit être lancée par exemple par un bouton, ce que j'ai fait
http://www.cijoint.fr/cjlink.php?file=cj201105/cijlAG3H8D.xls
RQ3. ça plante sur la ligne
où nCol est déclarée integer, alors que la cellule en question feuille 2, contient une lettre
RQ4. tu vas faire une exécution pas a pas de la macro pour cela,
tu mets un point de suivi en marge de la 1° ligne de code de ta macro (clic dans la marge -> gros point marron) , puis tu selectionne D2 (feuille 1) et clic sur OK,
VBA repasse dans le module de la feuille 1, et est pret à executer
F8 pour executer la ligne et en passant au dessus des variables (ici TotFeuille1), tu vois ce qui se passe,
F8 pour exécuter la ligne suivante ....
ça devrait planter sur la ligne nCol
bonne suite
RQ1. il me semble que la macro remplit LA cellule sélectionnée classeur A feuille 1 colonne D oui/non ?
si c'est non, peux tu me dire qu'est ce qu'elle est censée faire?
RQ2. cette macro doit être lancée par exemple par un bouton, ce que j'ai fait
http://www.cijoint.fr/cjlink.php?file=cj201105/cijlAG3H8D.xls
RQ3. ça plante sur la ligne
nCol = ActiveWorkbook.Sheets(2).Cells(Lig, 3)
où nCol est déclarée integer, alors que la cellule en question feuille 2, contient une lettre
RQ4. tu vas faire une exécution pas a pas de la macro pour cela,
tu mets un point de suivi en marge de la 1° ligne de code de ta macro (clic dans la marge -> gros point marron) , puis tu selectionne D2 (feuille 1) et clic sur OK,
VBA repasse dans le module de la feuille 1, et est pret à executer
F8 pour executer la ligne et en passant au dessus des variables (ici TotFeuille1), tu vois ce qui se passe,
F8 pour exécuter la ligne suivante ....
ça devrait planter sur la ligne nCol
bonne suite
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
16 mai 2011 à 10:32
16 mai 2011 à 10:32
re
Pour ne pas compliquer inutilement Remplir, le mieux c'est d'agir sur l'appelant (commandButton_1Click), ça nécessiite quelques modifs chez Remplir (les ActiveCell du début et les cells(Lig,4) de la fin) qui va agir sur une cellule (celle envoyée par CommandButton_1Click) et non plus sur la cellule active
Et c'est CommandButton_1Click) qui va envoyer à Remplir les cellules l'une après l'autre
- pour remplir la plage D2:D20 (modifs sur Remplir et CommandBbutton_1Click)
- n'oublies pas tes modifs persos de ton post 9
http://www.cijoint.fr/cjlink.php?file=cj201105/cijjycW4xi.xls
bonne journée
Pour ne pas compliquer inutilement Remplir, le mieux c'est d'agir sur l'appelant (commandButton_1Click), ça nécessiite quelques modifs chez Remplir (les ActiveCell du début et les cells(Lig,4) de la fin) qui va agir sur une cellule (celle envoyée par CommandButton_1Click) et non plus sur la cellule active
Et c'est CommandButton_1Click) qui va envoyer à Remplir les cellules l'une après l'autre
- pour remplir la plage D2:D20 (modifs sur Remplir et CommandBbutton_1Click)
- n'oublies pas tes modifs persos de ton post 9
http://www.cijoint.fr/cjlink.php?file=cj201105/cijjycW4xi.xls
bonne journée
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
Modifié par ccm81 le 16/05/2011 à 10:56
Modifié par ccm81 le 16/05/2011 à 10:56
RQ. en reflechissant un brin de plus, les variables Lig et Col, sont elles encore utilisées? ( à vérifier)
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
16 mai 2011 à 11:12
16 mai 2011 à 11:12
dans le code de Remplir (d'origine) les variables LIg et Col n'interviennent qu'à la fin pour l'affichage en D2:D20 et ne servent pas dans le reste de la procédure, c'est ce qui m'intrigue
If Indice = 2 Then 'si on a trouvé la valeur Cells(Lig, 4).Value = Workbooks("ClasseurB.xls").Sheets(F).Cells(Y, X) 'met la valeur trouvée dans la WL Else: Cells(Lig, 4).Value = "à référencer dans la base" 'sinon message d'erreur End If
Oui, en fait, c'est parce que je ne connaissais pas trop la syntaxe pour remplir la cellule(je rappelle que c'est ma première macro ^^). Mais c'est vrai que c'est variable ne sont pas indispensables avec ta solution.
Par contre, pour le remplissage de toutes la colonne, je ne connais pas à l'avance la taille du tableau donc pour déclarer la plage j'ai tenté :
Comment je pourrai y remédier?
Par contre, pour le remplissage de toutes la colonne, je ne connais pas à l'avance la taille du tableau donc pour déclarer la plage j'ai tenté :
plage=range([D2],[D65536].end(xlup).row)mais j'ai comme erreur de compilation "constante requise"
Comment je pourrai y remédier?
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
16 mai 2011 à 15:29
16 mai 2011 à 15:29
re
- désolé pour la RQ de mon post 13, Lig est bien utilisée (quand on ne veut pas voir, on ne voit pas, c'est bien connu)
- c'est au niveau de la colonne A qu'il faut tester le nombre de lignes sinon, tu vas te retrouver avec la plage D1:D2
- en fait on va
1. declarer plage comme une variable chaine (et non plus comme constante)
Dim plage as string
2. fabriquer' la plage D2Dxx avec plage = "D2:D" & derli
le reste ne bouge pas
bonne suite
- désolé pour la RQ de mon post 13, Lig est bien utilisée (quand on ne veut pas voir, on ne voit pas, c'est bien connu)
- c'est au niveau de la colonne A qu'il faut tester le nombre de lignes sinon, tu vas te retrouver avec la plage D1:D2
- en fait on va
1. declarer plage comme une variable chaine (et non plus comme constante)
Dim plage as string
2. fabriquer' la plage D2Dxx avec plage = "D2:D" & derli
le reste ne bouge pas
Private Sub CommandButton1_Click() Dim plage As String, derli As Long Dim c derli = Range("A65536").End(xlUp).Row plage = "D2:D" & derli ' remplir la plage D2:Dxx de la feuille 1 du classeur A For Each c In Range(plage) Call Remplir(c) Next c End Sub
bonne suite
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
16 mai 2011 à 16:57
16 mai 2011 à 16:57
re
j'ai bien testé mon code
je n'ai pas de worksheet dans CommandButton1_Click, qu'as tu écrit exactement?
ça peut provenir de
- variable c ou plage mal déclarée
- variable mal déclarée dans Remplir , j'avais mis Remplir(ce) (sans type)
- autre?
as tu fait un suivi des variables (point d'arrêt et exécution pas à pas) pour vérifier derli et plage
enfin, l'essentiel est que ça marche ...
j'ai bien testé mon code
je n'ai pas de worksheet dans CommandButton1_Click, qu'as tu écrit exactement?
ça peut provenir de
- variable c ou plage mal déclarée
- variable mal déclarée dans Remplir , j'avais mis Remplir(ce) (sans type)
- autre?
as tu fait un suivi des variables (point d'arrêt et exécution pas à pas) pour vérifier derli et plage
enfin, l'essentiel est que ça marche ...
oui j'ai bien vérifier tout ça et tout va bien jusqu'au for each...
voici mon code :
et donc ça marche seulement si j'enlève les cotes de commentaires.
Mais bon, puisque ça marche, je pense que je vais en rester là. Sauf s'il y a vraiment une meilleure solution...
voici mon code :
Private Sub CommandButton1_Click() Dim c As Variant, DerD As Integer, plage As String 'With ActiveWorkbook.Sheets(1) DerF = Range("A65536").End(xlUp).Row plage = "D3:D" & DerD For Each c In Range(plage) Call Remplir(c) Next c 'End With End Sub
et donc ça marche seulement si j'enlève les cotes de commentaires.
Mais bon, puisque ça marche, je pense que je vais en rester là. Sauf s'il y a vraiment une meilleure solution...
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
Modifié par ccm81 le 16/05/2011 à 17:21
Modifié par ccm81 le 16/05/2011 à 17:21
re re
tu as declaré c comme variant, moi je n'avais pas précise de type (si tu y tiens tu le mets de type Range)
tu as declaré c comme variant, moi je n'avais pas précise de type (si tu y tiens tu le mets de type Range)
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
13 mai 2011 à 15:31
13 mai 2011 à 15:31
bonjour
peux tu envoyer ton ficher, avec la macro, par cijoint.fr au format excel 2003, et coller le lien obtenu dans ton prochain message, on y verra plus clair
bonne suite
peux tu envoyer ton ficher, avec la macro, par cijoint.fr au format excel 2003, et coller le lien obtenu dans ton prochain message, on y verra plus clair
bonne suite
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
13 mai 2011 à 18:29
13 mai 2011 à 18:29
re
RQ8. en tenant compte des RQS, j'ai exécuté pour D2, mais est-ce le résultat attendu?
RQ9. si c'est oui voir RQ6
http://www.cijoint.fr/cjlink.php?file=cj201105/cijruOmmN5.xls
bonne soirée
RQ8. en tenant compte des RQS, j'ai exécuté pour D2, mais est-ce le résultat attendu?
RQ9. si c'est oui voir RQ6
http://www.cijoint.fr/cjlink.php?file=cj201105/cijruOmmN5.xls
bonne soirée
Woaw, merci beaucoup pour toutes tes remarques!
Alors ma macro est censée chercher dans les "tableaux croisés" du classeurB une valeur. Et pour cela j'aurai voulu par exemple pour remplir D2 qu'elle cherche la valeur C2 dans les noms de lignes et la valeur Feuil2!C2 dans les noms de colonnes.
Dans mon exemple on avait C2=3 et Feuil2!C2=a et donc on aurait du avoir en D2=aaa
Cette recherche est censée se faire dans toutes les feuilles du ClasseurB, jusqu'à ce qu'on trouve la valeur qui correspond. De plus, j'aimerai qu'elle remplisse toute la colonne au fur à mesure qu'on remplisse le tableau (mais je ne sais pas si c'est possible...)
Je ne connaissais pas du tout le principe du bouton mais en effet, je pense que c'est une bonne chose.
Dans
En fait, le "indice" s'incrémente si on a bien trouvé la valeur. Donc en gros, c'est "tant que" la valeur n'est pas trouvée ou qu'on a pas cherché dans toutes les feuilles.
J'ai pas encore appliquée toutes tes bonnes remarques mais tu auras certainement compris que le résultat dans ton dernier fichier n'est pas celui attendu...
Je vais donc revoir tout ça en appliquant tes remarques pour voir d'où vient le problème.
Merci encore pour ton aide.
Je te tiens au courant de mes avancées.
Alors ma macro est censée chercher dans les "tableaux croisés" du classeurB une valeur. Et pour cela j'aurai voulu par exemple pour remplir D2 qu'elle cherche la valeur C2 dans les noms de lignes et la valeur Feuil2!C2 dans les noms de colonnes.
Dans mon exemple on avait C2=3 et Feuil2!C2=a et donc on aurait du avoir en D2=aaa
Cette recherche est censée se faire dans toutes les feuilles du ClasseurB, jusqu'à ce qu'on trouve la valeur qui correspond. De plus, j'aimerai qu'elle remplisse toute la colonne au fur à mesure qu'on remplisse le tableau (mais je ne sais pas si c'est possible...)
Je ne connaissais pas du tout le principe du bouton mais en effet, je pense que c'est une bonne chose.
Dans
While Indice < 2 Or F <= TotFeuille OR est volontaire puisque c'était pour éviter de chercher dans toutes les feuilles si on a trouvé la valeur ou sinon, ne pas faire de boucle infinie.
En fait, le "indice" s'incrémente si on a bien trouvé la valeur. Donc en gros, c'est "tant que" la valeur n'est pas trouvée ou qu'on a pas cherché dans toutes les feuilles.
J'ai pas encore appliquée toutes tes bonnes remarques mais tu auras certainement compris que le résultat dans ton dernier fichier n'est pas celui attendu...
Je vais donc revoir tout ça en appliquant tes remarques pour voir d'où vient le problème.
Merci encore pour ton aide.
Je te tiens au courant de mes avancées.
Bon je pense avoir résolu tous les problèmes.
Tout d'abord, tu avais effectivement raison à propos des "and" dans mes "while". Parce que je voulais éviter les boucles infinies mais finalement je les avais provoquées...
Ensuite, j'avais oublié les "." dans le "with" à chaque fois que j'appelais une cellule, du coup il la cherchait dans le ClasseurA donc forcément, ça ne pouvait pas coller.
Donc pour finaliser, il me faudrait un moyen d'éviter d'avoir à cliquer sur le bouton à chaque ligne.
Est-ce qu'il faut alors que je refasse une boucle où j'intègrerai cette macro (ou du moins la partie avec le premier "while")???
Tout d'abord, tu avais effectivement raison à propos des "and" dans mes "while". Parce que je voulais éviter les boucles infinies mais finalement je les avais provoquées...
Ensuite, j'avais oublié les "." dans le "with" à chaque fois que j'appelais une cellule, du coup il la cherchait dans le ClasseurA donc forcément, ça ne pouvait pas coller.
Donc pour finaliser, il me faudrait un moyen d'éviter d'avoir à cliquer sur le bouton à chaque ligne.
Est-ce qu'il faut alors que je refasse une boucle où j'intègrerai cette macro (ou du moins la partie avec le premier "while")???
ok! le petit grain de sable qui enrayait toute la machine ^^
Merci beaucoup
Merci beaucoup
ccm81
Messages postés
10907
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 janvier 2025
2 430
16 mai 2011 à 17:36
16 mai 2011 à 17:36
c'est quand même mieux de savoir pourquoi .....
bonne suite
bonne suite
Modifié par ccm81 le 13/05/2011 à 16:48
RQ5.
est ce que ça ne serait pas
si oui, il y a d'autres while du même genre
13 mai 2011 à 16:55
13 mai 2011 à 17:57