|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Bonjours je suis actuellement étudiant en mécanique et production et je suis en train de faire un petit module Excel pour me faciliter la vie. Malheureusement je débute tout juste et certaines fonctions me donnent du file retordre...
En gros pour ceux qui connaissent les ajustements arbre alésage, je fais une macro qui automatise le système. C'est plus rapide et plus sûr que de se référer à 3 tableaux en même temps ^^ Donc voila dans une colonne de mon tableau se trouve dans toute les cellules une valeur plus delta (ex: -1+D), et je souhaite remplacer le "+D" par rien ("") pour ensuite utilisé la valeur (ici -1) dans un calcul. Je suis alors tombé sur Strings.replace qui apparemment résout mon problème mais ça marche toujours pas et je viens de passer quelque heures sur la question. Voici la partie du code concerné: Code :
Voila j'espère que vous pourez m'aider et je vous en remercie d'avance. Désolé pour le manque de clarté.. Cordialement |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Hervé SilveInscription : août 2010 Messages : 774 ![]() |
Bonjour,
Peut être comme ceci ? (pas testé) : Code :
|
||
|
|
10
|
|
|
#3 |
|
Membre chevronné
![]() Architecte Inscription : mai 2002 Messages : 1 057 ![]() |
Il faudrait que tu nous montres le contenu des cellules.
En pas à pas, que donne le contenu de ta variable après StringReplace ? Il peut y avoir des problèmes liés au format des cellules (numérique, texte, scientifique)? Pour la propreté de la programmation, il vaut mieux placer les déclarations en début de programme et indenter les instructions. Bonne année deux mille douce |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Bonjour,
Peux-tu préciser où se situe ton problème : ça ne se lance pas ? ça se lance mais il y a un bug ? pas de bug mais ça ne fait pas ce que tu veux ? Et n'oublie pas quand tu écris du code d'utiliser la balise (en appuyant sur le # dans l'éditeur)
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#5 | ||
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Merci pour vos réponse, j'ai tester sa ne marche pas non plus donc voici le worksheets concerné:
en rouge les colone 18,20 et 23. en vert les valeur de Delta (D). et voici le worksheet ou j'ai les donné entré et sortie: En rouge ce sont les donné d'entré, celle qui nous concerne sont les 3 première donnés. En vert clair j'ai la serie qui correspond a "col" la recherce de la ligne se fait automatiquement avec le diamètre. En Bleu j'ai l'endoit ou s'applique l'erreur. En vert l'endroit ou s'applique ma fonction, il s'agit du EI et il se calcul a partir du ES du code du mon premier poste. l'erreur que j'obtient est une erreur #VALEUR, toute les series marche sauf les serie K, M et N. Merci encore pour votre aide! [hide] Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Pour mieux comprendre ce qui se passe, il faudrait que tu nous dises ce qu'il y a dans Worksheets("Alesages").Cells(ligne, col) grace au débuggeur.
Au fait, c'est normal le colq ou c'est une faute de frappe ? EDIT : pardon je n'avais pas relu ton premier post en entier. Si tu as un #VALEUR, c'est que tu as mis une formule dans la cellule. Il faudrait je pense ton code complet pour mieux t'aider.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#7 |
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Message précédant éditer avec le code
PS: J'ai converti toute la macro en UserForm pour donner quelque chose de sympa mais l'erreur se répète toujours avec K,M et N. C'est le code que j'ai fourni, il est plus propre |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Je ne vois plus de Replace dans ton nouveau code.
Et tu devrais utiliser Option Explicit et bien typer toutes tes variables, comme ça au moins tu auras une erreur (si tu n'en as pas déjà) si à un moment il essaie de mettre du texte dans un numérique.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#9 | ||
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Oui, pardon.
Code :
|
||
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Essaie de faire ton CDbl seulement sur le Replace
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#11 |
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Toujours #VALEUR, il y a pas un moyen pour changer le type de la cellule une fois le remplacement fait?
EDIT: Et qu'est ce que option explicit? |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Option Explicit t'oblige à déclarer toutes tes variables, sinon, il y a erreur à la compilation. Ça peut paraître contraignant mais ça évite des erreurs liées au fautes de frappe par exemple.
Tu pourrais mettre ton fichier ou pas ? Ça me parait plus simple, parce que là, je ne vois pas d'où ça peut venir.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#13 |
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Je l'ai ajouter en fichier joint.
Merci pour le temps que tu m'accorde. Edit: apparemment le fichier avec userform est non valide donc je met l'ancien |
|
|
00
|
|
|
#14 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Ton problème était simplement que tu n'avais mis le Replace qu'à un endroit alors qu'il y a 3 endroits où il devait être. J'ai modifié ton code pour que ça renvoie une valeur.
Par contre, je n'ai pas essayé de tout comprendre en détail, mais ça m'étonnerait que ton code fasse ce que tu veux, tu cherches 2 fois la colonnes, il y a des tonnes de If qui ne sont pas exclusifs, du coup, la moitié ne servent à rien. As-tu écris sur un papier en français ce que tu voulais faire avant de rédiger ton code ? Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
30
|
|
|
#15 | ||||||
|
Membre chevronné
![]() Architecte Inscription : mai 2002 Messages : 1 057 ![]() |
Je commencerais par revoir les déclarations pour que toutes les variables soient définies par le type voulu.
Code :
Code :
Code :
|
||||||
|
|
10
|
|
|
#16 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Je pense qu'il faut même revoir plus en profondeur le code. Si tu nous expliques ce que tu veux calculer et comment ça se calcule (j'avoue que mes connaissances en mécaniques sont un peu loin), on pourra mieux t'aider.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#17 |
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Pour faire court:
Un alésage correspond a un trou d'un certain diamètre dans une pièce, un arbre et un cylindre qui rentre dedans. Au niveau mécanique d'usinage on a définie (H, JS, K, zc...) des classes avec lesquelles on obtient des diamètre compris entre deux valeurs extrêmement précise (écart supérieur, écart inférieur) (quand une usine un alésage ou arbre le but étant de d'obtenir un diamètre compris entre les deux valeur) selon des qualités (1 étant un qualité impossible a obtenir, 7 une qualité moyenne). Tout ceci dans le but de prévoir le jeu maximum et le jeu minimum de l'arbre dans l'alésage. Le jeu peu aussi bien être voulu négatif pour obtenir un assemblage serré que positif pour avoir un jeu possible. Des tableaux on était définie, IT, Alésage, Arbre. Mes feuilles correspondent à ces tableaux. La valeur de l'IT, intervalle de tolérance et défini en fonction du diamètre et de la qualité. Une fois l'IT obtenu on va voir la tableau des alésage et selon la classe on obtient, en fonction du diamètre de la classe et de plusieurs critère, soit l'écart supérieur soit l'écart inférieur. (Un écart supérieur tel que "-0.05" veut dire que le diamètre maxi à obtenir est "diamètre+écart supérieur. Si diamètre = 30 mm >>>> diamètre maxi=29.95). Et de même pour les arbres. J'espère avoir été clair je sais que sait pas facile de comprend juste en lisant un petit paragraphe (de plus très mal écrit ^^). Tout les If correspond au conditions étant débutant en VB je ne connai que ça. Que veut dire If exclusif? A part ça le programme marche, j'ai vérifié avec des valeurs calculées à la main, je te remercie Zebreloup! Pour faire plus propre j'attend donc vos conseil et je penser remplacer la "replace" par une "strings.instr" et une "strings.left", la .Instr chercherai le "+D" et la .Left permettrai de ne pas prendre en compte les deux dernier caractère pour le calcul (ici +D). Pour l'histoire des deux colonnes, "col" correspond a la colonne ou se trouve la valeur finale (ES ou EI), et "colq" correspond a la colonne ou se trouve la valeur du delta (D) qu'il faut ajouter au résultat dans le cas de classe K M et N. Désolé pour ce calvaire... EDIT: @defluc >> Je ne connais pas "case", il me semble, mais je me trompe surement, que ca ne pourrai marcher mais faudrai que tu m'explique un peu plus. Sinon le fait de de dim une valeur a la fois change quoi? |
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Quand je parle des If exclusifs, c'est la structure
Code :
If ... ElseIf ... ElseIf ... Else ... End Ensuite, j'ai l'impression que tu ne gères pas les degrés de tolérance pour les ES, tu prends toujours la première colonne. Enfin, tu ne gères pas le cas où l'on rentre un paramètre incorrect. Pour ce qui est des degrés de tolérance pour les ES, le problème c'est qu'il va falloir faire du cas par cas si tu ne veux pas modifier la structure de ton onglet Alesage. Tu pourras utiliser par exemple Select Case
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
|
|
#19 | ||
|
Invité régulier
![]() Étudiant Inscription : janvier 2012 Messages : 23 ![]() |
Bon voici se que j'ai fait, j'ai surtout essayé d'ordonner et de simplifier le code pour le rendre le plus compréhensible possible. J'ai également remplacé les If par des If exclusif et utilisé Select case (j'ai juste copié le code de defluc).
Enfin voila tout marche, c'est propre et c'est bien mieux! Merci encore pour votre aide. Si vous voyez d'autre chose qui pourrai être modifier dites moi, vu mes faibles connaissances il y en a surement ^^ Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
En survolant ton nouveau code (plus difficile à comprendre car je suppose que tu passes par un UserForm que nous ne connaissons pas), j'ai l'impression qu'il y a toujours quelques calculs inutiles, et surtout que tu ne gères toujours pas le couple Série/Degré de tolérance pour ceux où il y a un choix (J, K, M, N, P).
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com