Problème de calcul

Résolu
cs_jonathanm44 Messages postés 13 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 28 février 2012 - 23 août 2011 à 16:57
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 24 août 2011 à 11:01
bonjour a tous,
Je rencontre un problème de calcul et je ne comprend pas du tout pourquoi. Voici le code :

Private Sub rowchange()
Dim ligne As Integer
Dim formule1, formule2, formule3 As String
j = 8
W = 0
Do While Not (IsEmpty(Range("A" & j)))
j = j + 1
Loop
W = TextBox1.Value - (j - 8)
If TextBox1.Value <= 8 Then
MsgBox ("Vous ne pouvez entrer un nombre d'actions inférieur à 8")
Else
Do While Not ((j - 8) = TextBox1.Value)
If TextBox1.Value > (j - 8) Then
Application.EnableEvents = False
Range("A" & (j - 1) & ":CE" & (j - 1)).Copy
Range("A" & j).Select
Selection.Insert
Range("A" & (j - 1) & ":A" & (j)).Select
Selection.RowHeight = 30
j = j + 1
Range("B" & (j - 1) & ":H" & (j - 1)).Value = Null
Application.EnableEvents = True
Else
If TextBox1.Value < (j - 8) Then
Application.EnableEvents = False
s = Str(j + 1) + ":" + Str(endrow)
s = Replace(s, " ", "")
Rows(j - 1).Delete Shift:=xlUp
j = j - 1
Application.EnableEvents = True
End If
End If
Loop
'Formule pour faire la somme de chaque temps
Application.EnableEvents = False
formule1 = "=SUM(F8:F" & (j - 1) & ")"
Range("F" & j).Value = formule1
formule2 = "=SUM(G8:G" & (j - 1) & ")"
Range("G" & j).Value = formule2
Application.EnableEvents = True
formule3 = "=SUM(H8:H" & (j - 1) & ")"
Range("H" & j).Value = formule3

End If
End Sub

Donc voici la description de mon problème :
Quand ma feuille excel change elle recalcul automatique des temps et insère ou supprime des lignes si je lui demande par TextBox1.
quand je lui demande 15 lignes et que j'en possède 13 il me supprime des lignes et si je lui demande 10 ligne il m'insère des lignes. Alors que je voudrais qu'il face l'inverse. Comment faire ? (Je débute sur vba depuis 3 à 4 mois).
Merci

6 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 août 2011 à 11:01
Bonjour,

Dim formule1, formule2, formule3 As String

fait que seule formule3 est ty^pée en string (les 2 autres seront des variants)
j = 8 
W = 0 

où et comment ont été déclarées ces 2 variables ?
Do While Not (IsEmpty(Range("A" & j))) 
j = j + 1 
Loop 

Est tout simplement :
j = range("A8:A" & rows.count).SpecialCells(xlCellTypeBlanks).Row

W = TextBox1.Value - (j - 8) 
If TextBox1.Value <= 8 Then 

et quid si faute/textbox ? Tu as déjà calculé w ! Ton test, qui ne vient qu'après, est assez curieux !
Voilà.
Commence déjà par cela...
Le reste devrait suivre si tu t'efforces de rester logique .
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 17:00
Salur

Reposte ton code en utilisant la coloration syntaxique 3ème icone à droite préserve les indentation de lisibilité

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_jonathanm44 Messages postés 13 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 28 février 2012
23 août 2011 à 17:02
Private Sub rowchange() 
Dim ligne As Integer 
Dim formule1, formule2, formule3 As String 
j = 8 
W = 0 
Do While Not (IsEmpty(Range("A" & j))) 
j = j + 1 
Loop 
W = TextBox1.Value - (j - 8) 
If TextBox1.Value <= 8 Then 
MsgBox ("Vous ne pouvez entrer un nombre d'actions inférieur à 8") 
Else 
Do While Not ((j - 8) = TextBox1.Value) 
If TextBox1.Value > (j - 8) Then 
Application.EnableEvents = False 
Range("A" & (j - 1) & ":CE" & (j - 1)).Copy 
Range("A" & j).Select 
Selection.Insert 
Range("A" & (j - 1) & ":A" & (j)).Select 
Selection.RowHeight = 30 
j = j + 1 
Range("B" & (j - 1) & ":H" & (j - 1)).Value = Null 
Application.EnableEvents = True 
Else 
If TextBox1.Value < (j - 8) Then 
Application.EnableEvents = False 
s = Str(j + 1) + ":" + Str(endrow) 
s = Replace(s, " ", "") 
Rows(j - 1).Delete Shift:=xlUp 
j = j - 1 
Application.EnableEvents = True 
End If 
End If 
Loop 
'Formule pour faire la somme de chaque temps 
Application.EnableEvents = False 
formule1 = "=SUM(F8:F" & (j - 1) & ")" 
Range("F" & j).Value = formule1 
formule2 = "=SUM(G8:G" & (j - 1) & ")" 
Range("G" & j).Value = formule2 
Application.EnableEvents = True 
formule3 = "=SUM(H8:H" & (j - 1) & ")" 
Range("H" & j).Value = formule3 

End If 
End Sub 
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 17:28
Désolé, je vais pas ajouter les espace en tête de ligne pour rendre plus clair et lisible le code
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 17:34
Bonjour,
Un peu de lecture pour
jonathanm44

L'indentation d'un code n'est pas seulement pour faire joli.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_jonathanm44 Messages postés 13 Date d'inscription jeudi 10 mars 2011 Statut Membre Dernière intervention 28 février 2012
24 août 2011 à 09:27
Private Sub rowchange() 
Dim ligne As Integer 
Dim formule1, formule2, formule3 As String 
j = 8 
W = 0 
Do While Not (IsEmpty(Range("A" & j))) 
j = j + 1 
Loop 

W = TextBox1.Value - (j - 8) 

If TextBox1.Value <= 8 Then 
   MsgBox ("Vous ne pouvez entrer un nombre d'actions inférieur à 8") 
Else 
    Do While Not ((j - 8) = TextBox1.Value) 
        If TextBox1.Value > (j - 8) Then 
               Application.EnableEvents = False 
               Range("A" & (j - 1) & ":CE" & (j - 1)).Copy 
               Range("A" & j).Select 
               Selection.Insert 
               Range("A" & (j - 1) & ":A" & (j)).Select 
               Selection.RowHeight = 30 
               j = j + 1 
               Range("B" & (j - 1) & ":H" & (j - 1)).Value = Null 
               Application.EnableEvents = True 
        Else 
               If TextBox1.Value < (j - 8) Then 
                    Application.EnableEvents = False 
                    s = Str(j + 1) + ":" + Str(endrow) 
                    s = Replace(s, " ", "") 
                    Rows(j - 1).Delete Shift:=xlUp 
                    j = j - 1 
                    Application.EnableEvents = True 
               End If 
        End If 
    Loop 
'Formule pour faire la somme de chaque temps 
Application.EnableEvents = False 
formule1 = "=SUM(F8:F" & (j - 1) & ")" 
Range("F" & j).Value = formule1 
formule2 = "=SUM(G8:G" & (j - 1) & ")" 
Range("G" & j).Value = formule2 
Application.EnableEvents = True 
formule3 = "=SUM(H8:H" & (j - 1) & ")" 
Range("H" & j).Value = formule3 

End If 
End Sub 
0
Rejoignez-nous