|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
Bonjour à tous,
voilà je n'arrive pas à faire fonctionner cette macro la seule erreur qu'il me dit c'est que j'ai une erreur 424 A quoi cette erreur correspond? Code :
merci |
||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Ludo Inscription : février 2010 Messages : 104 ![]() |
Bonjour,
Sur quelle ligne l'erreur se produit-elle? Et à quoi correspond : Car cela ne fait référence à aucune cellule et donc à aucune valeur.
__________________
Cordialement |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
il ne me met pas la ligne de l'erreur c'est comme ci elle était globale
correspond a la valeur de la ligne correspondant a la colonne f |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
=> Comment une ligne peut-elle correspondre à une colonne?!
...montre-nous la déclaration et l'affectation des variables utilisées, ça permettra d'y voir plus clair. Sinon quand l'erreur se produit appuie sur 'Débogage' pour voir sur quelle ligne elle se produit. |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
je vais reprendre un le problème car je pense mettre mal expliqué
Je cherche à attribuer pour chaque ligne une valeurs situé en colonne L une valeur en fonction de 2 valeurs situé en colonne f et g si f = rejetée et g = 1 alors valeur dans L doit être égale a 2 si f = rejetée et g <> 1 alors valeur dans L doit étre égale a 3 si f <> rejetée alors valeur dans L doit étre égale a 1 et si f="" alors rien je pensais que mon code marcherait mais il me met erreur 424 c tout et je peux pas déboguer |
|
|
00
|
|
|
#6 | ||||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Ok, bon en fait tu es mal parti avec ton code...
Pour désigner la valeur de la cellule situé à l'intersection de la ligne i (dans ton programme, i sera une variable que tu incrémentes à chaque tour pour balayer toute ta colonne) et de la colonne F (dont l'index est 6): Pas besoin de balayer toutes les cellules de ta feuille, contente-toi de la colonne L: Code :
Code :
|
||||
|
|
00
|
|
|
#7 | ||||
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
merci beaucoup pour tes conseils j'en suis arrivé à faire ce bout de code
Code :
Code :
Je crois que j'ai compris il n'arrive pas à prendre la valeur alphanumérique. Mais comment faire pour qu'il utilise une variable num et une alpha pour créer une num |
||||
|
|
00
|
|
|
#8 | ||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Alors j'imagine que c'est avec la première version de ton code
Lève une exception parce que myCell est un objet de type Range et "rejetée" une variable de type String. Tu essaies donc de comparer 2 choses qui n'ont rien à voir. Par contre, ceci fonctionnera très bien pour un test: Car la propriété Text d'un objet Range renvoie bien un type String (le texte de la cellule). Sinon pour la suite des opérations l'exemple que je t'avais donné pour désigner une cellule: n'était qu'un cas général. Dans ce que tu as écrit, tu fais une énumération de toute les cellules contenues dans ta colonne F. En fait, VBA va énumérer toutes les cellules contenues dans ta colonne (qui est une 'collection' de cellules), et va appliquer toutes les opérations entre For Each..In... et Next à chaque cellule appartenant à la collection. Donc tu n'as absolument pas besoin de faire une boucle avec un For i=...To... Cela aurait été utile si tu n'avais pas défini la collection des cellules de ta colonne et que tu les avais donc désigné les unes après les autres par leur numéro de ligne. Pour faire quelque chose de propre, tu peux procéder comme cela: Code :
De plus, dans ce que tu as écrit, pour chaque cellule de la colonne F, tu vas tester toutes les cellules de la colonne G! Or je pense que tu veux juste tester les valeurs des cellules se trouvant sur une même ligne pour les colonnes F et G. Donc pas besoin de l'énumération avec myCell2. Dans l'énumération avec myCell (donc sur la colonne F), tu peux tester les valeurs de la colonne G comme cela: (ou même définir une constante pour désigner la colonne G et accéder à la cellule comme expliqué précédemment). |
||
|
|
00
|
|
|
#9 | ||||
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
Merci beaucoup pour ces explications, je comprend mon pb. mais par rapport
au code je dois toujours le mettre dans une boucle comme ceci : Code :
For Each myCell In ActiveSheet.Cells(i, 6).Value lorsque je met la ligne de code une erreur intervient sur le mot column : constante requise cette ligne de code est censé indiquer l'emplacement de la valeur calculée non? mon code final devrait ressembler à ça ?? Code :
Code :
For Each myCell In ActiveSheet.Cells(i, 6).Value ![]() Code :
|
||||
|
|
00
|
|
|
#10 | ||||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Si tu as d'autres modules dans ce genre à coder en VBA, tu devrais t'y intéresser... Citation:
Pour ce qui est de l'architecture de ton code, je vais te donner une solution (avec des If imbriqués) et je t'invite à bien comprendre comment elle fonctionne (n'hésite pas à poser des questions): Code :
|
||||
|
|
00
|
|
|
#11 | |
|
Office & Excel ![]() ![]() ![]() |
Salut.
Citation:
Code :
Range("L1:L10").Formula = "=IF(F1=""rejetée"",IF(G1=1,2,3),IF(F1="""","""",1))" Si l'on veut figer les valeurs, on ajoutera la ligne Code :
Range("L1:L10").Value = Range("L1:L10").Value L'avantage à procéder de cette façon réside dans le fait que si les conditions évoluent, il suffit de modifier la formule sans toucher à la structure du code VBA. En inscrivant les conditions dans le code avec des boucles et des IF, on doit modifier "beaucoup" de code pour le faire correspondre aux nouvelles conditions.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) --------------- Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP Vous souhaitez rédiger pour DVP? Contactez-moi Amoureux de la langue française? Venez corriger nos ressources VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA... N'oubliez pas de VOTER (en bas à droite d'un message) --------------- |
|
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
Merci pour vous solution mais il semble y avoir quelques problèmes
Sclarckone j'ai lancer ton bout de code mais le résultat n'est pas le bon il m'affiche bien dans la colonne L un résultat mais seulement pour la ligne 1 et il ne correpond pas à un des résultats mis en place -4142 je continue à lire ton code pour le comprendre et voir la faute . pourquoi mais tu et pas aussi Pierre j'ai aussi essayé ton bout de code il me prend bien un résultat pour toutes les lignes mais ne correspond pas au résultat attendu N/A au lieu de 1,2 ou 3 |
|
|
00
|
|
|
#13 | |
|
Office & Excel ![]() ![]() ![]() |
Citation:
Le code ne fait que placer une "bête" formule utilisant SI() en L1:L10. Si tu n'ajoutes pas la deuxième ligne de code, tu verras la fonction dans ta feuille Excel. Peux-tu copier cette fonction et la mettre ici? Tu peux aussi faire un copier/coller exact de mon code, tel que tu l'as essayé? Tu dois aussi bien sûr adapter à ta plage de cellules. Mais sois bien convaincu que c'est la façon la plus simple de résoudre ton problème.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) --------------- Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP Vous souhaitez rédiger pour DVP? Contactez-moi Amoureux de la langue française? Venez corriger nos ressources VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA... N'oubliez pas de VOTER (en bas à droite d'un message) --------------- |
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 692 ![]() |
Bonjour,
Si tu as absolument besoin de passer par VBA, voici un code commenté : Code :
Cordialement. |
||
|
|
00
|
|
|
#15 | ||
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
Pierre,
voyons si j'ai bien compris je dois placer simplement ces 2 lignes dans le code de la feuille et le résultats pour chaque ligne (1 à 10) doit arriver dans la colonne L c'est ça Code :
|
||
|
|
00
|
|
|
#16 |
|
Office & Excel ![]() ![]() ![]() |
Tu dois juste mettre les deux lignes. La seule chose à faire, c'est adapter la plage (Range) qui, dans mon exemple, reprend les cellules L1:L10.
Tu ne dois pas boucler. De plus, tu sors la logique du code VBA, car tu la gères beaucoup plus facilement dans la formule que dans un code VBA itératif.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) --------------- Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP Vous souhaitez rédiger pour DVP? Contactez-moi Amoureux de la langue française? Venez corriger nos ressources VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA... N'oubliez pas de VOTER (en bas à droite d'un message) --------------- |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
C'est bon j'ai trouver mon bonheur
Vraiment MERCI BEAUCOUP à vous tous je garde vos solutions et vos conseils de côté et je vais bien les regarder afin de mieux comprendre. ![]() Juste une question pour Pierre pourquoi préconise-t-on plus la formule conditionnelle à du codage en VBA juste pour ça simplicité par rapport à l'autre méthode ou y a-t-il autre chose ? |
|
|
00
|
|
|
#18 | |
|
Office & Excel ![]() ![]() ![]() |
Citation:
Avec une solution qui amène des IF...END IF imbriqués, tu as un code "à rallonge"... et encore, tu as ici un ensemble de conditions simples. Imagine que tu les complexifies un tout petit peu, et tu es parti pour la gloire. Si, demain, tu dois tenir compte des rejetée, acceptée, En attente, tu vas te casser les dents avec ton code. Avec celui que je propose, tu modifies simplement la formule que tu mets, par code, dans les cellules de L1:L10. De plus, tu peux créer cette formule dans Excel (avec la vérification par Excel de la syntaxe) puis la récupérer facilement via la fenêtre d'exécution en VBA pour l'intégrer à ton code. Enfin, les boucles, c'est beaucoup plus lent que de placer une formule en Excel puis de convertir en valeurs (pas sur quelques lignes, mais sur des centaines, voire des milliers de lignes, ça compte). Une dernière raison réside dans le fait que nous sommes a priori pas des programmeurs et que, du plus,nous travaillons avec vbA (pour Application, ici Excel). Alors, autant nous laisser aider par Excel plutôt que de partir dans du code VBA qui nous dépasse vite. [EDIT] Plus il y a de lignes de code, plus il y a de risques de bugs... [/EDIT]
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire) --------------- Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP Vous souhaitez rédiger pour DVP? Contactez-moi Amoureux de la langue française? Venez corriger nos ressources VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA... N'oubliez pas de VOTER (en bas à droite d'un message) --------------- |
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Étudiant Inscription : avril 2011 Messages : 75 ![]() |
Merci beaucoup pour ta réponse Pierre
je comprend ta logique je pense utiliser ce principe maintenant Très bonne journée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com