Valeur dans dernière cellue vide de la ligne
Bonjour tout le monde,
J'aurais besoin de votre aide!!
Le code ci dessous devrait me permettre de chercher la ligne qui contient la valeur de "Me.Label_Symbole" sur la feuille"Stock" en colonne "B" puis d'écrire dans la dernière cellule vide de la ligne en question, la valeur contenu dans ma "Textbox_Date".
Seulement cela ne fonctionne pas du tout.
Pouvez vous me dire ce qui ne va pas SVP?
Private Sub CmdBtn_Ajouter_Click()
Dim DernCol As Integer
Set C = Sheets("Stock").Range("B:B").Find(Me.Label_Symbole, LookIn:=xlValues, LookAt:=xlPart)
If Not C Is Nothing Then
premier = C.Address
i = 0
If C.Offset(, -C.Column + 8).Value = "" Then 'SI la colonne 8 de la ligne recherché est vide.
Else
Do
DernCol = Sheets("Stock").Range(C).End(xlToRight).Rows 'Dern col vide à partir de la gauche, apres la 7ème colonne.
For j = 7 To DernCol Step 5
C.Offset(, -C.Column + 8 + 5 * j).Value = TextBox_Date
'C.Offset(, -C.Column + 9 + 5 * j).Value = TextBox_Entrep
'C.Offset(, -C.Column + 10 + 5 * j).Value = TextBox_Qté
'C.Offset(, -C.Column + 11 + 5 * j).Value = TextBox_ListeN°
'C.Offset(, -C.Column + 12 + 5 * j).Value = TextBox_Commentaire
'If C.Offset(, -C.Column + 8 + 5 * j).Value <> "" Then i = i + 1 'Si une sortie est vide alors ne pas montrer la sortie (permet de ne pas avoir de ligne vide dans la listbox)
Next j
Set C = Sheets("Stock").Range("B:B").FindNext(C)
Loop While Not C Is Nothing And C.Address <> premier
End If
End If
Unload Me
Sheets("Stock").Activate
End Sub
Merci à vous.
Bonjour
Sans voir ton fichier...
Essaie en modifiant cette ligne -->
DernCol = Sheets("Stock").Range(C.address).End(xlToRight).Row
Cordialement
Bonjour,
Merci pour ta réponse, mais ça ne fonctionne pas tout a fait comme je voudrais!
Pour être plus clair, je joins le fichier.
Pour le tester, il faut cliquer sur le bouton "test", entrer une valeur dans la textbox "Date", puis clic sur "ajouter une sortie".
la valeur se met sur la bonne ligne, mais pas dans la bonne cellule.
Je voudrais que la valeur se mette sur la dernière cellule non vide, dans ce cas précis, en cellule "R7", hors la valeur se met en "AQ7".
Comprends tu d'ou viens le problème s'il te plait?
Merci.
Cordialement.
SALUT
Private Sub CmdBtn_Ajouter_Click()
Dim DernCol As Integer
Set C = Sheets("Stock").Range("B:B").Find(Me.Label_Symbole, LookIn:=xlValues, LookAt:=xlPart)
If Not C Is Nothing Then
premier = C.Address
i = 0
If C.Offset(, -C.Column + 8).Value = "" Then 'SI la colonne 8 de la ligne recherché est vide.
'/////////////////////////////////////
'then what
'/////////////////////////////////////
Else
Do
DernCol = Sheets("Stock").Range(C.Address).End(xlToRight).Row 'Dern col vide à partir de la gauche, apres la 7ème colonne.
For j = 7 To DernCol Step 5
C.Offset(, -C.Column + 8 + 5 * j).Value = TextBox_Date
'C.Offset(, -C.Column + 9 + 5 * j).Value = TextBox_Entrep
'C.Offset(, -C.Column + 10 + 5 * j).Value = TextBox_Qté
'C.Offset(, -C.Column + 11 + 5 * j).Value = TextBox_ListeN°
'C.Offset(, -C.Column + 12 + 5 * j).Value = TextBox_Commentaire
'If C.Offset(, -C.Column + 8 + 5 * j).Value <> "" Then i = i + 1 'Si une sortie est vide alors ne pas montrer la sortie (permet de ne pas avoir de ligne vide dans la listbox)
Next j
Set C = Sheets("Stock").Range("B:B").FindNext(C)
DernCol = DernCol + 1
Loop While Not C Is Nothing And C.Address <> premier
End If
End If
Unload Me
Sheets("Stock").Activate
End Sub
Bonjour Amir,
Merci pour ta réponse. J'ai remplacé mon code par le tiens, mais le résultat est le même.
Voir le fichier joint.
Cordialement
salut
ce que j'ai vouler te dire par
'/////////////////////////////////////
'then what
'/////////////////////////////////////
c'est qu'i faut donner une instruction a faire
a mon avis
ton code est besoin d'uen instruction entre the
et else
c'est l'editeur ne genere aucun erreur mais le ne fonctionne par compltement
alors soit vous vouler enlever else ou ajouter une instruction
et surtout ne copie par mon premier code
dit moi si vous avez avancer
MERCI
Merci AMIR pour ta réponse.
Je ne suis pas un expert en VBA, mais pour moi le code ne met pas d'erreur parceque il fait bien ce qu'on lui demande!
Le problème est que le code ne correspond pas à ce que je voudrais faire.
Mais encore une fois je ne suis pas un expert en VBA.
Si je décortique le code:
je dis, de:
- chercher la valeur de "Me.label_Symbole" dans la colonne "B" de la feuille "Stock" : Ca fonctionne
- SI, sur la ligne correspondant au résultat de la recherche, la 8ème colonne est vide, tu ne fais rien: Ca fonctionne
- Je déclare ensuite que "Derncol" veut dire la dernière cellule vide de la ligne de résultat: Ca Fonctionne pas ????? les données ne se transcrivent pas dans la dernières cellule non vide de la ligne!
- Sinon mettre la valeur de "textbox_Date" dans la dernière cellule non vide de la ligne de résultat.
Je ne comprends vraiment pas ce qui ne va pas dans ce code!! et ca fait très longtemps que j'essaie de résoudre ce problème.
Si quelqu'un à une solution, je lui serait infiniment reconnaissant!!
PS: J'ai essayé en modifiant le code et donc en suprimant else, mais le résultat est le même:
Private Sub CmdBtn_Ajouter_Click()
Dim DernCol As Integer
Set C = Sheets("Stock").Range("B:B").Find(Me.Label_Symbole, LookIn:=xlValues, LookAt:=xlPart)
If Not C Is Nothing Then
premier = C.Address
i = 0
If C.Offset(, -C.Column + 8).Value <> "" Then 'SI la colonne 8 de la ligne recherché est vide.
'Else
Do
DernCol = Sheets("Stock").Range(C.Address).End(xlToLeft).Row 'Dern col vide à partir de la gauche, apres la 7ème colonne.
For j = 7 To DernCol Step 5
C.Offset(, -C.Column + 8 + 5 * j).Value = TextBox_Date
'C.Offset(, -C.Column + 9 + 5 * j).Value = TextBox_Entrep
'C.Offset(, -C.Column + 10 + 5 * j).Value = TextBox_Qté
'C.Offset(, -C.Column + 11 + 5 * j).Value = TextBox_ListeN°
'C.Offset(, -C.Column + 12 + 5 * j).Value = TextBox_Commentaire
'If C.Offset(, -C.Column + 8 + 5 * j).Value <> "" Then i = i + 1 'Si une sortie est vide alors ne pas montrer la sortie (permet de ne pas avoir de ligne vide dans la listbox)
Next j
Set C = Sheets("Stock").Range("B:B").FindNext(C)
Loop While Not C Is Nothing And C.Address <> premier
End If
End If
Unload Me
Sheets("Stock").Activate
End Sub
Cordialement
salut
vous vouler vraiment
Je déclare ensuite que "Derncol" veut dire la dernière cellule vide de la ligne de résultat:
ou dernier cellule de colonne du resultat
oui, je voudrais sur la première cellule vide rencontrée.
Dans mon fichier, sur la ligne 7 colonne "R"
Cordialement.
Bonjour Amir,
Merci beaucoup pour ton fichier, on est très prêt du but!! J'ai juste eu quelques petit problèmes.
Lors de l'ajout d'un nouveau symbole dans la colonne "B", la première saisie ne se faisait pas, j'ai donc modifié un peu le code et ca fonctionne.
J'ai également remis la reference à chercher dans le label plutot que dans une textbox.
j'avais aussi un problème de trou lorsque tout les champs n'était pas saisie, j'ai donc imposé le remplissage des trois premiers textbox puis j'ai mis dans le code que si les deux derniers textbox ne sont pas remplis, mettre automatiquement un "/".
Pourrais tu m'expliquer ce bout de code, je ne le comprends pas et ne suis pas sûr qu'après modification de ma part, le code entier soit encore utile:
ElseIf DernCol > 8 And DernCol Mod 5 = 3 Then
Merci beaucoup à toi pour toutes ces réponses!! je ne classe pas encore en résolu, car je n'ai pas encore eu le temps de finir ce projet, mais j'y travail.
Ci joint, le fichier modifié, peux tu me dire ce que tu en penses.
Merci
Cordialement.
SALUT
La MACROS ajoute la sortie et son numeros alors vous aurez pas besoin de le faire chaque fois et ajoute aussi date ,QTE ,,,ECT au dessous de sorties
SUR CETE PARTIE IL TE RESTE UNE CHOSE A ME MONTRER
ESSAI d'appliquer par macros les bordure des cellules
bien sur choisi un index de couleur que vous plai
et consernant
ElseIf DernCol > 8 And DernCol Mod 5 = 3 Then
c'est vous qu'il faut me dire sert a quoi ? (AIDE: comment peut ce code vous empecher a entrer des données décaler a leurs palces!!!!! ; mod (c'est mathématique voir aide de exel de devlopeur horsline
je rejoint ce fichier " derniere mise a jour "
ALORS réfléchir et répond
Salut,
Désolé pour le temps de réponse, mais j'ai bossé quand je pouvais sur le fichier!! je suis treès content du résultat!
Merci beaucoup pour ton travail.
J'ai fais les bordures automatique comme tu l'avais suggéré. J'ai également modifié deux ou trois choses! par exemple, je ne voulais pas que l'on puisse ajouter un nouveau symbole par cette fenêtre! j'ai donc supprimer le userform de modification.
Maintenant, j'ai quelques problèmes encore. Ci joint le fichier modifié a ma sauce...
Il y a un souci lorsqu'on ajoute une sortie alors qu'il n'y en avait pas encore! par exemple, pour le symbole test quand on essaye d'ajouter une sortie sur le symbole test! j'ai une erreur en retour.
J'ai également ajouter un double clic sur une ligne dans la listbox, celui ci servant a modifier une sortie existante. Mais je n'ai aucune idée du fonctionnement.
Pour le moment, le double clic ouvre un usf, j'aimerais qu'en cliquant sur le bouton "modifier la sortie", les valeurs soient modifiées.
Pourrais tu encore un peu m'aider s'il te plait?
Merci beaucoup.
Cordialement.
Salut Amir,
Ouaou, c'est trés rapide!! Merci beaucoup!!
Je t'avoue que je suis loin de tout comprendre dans tes codes!! Mais j'analyse!!
J'ai juste encore deux problèmes, lorsque je double clic sur une sortie pour la modifier, je change les données, je clic sur le bouton "Modifier...", mais les donnees qui sont changées ne sont pas les bonnes, c'est celles d'a coté qui sont modifiées.
C'est balaise tout ca!!
J'aurais juste une dernière demande et je pense que le fichier sera exactement la ou je voulais qu'il soit!!
Je sais faire des additions de cellules, mais je ne sais pas comment additionner uniquement les cellules pleines.
Je m'explique: Dans la colonne "F" (Stock restant) j'aurais voulu qu'il y ait le résultat de (stock initial + Total cdé) - (l'addition de toutes les colonnes "Qtè".
Ce qui ferait a peu près ca si je ne me trompe pas:
Sheets("Stock").Range("F7").FormulaR1C1 = "=(RC[1]+RC[-3])-(RC[4]+RC[9]+RC[14]+..... toutes les colonnes "Qté" non vide)"[/code]
Merci beaucoup pour ton aide très precieuse.
SALUT
LES NOUVEAUX CODES
enlever le msg box ( MsgBox resultat )
'////////////////////////////////////////
For j = 8 To DernCol
If j Mod 5 = 3 Then
indice = indice + 1
resultat = resultat + Cells(C.Row, 5 + (indice * 5)).Value
MsgBox resultat
End If
Next j
Cells(C.Row, 6).Value = (Cells(C.Row, 3).Value + Cells(C.Row, 7).Value) - resultat
'////////////////////////////////////////
ET
'////////////////////////////////////////
Cells(C.Row, 6).Value = (Cells(C.Row, 3).Value + Cells(C.Row, 7).Value) - Cells(C.Row, 10).Value
'////////////////////////////////////////
ET
Private Sub CmdBtn_Modifier_Click()
DernCol = Cells(7, Cells.Columns.Count).End(xlToLeft).Column
Dernligne = Range("b1000").End(xlUp).Rows
Set C = Sheets("Stock").Range("B:B").Find(Usf_ModifSorti.Label_Sy.Caption, LookIn:=xlValues, LookAt:=xlPart)
If Not C Is Nothing Then
Cells(C.Row, 3 + (Usf_Stock.ListBox1.ListIndex * 5)).Value = Usf_ModifSorti.TextBox_Date
Cells(C.Row, 4 + (Usf_Stock.ListBox1.ListIndex * 5)).Value = Usf_ModifSorti.TextBox_Entrep
Cells(C.Row, 5 + (Usf_Stock.ListBox1.ListIndex * 5)).Value = Usf_ModifSorti.TextBox_Qté
Cells(C.Row, 6 + (Usf_Stock.ListBox1.ListIndex * 5)).Value = Usf_ModifSorti.TextBox_ListeN°
Cells(C.Row, 7 + (Usf_Stock.ListBox1.ListIndex * 5)).Value = Usf_ModifSorti.TextBox_Commentaire
End If
Unload Usf_ModifSorti
'pour voir la modification (actualisation)
'Usf_Stock.Show
End Sub
ET QUELEQUE MODIFICATION
Alors expliquer moi comment fonctionne chaque code
Bonjour Amir,
Je te remercie beaucoup pour ton fichier qui est tout a fiat ce que je voulais!!
Excuse moi encore pour le temps de réponse, mais je n'ai pas toujours le temps de me connecter.
Si j'ai bien compris, pour le premier code, on dit que "résultat" est = à l'addition de toute les valeurs de la 3ème colonne par tranche de 5 collones après la 8 ème colonne, puis on dit que la colonne 6 doit être = à la colonne 3 + la colonne 7 - "résultat".
ET
en cas de première sortie detecté, on dit de simplement faire: colonne 6 = colonne 3 + colonne 7 - colonne 10
ET
la ca se complique pour moi!!
je ne comprends pas du tout pourquoi on parle de c.row 3, 4,5,6 et 7. Je ne comprends pas non plus a quoi sert le "Usf_Stock.ListBox1.ListIndex * 5"
pourquoi utilises tu cette formule:
Dernligne = Range("b1000").End(xlUp).Rows
ne pourrait on pas utiliser cette formule plutot?:
Dernligne = Range("B" & Rows.Count).End(xlUp).Row
ainsi nous n'avons pas dernière ligne de défini! non?
Merci encore à toi, je vais essayer maintenant d'integrer tout ça a mon fichier d'origine.
Cordialement.