Problème de calcul

Résolu
Signaler
Messages postés
13
Date d'inscription
jeudi 10 mars 2011
Statut
Membre
Dernière intervention
28 février 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
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)
Messages postés
13
Date d'inscription
jeudi 10 mars 2011
Statut
Membre
Dernière intervention
28 février 2012

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 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Désolé, je vais pas ajouter les espace en tête de ligne pour rendre plus clair et lisible le code
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
240
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
Messages postés
13
Date d'inscription
jeudi 10 mars 2011
Statut
Membre
Dernière intervention
28 février 2012

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