Calcul depuis une ligne précédente

  • Initiateur de la discussion Initiateur de la discussion moi60
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

moi60

Guest
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
 
Re : Calcul depuis une ligne précédente

Re

EDITION
: Il y a Else qui traine au début de ton code.
Essayes ceci au début de ton code
Code:
MsgBox Val(TextBoxIndex)
Quelle valeur est renvoyée ?

Pour les variables, voir ici

Si tu es curieux, alors je te conseille ce réflexe salvateur
Dans Excel, faire le plus souvent possible : ALT+F11 puis F1
 
Dernière édition:
Re : Calcul depuis une ligne précédente

Oui j'ai déjà pas mal usé le bouton F1 de mon clavier ;-)

Merci pour le lien sur les variables très intéressant, je le garde sous la main!

Toujours pas une petite idée pour mon problème? =/
 
Re : Calcul depuis une ligne précédente

alors voila le résultat :
MsgBox Val(TextBoxIndex) me donne : 1556425
MsgBox (Val(.Range("E65000").End(xlUp).Row)) me donne : 14

Le probleme viendrait donc de la deuxième car normalement il devrais me renvoyer la valeur 1556422
 
Re : Calcul depuis une ligne précédente

Re

Ce qui veut dire que l'on tombe sur une cellule vide en colonne E.

Fais ce test sur un classeur vierge (test ok chez moi)
(Classeur contenant un userform avec un textbox nommé TextBox1 et un commandbutton
Si je saisis 100 dans le textBox, j'obtiens bien 50 en F5
Code:
Private Sub CommandButton1_Click()
Dim derligne&
derligne = [E65536].End(xlUp).Row
Cells(derligne, "F") = Val(TextBox1) - Cells(derligne, "E")
End Sub

Code:
Private Sub UserForm_Initialize()
'ici pour créer données de test
[E1:E5] = [TRANSPOSE({10,20,30,40,50})]
End Sub
 
Dernière édition:
Re : Calcul depuis une ligne précédente

Si j'essaye de savoir la valeur de l'avant dernière valeur de la colonne E c'est bien Val(.Range("E65000").End((xlUp) - 1).Value) ?

Car si je demandes MsgBox (Val(.Range("E65000").End((xlUp) - 1).Value)) Il me met un msg d'erreur "erreur défini par l'application ou l'objet"
 
Re : Calcul depuis une ligne précédente

Re


C'est normal la syntaxe n'est pas bonne.
Testes cette macro sur un classeur vierge
Code:
Sub avantdernier()
Dim derligne$
[E1] = 1: [E2] = 2
derligne = [E6556].End(xlUp).Row
MsgBox Cells(derligne, "E").Offset(-1)
End Sub




(Tu as essayé ce que je te propose dans mon message précédent ?)
 
Dernière édition:
Re : Calcul depuis une ligne précédente

Re


Tu peux aussi écrire
Code:
Sub avantdernierII()
Dim derligne$
[E1] = 1: [E2] = 2
derligne = [E65536].End(xlUp).Row -1
MsgBox Cells(derligne, "E")
End Sub
Tu peux aussi écrire
Code:
MsgBox Range("E" & [E65536].End(xlUp).Row - 1)
 
Dernière édition:
Re : Calcul depuis une ligne précédente

Bonjour tout le monde,

J'espère que vous avez passé un bon weekend.

J'ai été un peu optimiste samedi, enfaite mon problème persiste toujours, je vous explique:

Mon problème est que le code me donne l'avant dernier chiffre entré même si je fais un filtre avant. En effet, avec le nouveau code (voir ci-dessous) je fais un filtre sur la "presa" ainsi que sur "cuib" afin de récupérer ensuite, grâce au code AvantDer = Val(.Range("E65000").End(xlUp).Offset(-1)) l'avant derniere valeur de l'index pour la "presa" et la "cuib" sélectionner dans le filtre. Hors, il me donne l'avant dernière valeur rentrée comme-ci le filtre n'avait pas été fait.

Quelqu'un a-t-il une idée?


Nouveau Code :
Code:
                Application.ScreenUpdating = False
               	 Sheets("data").Unprotect password:="fabien"
                 Sheets("data").Visible = True
                    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("C10").Select
                        ActiveSheet.Unprotect password:="fabien"
                        Selection.AutoFilter
                        Sheets("data").ListObjects("tabData").Range.AutoFilter Field:=3, Criteria1:=ComboBoxpresa.Text
                        Sheets("data").ListObjects("tabData").Range.AutoFilter Field:=4, Criteria1:=ComboBoxCuib.Text
                        AvantDer = Val(.Range("E65000").End(xlUp).Offset(-1))
                        .Range("f" & intline).Value = Val(TextBoxIndex) - AvantDer
                        Range("C10").Select
                        ActiveSheet.ShowAllData
                        Selection.AutoFilter

Exemple: A l'origine j'ai ca:

DATE NOM Presa Cuib Index NbPresa
22/07/11 TECSA presa 8 cuib 1 5356385 183259
23/07/11 TARAN presa 6 cuib 2 1556422 343241
22/07/11 SPARTA presa 4 cuib 1 9722107 3208

Je rentre de nouvel donnée ce qu'il me donne la nouvel ligne:

24/07/11 moi presa 8 cuib 1 5356390

Je voudrais pouvoir faire un filtre pour n'avoir que les PRESA 8 CUIB1 pour récupérer la valeur 535685 afin de calculer pour la nouvel ligne le NbPresa égal à "=535690 - 535685"


Merci beaucoup,

Moi.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
917
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
7
Affichages
179
Réponses
2
Affichages
528
Réponses
15
Affichages
793
Retour