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
Bonjour à tous,

Je suis très novice en vba et Excel en général. Ayant laborieusement réussi à écrire une macro, je suis maintenant en plein désespoir parce que je n'arrive pas à l'exécuter.
Quand je clique sur la flèche, on me demande d'entrer un nom de macro et ça m'en créer une nouvelle.
En plus, dans l'onglet "affichage"-->"macro", ma macro n'apparait pas...

Je dois faire quoi???

Merci



A voir également:

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
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
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
1
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 13/05/2011 à 16:48
re
RQ5.
While Indice < 2 Or F <= TotFeuil
est ce que ça ne serait pas
While Indice < 2 And F <= TotFeuil
si oui, il y a d'autres while du même genre
0
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:55
RQ6. quand c'est bon pour D2, on peut automatiser le remplissage de D2:D20
0
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 à 17:57
RQ7. le classeur B doit etre ouvert bien sur
0
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
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
1
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
RQ. en reflechissant un brin de plus, les variables Lig et Col, sont elles encore utilisées? ( à vérifier)
0
b finalement j'avais changé la ligne de la fin en cells(lig,col)...
Et Lig me sert surtout pour chercher les valeurs sur la même ligne dans les deux feuilles de ClasseurA. Mais je suis preneuse d'une autre solution.

Je vais tenter d'adapter à mon fichier ce que tu m'as dit.

Merci
0
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
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
0
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é :
plage=range([D2],[D65536].end(xlup).row)
mais j'ai comme erreur de compilation "constante requise"
Comment je pourrai y remédier?
0
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
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

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
1
re,

je ne sais pas si tu a testé ton bout de code mais dans ma macro ça me donne toujours une erreur d'exécution :
"1004:la méthode range de l'objet Worksheet a échoué" au niveau de la ligne ForEach
J'ai beau chercher dans l'aide et sur le net, je ne vois pas comment y remédier...

Merci
0
Finalement c'est bon, j'ai pu contourner le problème en mettant le code dans un "with". je comprend pas trop le pourquoi de l'erreur précédente mais ça marche.

Merci beaucoup pour ton aide!
0
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
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 ...
0
oui j'ai bien vérifier tout ça et tout va bien jusqu'au for each...
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...
0
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
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)
0
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
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ClasseurA:http://cjoint.com/?AEnp9PjsNVp
ClasseurB:http://cjoint.com/?AEnpleyezm
0
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
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
0
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
While Indice < 2 Or F <= TotFeuil
le 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.
0
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")???
0
ok! le petit grain de sable qui enrayait toute la machine ^^

Merci beaucoup
0
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
c'est quand même mieux de savoir pourquoi .....
bonne suite
0