J ai écrit un fonction en vba sous excel 2007
Je réecrit la meme chose sur un poste equipé excel 2003
Ca ne marche pas!!!!
le soft a changé mais pas le language!!
Quelqu'un aurait il une idée?
JE devient fou![]()
J ai écrit un fonction en vba sous excel 2007
Je réecrit la meme chose sur un poste equipé excel 2003
Ca ne marche pas!!!!
le soft a changé mais pas le language!!
Quelqu'un aurait il une idée?
JE devient fou![]()
Bonjour
Essaye à l'avenir de mettre un titre plus explicit.
Montre nous la fonction, car nous ne sommes pas des devins.
Starec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 Sub Bouton1085_Clic() On Error GoTo Err Dim Limite As Integer Dim debut As Integer Dim i As Integer Dim DRE_T As Double Dim SHL_T As Double Dim CBA_T As Double Dim AGA_T As Double Dim SMA_T As Double Dim CMA_T As Double Dim FV As Double Dim KMS As Double debut = InputBox("A partir de quelle ligne voulez calculer les montants?") Limite = InputBox("Jusqu'à quelle ligne voulez calculer les montants?") For i = debut To Limite Select Case (Cells(i, "v").Value) Case ("OLD") DRE_T = 77.57 SHL_T = 56.99 CBA_T = 56.99 AGA_T = 71.27 SMA_T = 35.72 CMA_T = 30.11 FV = 17 KMS = 0.45 Case ("NEW") DRE_T = 76.55 SHL_T = 56.36 CBA_T = 56.36 AGA_T = 70.16 SMA_T = 34.07 CMA_T = 28.38 FV = 18 KMS = 0.48 Case (Default) MsgBox "La case Nouveau Contrat n'existe pas ou n'est pas renseigné!\n Voulez-vous le renseigner?", vbCritical = vbYesNo, "attention" End Select 'DRE If Cells(i, "c").Value = "DRE" Then Cells(i, "y").Value = (Cells(i, "m").Value * DRE_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If 'SHL If Cells(i, "c").Value = "SHL" Then Cells(i, "y").Value = (Cells(i, "m").Value * SHL_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If 'CBA If Cells(i, "c").Value = "CBA" Then Cells(i, "y").Value = (Cells(i, "m").Value * CBA_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If 'AGA If Cells(i, "c").Value = "AGA" Then Cells(i, "y").Value = (Cells(i, "m").Value * AGA_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If 'SMA If Cells(i, "c").Value = "SMA" Then Cells(i, "y").Value = (Cells(i, "m").Value * SMA_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If 'CMA If Cells(i, "c").Value = "CMA" Then Cells(i, "y").Value = (Cells(i, "m").Value * CMA_T) + (Cells(i, "n").Value * FV) + (Cells(i, "o").Value * KMS) + Cells(i, "p").Value End If Next i Err: 'Gére les erreurs Select Case Err.Number Case Else: MsgBox "Erreur in !" End Select End Sub
Re
Quel est l'erreur et où.
Starec
Ce code fonctionne parfaitement sur mon poste (excel 2007) mais pas sur celui de ma collègue à qui il devrait servir...(excel 2003)
Sur son poste il n'execute pas le calcul pour "DRE" et "CMA"
mais aucun erreur spécifier d'ou mon incompréhension
Re
As-tu inclus ton code dans un autre fichier, ou est-ce avec le même ouvert sous 2003 ?
Starec
Je n 'ai pas réessayé depuis que je fais une chose :
j ai modifier mes variables elle se nommait :
DRE
CMA
AGA...
comme les chaines de caractères, j ai donc ajouté un _T pour les dissocier meme si je pense que le problème vienne de là.
Je l ai inclu dans un autre fichier
Re
Contrôle entre tes deux fichiers si DRE, CMA, etc... sont écrits de la même maniére, et le format des cellules.
Starec
Niveau syntaxe pas de problème, j'ai regardé et re_regardé
par contre, je n ai pas regardé le format de la cellule, mais il y avait bien ecrit CMA...
je dois revoir son fichier sur le temps du midi, je reposterai après pour annoncer l'avancement du problème.
Merci de t'etre pencher sur le pb!
Problème non résolu
Sur certaine variables comme CMA principalement le calcul ne s'effectue pas, donc je crois pas que se soit un problème de compatibilté mais plutot de code :
Voici le dernier code :
quand il ne marche pas sur une ligne, il me renvoie erreur inconnu quand je gere les erreurs, sinon il n'affiche rien....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94 Sub Bouton1085_Clic() On Error GoTo Err Dim Limite As Integer Dim debut As Integer Dim i As Integer Dim DRE_T As Double Dim SHL_T As Double Dim CBA_T As Double Dim AGA_T As Double Dim SMA_T As Double Dim CMA_T As Double Dim FV As Double Dim KMS As Double KMS = 0 FV = 0 debut = InputBox("A partir de quelle ligne voulez calculer les montants?") Limite = InputBox("Jusqu'à quelle ligne voulez calculer les montants?") For i = debut To Limite Select Case (Cells(i, "v").Value) Case ("OLD") DRE_T = 77.57 SHL_T = 56.99 CBA_T = 56.99 AGA_T = 71.27 SMA_T = 35.72 CMA_T = 30.11 FV = 17 KMS = 0.45 Case ("NEW") DRE_T = 76.55 SHL_T = 56.36 CBA_T = 56.36 AGA_T = 70.16 SMA_T = 34.07 CMA_T = 28.38 FV = 18 KMS = 0.48 Case (Default) MsgBox "La case Nouveau Contrat n'existe pas ou n'est pas renseigné!\n Voulez-vous le renseigner?", _ vbCritical = vbYesNo, "attention" End Select Select Case (Cells(i, "c").Value) 'DRE Case ("DRE") Cells(i, "af").Value = (Cells(i, "m").Value * DRE_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value 'SHL Case ("SHL") Cells(i, "Af").Value = (Cells(i, "m").Value * SHL_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value 'CBA Case ("CBA") Cells(i, "af").Value = (Cells(i, "m").Value * CBA_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value 'AGA Case ("AGA") Cells(i, "af").Value = (Cells(i, "m").Value * AGA_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value 'SMA Case ("SMA") Cells(i, "af").Value = (Cells(i, "m").Value * SMA_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value 'CMA Case ("CMA") Cells(i, "af").Value = (Cells(i, "m").Value * CMA_T) + (Cells(i, "n").Value * FV) + _ (Cells(i, "o").Value * KMS) + Cells(i, "p").Value Case (Default) MsgBox "pb Abrév?", vbCritical = vbYesNo, "attention" End Select Next i Err: Select Case Err.Number Case Default MsgBox "ERREUR INCONNU" End Select End Sub
Apres avoir mis des msgbox partout pour voir un peu ce qu'il se passait, je me suis rendu compte que ca marche sans souci jusqu au 2em select case (jusque la mes variable sont toutes pleines et avec les valeurs souhaitées.)
Mais apres il a l'air de ne meme pas passer dans le case et il me jette direct a la sorti --> erreur inconu.
Si jamais faites moi signe, j abandonne pour ce soir...
Bonjour
A première vue, pas d'incohérence dans ton code
Si tu peux me donner ton fichier (je suis en Excel 2000) je regarderais
Slts
Pour commencer, Case (Default) dans un Select Case, ça n'existe pas en VB. Les séquence d'échappement \n dans une chaîne de caractères non plus.
Il faut mettre
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part Case Else
si tu veux une boîte de message avec réponse de l'utilisateur, tu dois déclarer une variable de type Integer pour recevoir la réponse. Et tu ne peux pas mettre vbCritical = vbyesno. Ça ne marchera pas. C'est un opérateur + qui va là.
Code : Sélectionner tout - Visualiser dans une fenêtre à part "première ligne" & vbcrlf & "deuxième ligne"
Comme tu peux le voir, comme le MsgBox retourne une valeur (puisque c'est une fonction), il faut mettre les parenthèses et affecter le résultat retourné à une variable. Sinon, impossible de savoir sur quel bouton l'utilisateur a cliqué.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim Reponse As Integer Reponse = MsgBox("La case 'Nouveau Contrat' n'existe pas ou n'est pas renseignée !" & _ vbcrlf & "Voulez-vous le renseigner?", vbCritical + vbYesNo, "Attention")
Je n'ai pas trop examiné le reste. Pour l'instant, corrige ce que j'ai indiqué et on verra pour la suite.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 If Reponse = vbYes then ' on fait ceci Else ' on fait cela End If
Tout d'abord merci pour votre aide.
Mais je crois avoir trouvé le problème, enfin je comprend pas pourquoi mais je sais que le problème vient de là...
La cellule où sont noté les SMA... doit parfois être "corrompu" car après analyse poussée via message box etc...
Je me rend compte qu'il prend bien la valeur mais qui ne passe pas dans le case. Apres le message de Zaza, j'aurai dit que c'etait un problème de syntaxe du code. Mais apparament non puisque les calculs se font correctement pour les autres (même si quelques problème syntaxique subsiste). J'ai bien évidament regardé la syntaxe et les proproèté cellule et texte : identique aux autres (qui fonctionnent...)
Enfin, c'est a ni rien comprendre, toujours est-il que quand elle tape à la main dans la case "SMA" ou "DRE"... miracle ca marche...
Donc elle n'aura qu'a les taper à la main et puis c'est tout![]()
Espace avant ou après la chaîne...
Essaye avec Trim(), ça devrait résoudre ce genre de bug.
N'oubliez pas de cliquer surquand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
Partager