Problème de résultat de formule en VBA

dmoluc

XLDnaute Occasionnel
Bonjour à tous

Encore un problème simple et incompréhensible qui doit sans doute être du à une déclaration de variable mais que je n'arrive pas à résoudre malgré ma persévérence :(
Cette formule fonctionnée très bien jusqu'à ce que, sans rien changer, cela ce mette à planter !

dur = (TextBox21.Value + TextBox13.Value + TextBox9.Value + (TextBox23.Value * 60 / TextBox11.Value) + (TextBox23.Value * 60 / TextBox10.Value))

Toutes les textbox sont bien incrémentées avec des valeurs numériques avec décimale mais impossible d'incrémenté la variable "dur" avec le résultat de l'opération.
J'ai d'autres opérations du même genre

God = (TextBox15.Value / (TextBox26.Value * TextBox29.Value * TextBox31.Value))

qui fonctionne très bien

que ce soit la variable God ou dur , je les ai déclarer toutes deux en Variant

Merci pour votre aide

Didier
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de résultat de formule en VBA

Bonjour,

Cette formule fonctionnée très bien jusqu'à ce que, sans rien changer, cela ce mette à planter !

les textbox stockant les valeurs sous forme de texte... je doute un peu que ce code fonctionna un jour..... regarde peut être dans l'aide vba du coté des fonctions de conversion... "CDbl" devrait faire l'affaire... sans plus de détails difficile d'en dire plus...

bonne journée
@+
 

dmoluc

XLDnaute Occasionnel
Re : Problème de résultat de formule en VBA

Je vais étudier ça mais pourquoi toutes mes formules avec textbox fonctionnent sauf celle là ? En plus elle a fonctionnée pendant un moment et tout d'un coup plus rien
enfin merci tu m'as donné une piste à creuser
 

dmoluc

XLDnaute Occasionnel
Re : Problème de résultat de formule en VBA

J'ai modifier un peu la formule pour la racourcir, employer CDbl et le résultat est toujours le même "incompatibilité de type"
Code:
If TextBox28 <> "" Then
TextBox81.Value = "Chargeur"
Dim God As Double
If TextBox13.Value = "" Then
TextBox13.Value = 0
Dim Nbgr As Variant, Nbg As Variant
End If
If Me.ToggleButton1 = False And TextBox28 <> "" Then
God = (TextBox15.Value / (TextBox26.Value * TextBox29.Value * TextBox31.Value))
Nbg = Int(Round(God + 0.5))
TextBox21.Value = ((TextBox25 * Nbg) * (60 / TextBox24.Value))
TextBox18.Value = ((TextBox24.Value / TextBox21) * TextBox15.Value)
D = CDbl(TextBox21.Value + TextBox13.Value + TextBox9.Value + Tps)
TextBox20.Value = Int(Round((D / TextBox21.Value) + 0.5))
TextBox19.Value = Int(Round((D / TextBox21.Value) - 0.5))
TextBox12.Value = (TextBox18.Value * TextBox19.Value / (D / TextBox21.Value))
TextBox17.Value = (TextBox18.Value / TextBox31)
TextBox16.Value = (TextBox12.Value / TextBox31)
End If

Toutes les formules fonctionnent sauf

Code:
D = CDbl(TextBox21.Value + TextBox13.Value + TextBox9.Value + Tps)


Merci pour votre aide
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de résultat de formule en VBA

Re,

plutôt que :
Code:
D = CDbl(TextBox21.Value + TextBox13.Value + TextBox9.Value + Tps)

j'aurais peut être codé ainsi :
Code:
D = CDbl(TextBox21.Value) + CDbl(TextBox13.Value) + CDbl(TextBox9.Value) + Tps
 

dmoluc

XLDnaute Occasionnel
Re : Problème de résultat de formule en VBA

Merci Pierrot cela fonctionne parfaitement
Mais j'ai des centaines de formules du même genre dans ce classeur et c'est la seule qui pose problème ; on peu bien sur mettre ça sur les mystères de l'informatique mais il doit bien y avoir une raison logique. Enfin du moment que ça marche....

encore merci
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de résultat de formule en VBA

Re,

mais il doit bien y avoir une raison logique
bah la logique c'est qu'il est toujours préférable de convertir le contenu d'un "terxtbox" avant de l'utiliser pour faire des calculs.. comme dit précédemment, les valeurs contenues dans des "textbox" sont de type "texte"....
 

dmoluc

XLDnaute Occasionnel
Re : Problème de résultat de formule en VBA

Merci je vais noté cette info précieuse, ça m'évitera sans aucun doute des soucis dans l'avenir

J'ai un autre petit soucis moins grave qui n'a pas grand chose à voir avec ce post
mais bon

je vais cherché des valeurs sur d'autres feuilles et je n'ai pas trouver mieux que d'activer ces autres feuilles ce qui rend mon code pas très fluide, même si mon ordi est très rapide :(

Code:
Private Sub UserForm_Initialize()
Call choix(ToggleButton1)
Call choit(ToggleButton2)
Sheets("Caractéristiques des matériaux").Activate
Dim Lig As Byte, fin As Byte
fin = Range("A2").End(xlDown).Row
For Lig = 2 To fin
ListBox1.AddItem Cells(Lig, "A")
ListBox3.AddItem Cells(Lig, "A")
ListBox4.AddItem Cells(Lig, "A")
ListBox5.AddItem Cells(Lig, "A")
ListBox7.AddItem Cells(Lig, "A")
ListBox9.AddItem Cells(Lig, "A")
 Next
Dim Ligne As Byte, F As Byte
 Sheets("matériels").Activate
F = Range("H1").End(xlDown).Row
For Ligne = 1 To F
ListBox2.AddItem Cells(Ligne, "H")
Dim Lignet As Byte, Scra As Byte
Scra = Range("K2").End(xlDown).Row
Next
For Ligne = 2 To Scra
ListBox8.AddItem Cells(Ligne, "k")
 Next
Dim Lote As Byte, Tute As Byte
 Sheets("matériels").Activate
Tute = Range("A1").End(xlDown).Row
For Lote = 1 To Tute
ListBox27.AddItem Cells(Lote, "A")
ListBox28.AddItem Cells(Lote, "A")
ListBox29.AddItem Cells(Lote, "A")
ListBox30.AddItem Cells(Lote, "A")
ListBox31.AddItem Cells(Lote, "A")
ListBox32.AddItem Cells(Lote, "A")
ListBox33.AddItem Cells(Lote, "A")
ListBox34.AddItem Cells(Lote, "A")
 Next
 Dim lignes As Byte, Bul As Byte
 Sheets("BULL").Activate
Bul = Range("W2").End(xlDown).Row
For lignes = 2 To Bul
ListBox6.AddItem Cells(lignes, "W")
 Next
 Dim L As Byte, T As Byte
 Sheets("Métré et Tâches").Activate
T = Range("A1").End(xlDown).Row
For L = 1 To T
ListBox10.AddItem Cells(L, "A")
 Next
Dim Lo As Byte, Tu As Byte
 Sheets("personnels").Activate
Tu = Range("A1").End(xlDown).Row
For Lo = 1 To Tu
ListBox11.AddItem Cells(Lo, "A")
ListBox12.AddItem Cells(Lo, "A")
ListBox13.AddItem Cells(Lo, "A")
ListBox14.AddItem Cells(Lo, "A")
ListBox15.AddItem Cells(Lo, "A")
ListBox16.AddItem Cells(Lo, "A")
 Next
 Dim Lot As Byte, Tut As Byte
 Sheets("fournitures").Activate
Tut = Range("A1").End(xlDown).Row
For Lot = 1 To Tut
ListBox17.AddItem Cells(Lot, "A")
ListBox18.AddItem Cells(Lot, "A")
ListBox19.AddItem Cells(Lot, "A")
ListBox20.AddItem Cells(Lot, "A")
ListBox21.AddItem Cells(Lot, "A")
ListBox22.AddItem Cells(Lot, "A")
ListBox23.AddItem Cells(Lot, "A")
ListBox24.AddItem Cells(Lot, "A")
ListBox25.AddItem Cells(Lot, "A")
ListBox26.AddItem Cells(Lot, "A")
 Next
  Dim Loti As Byte, Tuti As Byte
 Sheets("Métré et Tâches").Activate
Tuti = Range("I1").End(xlDown).Row
For Loti = 1 To Tuti
ListBox35.AddItem Cells(Loti, "I")
 Next
 Sheets("Programme des travaux").Activate
 ListBox10.Value = Range("A36").End(xlUp).Value
 
End Sub

J'ai bien essayer ça mais sans succés

Code:
 Fin = Sheets("Caractéristiques des matériaux").Range("A2").End(xlDown).Row

Ai-je une erreur de syntaxe ?

Enfin encore merci pour l'histoire des textbox , comme le nom l'indique, j'aurai du me méfier
 

Pierrot93

XLDnaute Barbatruc
Re : Problème de résultat de formule en VBA

Re,

Fin = Sheets("Caractéristiques des matériaux").Range("A2").End(xlDown).Row
ceci devrait être bon, mais après quand tu l'utilise il faut préciser la feuille sur laquelle la propriété "cells" doit s'appliquer...

plutôt que :
Code:
Sheets("Caractéristiques des matériaux").Activate
Dim Lig As Byte, fin As Byte
fin = Range("A2").End(xlDown).Row
For Lig = 2 To fin
ListBox1.AddItem Cells(Lig, "A")
ListBox3.AddItem Cells(Lig, "A")
ListBox4.AddItem Cells(Lig, "A")
ListBox5.AddItem Cells(Lig, "A")
ListBox7.AddItem Cells(Lig, "A")
ListBox9.AddItem Cells(Lig, "A")
 Next

utiliser :
Code:
Dim Lig As Byte, fin As Byte
With Sheets("Caractéristiques des matériaux")
    fin = .Range("A2").End(xlDown).Row
    For Lig = 2 To fin
        ListBox1.AddItem .Cells(Lig, "A")
        ListBox3.AddItem .Cells(Lig, "A")
        ListBox4.AddItem .Cells(Lig, "A")
        ListBox5.AddItem .Cells(Lig, "A")
        ListBox7.AddItem .Cells(Lig, "A")
        ListBox9.AddItem .Cells(Lig, "A")
    Next
End With

A noter les points devant le "range" et les "cells" afin que les instructions s'appliquent à la feuille définie par le bloc "with"
 

Discussions similaires

Statistiques des forums

Discussions
312 153
Messages
2 085 804
Membres
102 981
dernier inscrit
fred02v