Problème de formule non calculée avec Macro VBA
Résolu/Fermé
renan.michel
Messages postés
4
Date d'inscription
jeudi 7 février 2013
Statut
Membre
Dernière intervention
8 septembre 2014
-
5 sept. 2014 à 20:56
renan.michel Messages postés 4 Date d'inscription jeudi 7 février 2013 Statut Membre Dernière intervention 8 septembre 2014 - 8 sept. 2014 à 16:33
renan.michel Messages postés 4 Date d'inscription jeudi 7 février 2013 Statut Membre Dernière intervention 8 septembre 2014 - 8 sept. 2014 à 16:33
A voir également:
- Problème de formule non calculée avec Macro VBA
- Formule si et - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Formule excel moyenne - Guide
- Macro word - Guide
6 réponses
borntobealive
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
5 sept. 2014 à 22:36
5 sept. 2014 à 22:36
slt,
Je vois pas la photo (mais ça fait rien).
Je pense que le probleme vient de ta façon d'écrire la formule dans ta macro. il ne faut pas oublier que tant que tu est dans les guillemets, vba ne cherche pas à comprendre ce qu'il y a il se contente d'écrire. Dès lors "cells(bla,bla)" n'a plus aucun sens.
heureusement vba a un outil pour concatener les string : &
De plus je suppose que tu veux les addresse (genre "A1") de tes cells et avec ce que tu as écris VBA ne va pas comprendre nom plus donc il faut lui présciser que tu veux mettre une adresse.
donc tu peux remplacer ta formule par :
PS : pour gagner du temps les select et les activate sont à banir, ça ralentit beaucoup ton code et il vaut mieux prendre tout de suite les bon reflexes :
Je vois pas la photo (mais ça fait rien).
Je pense que le probleme vient de ta façon d'écrire la formule dans ta macro. il ne faut pas oublier que tant que tu est dans les guillemets, vba ne cherche pas à comprendre ce qu'il y a il se contente d'écrire. Dès lors "cells(bla,bla)" n'a plus aucun sens.
heureusement vba a un outil pour concatener les string : &
De plus je suppose que tu veux les addresse (genre "A1") de tes cells et avec ce que tu as écris VBA ne va pas comprendre nom plus donc il faut lui présciser que tu veux mettre une adresse.
donc tu peux remplacer ta formule par :
'je sais c'est un peu lourd mais si tu veux continuer à voir la formule dans fx t'as pas le choix Cells(1, 13).Formula = "=DMIN(" & Cells(1,1).adress & ":" & Cells(Last_Line_Cat,5).adress & "," & Cells(1,5).adress & "," & Cells(1,14).adress & ":" & Cells(2,16).adress & ")"
PS : pour gagner du temps les select et les activate sont à banir, ça ralentit beaucoup ton code et il vaut mieux prendre tout de suite les bon reflexes :
'Je laisse le activate sinon tu va devoir rajouter une variable worksheet sur toutes tes range Sheets("Feuil1").Activate Last_Line_Cat = Range("C3000").End(xlUp).Row
borntobealive
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
5 sept. 2014 à 22:45
5 sept. 2014 à 22:45
juste pour savoir un lien quelconque avec un élève des Mines ?
borntobealive
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
Modifié par borntobealive le 6/09/2014 à 11:12
Modifié par borntobealive le 6/09/2014 à 11:12
C'est Pierrick :-) du coup je pense que tu peux me tutoyer sans te poser trop de soucis....
J'ai regarder un peu sur le net la redaction de Dmin : http://office.microsoft.com/en-gb/excel-help/dmin-HP005209062.aspx et je pense qu'on a pas écrit tout à fait les bons trucs.
Il attendpour field un nom de colonne et nous on lui donne une adresse. dit moi si ça marche mieux avec ça :
PS : fais gaffe avec les TCD, c'est très lourd pour VBA de les detruire et de les reconstruire (l'applet de mon stage met genre 2 grosses minute à s'ouvrir à chaque fois avec 8000 ligne donc je sais pas combien t'en a mais fais gaffe c'est vite ingérable et passablement chiant)
plutôt le le TCD je te conseil le listObject, c'est plus facile que le TCD et diablement éfficace : http://www.excelabo.net/excel/tableaux_vba
cordialement,
N'oubliez pas de marquez votre post comme résolu !
J'ai regarder un peu sur le net la redaction de Dmin : http://office.microsoft.com/en-gb/excel-help/dmin-HP005209062.aspx et je pense qu'on a pas écrit tout à fait les bons trucs.
Il attendpour field un nom de colonne et nous on lui donne une adresse. dit moi si ça marche mieux avec ça :
Cells(1, 13).Formula = "=DMIN(" & Cells(1,1).adress & ":" & Cells(Last_Line_Cat,5).adress & "," & Cells(1,5).text & "," & Cells(1,14).adress & ":" & Cells(2,16).adress & ")"
PS : fais gaffe avec les TCD, c'est très lourd pour VBA de les detruire et de les reconstruire (l'applet de mon stage met genre 2 grosses minute à s'ouvrir à chaque fois avec 8000 ligne donc je sais pas combien t'en a mais fais gaffe c'est vite ingérable et passablement chiant)
plutôt le le TCD je te conseil le listObject, c'est plus facile que le TCD et diablement éfficace : http://www.excelabo.net/excel/tableaux_vba
cordialement,
N'oubliez pas de marquez votre post comme résolu !
renan.michel
Messages postés
4
Date d'inscription
jeudi 7 février 2013
Statut
Membre
Dernière intervention
8 septembre 2014
6 sept. 2014 à 01:23
6 sept. 2014 à 01:23
Merci beaucoup pour la réponse,
Oui en effet je suis un élève des Mines, ce choix de pseudonyme n'était pas très judicieux, mais je n'aurai jamais pensé tomber sur quelqu'un qui me connaisse. A qui ai-je à faire?
Pour en revenir au code avec vos lignes je suis maintenant confronté à une erreur d'execution 438, "propriété ou méthode non gérée par cette objet".
Mais suite à votre conseil, j'ai mieux saisi le problème de l'adresse de la cellule.
J'ai donc trouvé une première solution temporaire qui consiste à utiliser le code suivant avec un tableau plus grand que celui dont j'ai vraiment besoin:
Cells(1, 13).Formula = "=DMIN(A1:E10000, E1, N1:P2)"
Je n'ai ainsi plus le problème de l'adresse relative à une variable et tout se passe bien, jusqu'à ce que mon tableau devienne trop grand, de plus je dois surement augmenter le temsp de calcul.
Et pour résoudre définitivement le problème, tout en apportant une solution beaucoup plus efficace et élégante, je vais m'orienter vers la création par VBA d'un tableau croisé dynamique qui sera supprimé à la fin de chaque utilisation, il semble que ce soit quelque chose d'assez rapide à créer. Mais je dois encore approfondir le sujet.
Bon weekend
Oui en effet je suis un élève des Mines, ce choix de pseudonyme n'était pas très judicieux, mais je n'aurai jamais pensé tomber sur quelqu'un qui me connaisse. A qui ai-je à faire?
Pour en revenir au code avec vos lignes je suis maintenant confronté à une erreur d'execution 438, "propriété ou méthode non gérée par cette objet".
Mais suite à votre conseil, j'ai mieux saisi le problème de l'adresse de la cellule.
J'ai donc trouvé une première solution temporaire qui consiste à utiliser le code suivant avec un tableau plus grand que celui dont j'ai vraiment besoin:
Cells(1, 13).Formula = "=DMIN(A1:E10000, E1, N1:P2)"
Je n'ai ainsi plus le problème de l'adresse relative à une variable et tout se passe bien, jusqu'à ce que mon tableau devienne trop grand, de plus je dois surement augmenter le temsp de calcul.
Et pour résoudre définitivement le problème, tout en apportant une solution beaucoup plus efficace et élégante, je vais m'orienter vers la création par VBA d'un tableau croisé dynamique qui sera supprimé à la fin de chaque utilisation, il semble que ce soit quelque chose d'assez rapide à créer. Mais je dois encore approfondir le sujet.
Bon weekend
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
borntobealive
Messages postés
138
Date d'inscription
jeudi 17 juillet 2014
Statut
Membre
Dernière intervention
25 février 2019
7
6 sept. 2014 à 11:25
6 sept. 2014 à 11:25
PS : ton erreur survient à quelle ligne ?
renan.michel
Messages postés
4
Date d'inscription
jeudi 7 février 2013
Statut
Membre
Dernière intervention
8 septembre 2014
8 sept. 2014 à 16:33
8 sept. 2014 à 16:33
Mon problème se situe à cette ligne de code, et avec ton nouveau code ça ne fonctionne pas non plus, j'ai toujours une erreur 438, et comme j'ai pas trop de temps, je vais plutôt utiliser des adresses absolues en allant jusqu'à la ligne 20000 (par ce que mon tableau doit grandir avec le temps). Mais merci pour l'aide, et si j'ai le temps je vais lire un peu tout ça sur les ListObject pour voir s'il est possible de faire quelque chose de plus efficace ensuite. Et pouir les tableaux dynamiques je verrai ce que ça donne aussi, j'essayerai de comparer.
En tout cas merci pour m'avoir remis dans la boucle de mails, c'est vrai que j'étais étonné de ne plus avoir de vos nouvelles.
La bise
En tout cas merci pour m'avoir remis dans la boucle de mails, c'est vrai que j'étais étonné de ne plus avoir de vos nouvelles.
La bise