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.

11test.xlsm (29.81 Ko)

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

13test-amir.xlsm (29.93 Ko)

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.

SALUT

SVP affiner ce travail et envoyer moi le resultat

12test.xlsm (35.02 Ko)

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.

26test-v2.xlsm (34.79 Ko)

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

22projet.xlsm (38.42 Ko)

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

désolé de retard

essai ça

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.

Rechercher des sujets similaires à "valeur derniere cellue vide ligne"