Calcul depuis une ligne précédente

moi60

XLDnaute Junior
Salut le forum,

Je reviens vers vous, car comme vous vous en doutez, j'ai (encore) un petit problème.

Je rentre des données depuis ma userform que j'enregistre ensuite dans un tableau.
Code:
                    Application.ScreenUpdating = False
                    Sheets("data").Unprotect password:="fabien"
                        With Sheets("data")
                        intline = .Range("A65000").End(xlUp).Row + 1
                        .Range("a" & intline).Value = DateValue(TextBoxDate.Value)
                        .Range("b" & intline).Value = TextBoxName.Text
                        .Range("c" & intline).Value = ComboBoxPresa.Text
                        .Range("d" & intline).Value = ComboBoxCuib.Text
                        .Range("e" & intline).Value = TextBoxIndex.Text

J'ai donc en A une date, en B un nom, en C un code, en D un deuxieme code, et en E un chiffre.

Je voudrais chercher dans les lignes précédentes du tableau la derniere ligne dont les code C et D sont identiques à ceux-là, et soustraire en F la nouvelle valeur de E avec la précédente.

J'ai donc le code suivant (qui vous vous en doutez, ne fonctionne pas!) :
Code:
Dim i as long
Dim derligne As Integer
For i = derligne To 1 Step -1
                        If Cells(i, 3).Text = ComboBoxPresa.Text Then
                            If Cells(i, 4).Text = ComboBoxCuib.Text Then
                            .Range("f" & intline).Value = Cells(i, 4).Text - TextBoxIndex.Text
                            Exit For
                            End If
                        End If
                        Next i
                        derligne = i

J'espère avoir été assez clair car je ne peux copier mon fichier, beaucoup trop gros même après avoir mis l'essentiel! Sur ceux, bon weekend à vous et merci d'avance,

Moi
 

MJ13

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Re

Bon, ça va pas du tout, j'ai testé ton fichier et hop, j'ai perdu ma barre de menu. Comment je fais pour la retrouver :confused:(attention ce genre de chose n'est pas bien vu ici).

Bon ce sera sans moi, en plus, c'est le week-end ;).

Bon courage :).
 

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Tu as perdu ta barre de menu ? Je suis désolé ca ne me fais pas se problème (c'est pas une mauvaise blague promis!!!)

Je ne comprend pas, ce programme me donne vraiment du fil à retordre !!!

Merci quand même et bon weekend, moi je suis au boulot ...
 

MJ13

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Re

Non, c'est ma barre de formule. Le problème est que tu as des choses dans le wortbook_open qui retire cette barre, et dans le Workbook_beforeclose, tu la remet mais problème, tu sauvegardes d'autres fichiers ouverts. Et si quelqu'un teste ton programme avec des fichiers ouverts (cela arrive souvent), et bien elle aura en fermant ton fichier ses fichiers qui vont se sauvegarder.

Il faut donc retirer tout ce qui peut modifier la mis en forme d'excel et les fichiers qui peuvnet être ouverts.
 

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Mille excuses, j'ai oublié de retirer ca! Je le repost avec cette fois-ci (normalement) tous ceci d'enlevé...

Si quelqu'un peut m'éclairer sur mon petit problème se serait sympa.
 

Pièces jointes

  • enregistrement.zip
    106.9 KB · Affichages: 27
  • enregistrement.zip
    106.9 KB · Affichages: 28
  • enregistrement.zip
    106.9 KB · Affichages: 30

Staple1600

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Bonjour


Si tu avais lu la charte du forum, MJ13 n'aurait pas connu telle mésaventure :rolleyes:

Tu as laissé ceci actif
Il est plus sain de mettre cela en commentaire
Ainsi celui qui teste peut juger et décommenter ou pas la procédure pour l'exécuter.
Code:
Private Sub Workbook_Open()

    Sheets("acasa").Visible = True
    Sheets("data").Visible = True
    Sheets("acasa").Select
    UserForm1.Show
    
End Sub

Et c'est quoi cette langue ?
MsgBox "Ea nu poate fi ora pentru începutul si sfârsitul."
Où donc as-tu été péché ce fichier ?
 
Dernière édition:

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Je fais un stage en roumanie ! =) C'est pour cela ! Désolé pour la charte, je crois que comme beaucoup sur ce forum, j'ai zappé cette étape ! Mea culpa!

Pour en revenir à mon problème, j'ai fait évoluer le code en
Code:
 Sheets("data").Select
                                Range("C10").Select
                                ActiveSheet.Unprotect
                                Selection.AutoFilter
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=3, Criteria1:=ComboBoxPresa.Value
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=4, Criteria1:=ComboBoxCuib.Value
                                Cells(ActiveCell.Row, "F").Select
                                .Range("f" & intline).Value = (.Range("E65000").End(xlUp).Row - 1) - TextBoxIndex.Text
                                Selection.AutoFilter

Mais j'ai un petit problème dans la soustraction je n'ai pas le résultat attendu !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Re


Et tu causes le roumain couramment ?

Pour terminer la balise CODE
C'est :[noparse][/CODE][/noparse] et non pas [\CODE]


PS: Pour zapper la charte , faut le vouloir ...
Voila ce qui apparait quand on crée une discussion
.
Afin de faciliter la compréhension de votre demande il est conseillé de placer votre exemple et explications dans un fichier. Pour l'envoyer, cliquez sur le bouton "Gérer les pièces jointes" dans la zone "Options supplémentaires" ci-dessous.
Ensuite cliquez sur le bouton "Parcourir", et sélectionnez-le (après l'avoir compressé s'il dépasse les 250Ko).
Et si vous ne l'avez pas encore lue... il est encore temps : Lien supprimé
 
Dernière édition:

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Non pas un mot roumain !!! Mais mon tuteur parle anglais, et avec les miracles de google trad ainsi que de l'aide de mon tuteur je traduit tout en roumain ! Et puis, après 3mois, il y a certaines expressions/mots/phrases qui reviennent et que je comprends!

Bref, j'ai bien compris ma faute Staple, je ferrais attention la prochaine fois! Désolé...

J'espère que sa ne refroidira pas les personnes pour m'aider ! :) Avec le dernier bout de code j'y suis presque, juste un problème dans ma soustraction mais je ne vois pas où.

Pour sélectionner l'avant derniere ligne non vide cest bien .Range("E65000").End(xlUp).Row - 1 ?
 

Staple1600

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Re


Edites, stp, ton message en utilisant la bonne balise CODE (comme je te suggère dans mon précédent message ;) )
(Cela rendra ton message plus agréable à lire)

Oui pour ta question

Essayes ceci
Code:
.Range("f" & intline).Value = (.Range("E65000").End(xlUp).Row - 1) - Val(TextBoxIndex)
intline est mal déclaré
C'est : Dim intline As Long
Même chose pour derligne

EDITION: je mets la partie code entière qu'on y voit plus claire
VB:
'save data on the sheet
                    Application.ScreenUpdating = False
                    Sheets("data").Unprotect password:="fabien"
                        With Sheets("data")
                        intline = .Range("A65000").End(xlUp).Row + 1
                        .Range("a" & intline).Value = DateValue(TextBoxDate.Value)
                        .Range("b" & intline).Value = TextBoxName.Text
                        .Range("c" & intline).Value = ComboBoxPresa.Text
                        .Range("d" & intline).Value = ComboBoxCuib.Text
                        .Range("e" & intline).Value = TextBoxIndex.Text
                        .Range("g" & intline).Value = TextBox1.Text
                        .Range("h" & intline).Value = TextBox2.Text
                        .Range("i" & intline).Value = TextBoxCodDorst.Text
                        .Range("j" & intline).Value = TextBoxCodIpec.Text
                        .Range("k" & intline).Value = ComboBox2.Text
                        .Range("l" & intline).Value = ComboBox3.Text
                        .Range("m" & intline).Value = r1 & ":" & r2
                        .Range("n" & intline).Value = ComboBox1.Text
                        .Range("o" & intline).Value = TextBoxCOMMENTAIRE.Text
                        .Range("p" & intline).Value = TextBoxsus.Text
                        .Range("q" & intline).Value = TextBoxjos.Text
                        .Range("r" & intline).Value = TextBoxdreapta.Text
                        .Range("s" & intline).Value = TextBoxstanga.Text
                        .Range("t" & intline).Value = TextBoxdreapta2.Text
                        .Range("u" & intline).Value = TextBoxstanga2.Text
                        
                        For i = derligne To 1 Step -1
                        If Cells(i, 3).Text = ComboBoxPresa.Text Then
                            If Cells(i, 4).Text = ComboBoxCuib.Text Then
                            .Range("f" & intline).Value = Cells(i, 4).Text - TextBoxIndex.Text
                            Exit For
                            End If
                        End If
                        Next i
                        derligne = i
                        
                        
                        Sheets("acasa").Select
                        MsgBox "Date salvate"
                        Sheets("data").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, password:="fabien"
                        End With
                    Application.ScreenUpdating = True
                    Unload UserForm1
                    Load welcome
                    welcome.Show
        End If
End If
      End Sub
 
Dernière édition:

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Toujours parreil. Il me met une valeur bizarre 1556411 alors que normalement je lui demande de faire 1556425-1556422.

Je ne comprend même pas le calcul qu'il fait pour trouver cette valeur.

EDIT: Enfaite normalement le code c'est
Code:
.Range("f" & intline).Value = Val(TextBoxIndex) - (.Range("E65000").End(xlUp).Row)

J'avais inversé les deux valeurs au début, d'où le signe négatif! Bon j'ai le bon signe maintenant mais pas la bonne valeur !

EDIT2: Voila mon nouveau code à ce stade ...

Code:
Private Sub CommandSave_Click()
Dim intline As Long
Dim r1, r2 As Integer

r1 = (Left(ComboBox3.Value, 2) - Left(ComboBox2.Value, 2))
r2 = (Right(ComboBox3.Value, 2) - Right(ComboBox2.Value, 2))
If r1 < 0 Then r1 = 23 + r1
If r2 < 0 Then r2 = 60 + r2

'des tests peu important que j'ai effacé précède ce code

                    Else
'save data on the sheet
                    Application.ScreenUpdating = False
                    Sheets("data").Unprotect password:="fabien"
                        With Sheets("data")
                        intline = .Range("A65000").End(xlUp).Row + 1
                        .Range("a" & intline).Value = DateValue(TextBoxDate.Value)
                        .Range("b" & intline).Value = TextBoxName.Text
                        .Range("c" & intline).Value = ComboBoxPresa.Text
                        .Range("d" & intline).Value = ComboBoxCuib.Text
                        .Range("e" & intline).Value = TextBoxIndex.Text
                
                        .Range("g" & intline).Value = TextBox1.Text
                        .Range("h" & intline).Value = TextBox2.Text
                        .Range("i" & intline).Value = TextBoxCodDorst.Text
                        .Range("j" & intline).Value = TextBoxCodIpec.Text
                        .Range("k" & intline).Value = ComboBox2.Text
                        .Range("l" & intline).Value = ComboBox3.Text
                        .Range("m" & intline).Value = r1 & ":" & r2
                        .Range("n" & intline).Value = ComboBox1.Text
                        .Range("o" & intline).Value = TextBoxCOMMENTAIRE.Text
                        .Range("p" & intline).Value = TextBoxsus.Text
                        .Range("q" & intline).Value = TextBoxjos.Text
                        .Range("r" & intline).Value = TextBoxdreapta.Text
                        .Range("s" & intline).Value = TextBoxstanga.Text
                        .Range("t" & intline).Value = TextBoxdreapta2.Text
                        .Range("u" & intline).Value = TextBoxstanga2.Text
                                
                                Sheets("data").Select
                                Range("C10").Select
                                ActiveSheet.Unprotect
                                Selection.AutoFilter
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=3, Criteria1:=ComboBoxPresa.Value
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=4, Criteria1:=ComboBoxCuib.Value
                                .Range("f" & intline).Value = Val(TextBoxIndex) - (.Range("E65000").End(xlUp).Row)
                                Selection.AutoFilter
                         
                        Sheets("acasa").Select
                        MsgBox "Date salvate"
                        Sheets("data").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, password:="fabien"
                        End With
                    Application.ScreenUpdating = True
                    Unload UserForm1
                    Load welcome
                    welcome.Show
        End If
End If
      End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Calcul depuis une ligne précédente

Re

j'ai édité mon précédent message
Tu as changé tes déclarations de variables ?

Ps: je trouve cette parte du code curieuse
For i = derligne To 1 Step -1
If Cells(i, 3).Text = ComboBoxPresa.Text Then
If Cells(i, 4).Text = ComboBoxCuib.Text Then
.Range("f" & intline).Value = Cells(i, 4).Text - TextBoxIndex.Text
Exit For
End If
End If
Next i
derligne = i
 

moi60

XLDnaute Junior
Re : Calcul depuis une ligne précédente

Oui Je sais que c'était un peu bizarre c'était un test de ce que j'avais pu trouver sur le forum, comme tu peux le voir dans l'édit de mon autre post, j'ai remplacé
Code:
For i = derligne To 1 Step -1
If Cells(i, 3).Text = ComboBoxPresa.Text Then
If Cells(i, 4).Text = ComboBoxCuib.Text Then
.Range("f" & intline).Value = Cells(i, 4).Text - TextBoxIndex.Text
Exit For
End If
End If
Next i
derligne = i

par:

Code:
Sheets("data").Select
                                Range("C10").Select
                                ActiveSheet.Unprotect
                                Selection.AutoFilter
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=3, Criteria1:=ComboBoxPresa.Value
                                ActiveSheet.ListObjects("tabData").Range.AutoFilter Field:=4, Criteria1:=ComboBoxCuib.Value
                                .Range("f" & intline).Value = Val(TextBoxIndex) - (.Range("E65000").End(xlUp).Row)
                                Selection.AutoFilter

EDIT: oui j'ai bien changer mes déclarations merci :eek: mais ca change quoi exactement d'être en integer ou en long ? *jsuis curieux !* merci :p
 

Discussions similaires

Réponses
6
Affichages
295

Statistiques des forums

Discussions
312 512
Messages
2 089 193
Membres
104 060
dernier inscrit
peffaumoikemmi-pro-5430