Bouton Valider : insérer les champs du formulaire dans les colonnes cibles

Bonsoir à tous,

J'ai un soucis avec un code VBA,

Comment faire pour que les informations s'inscrivent successivement(si la cellule est non vide, rechercher la prochaine cellule vide et la renseigner), au lieu de chaque fois modifier la cellule cible.

Merci d'avance.

Je vous envois le code que j'ai écris.


Private Sub VALIDER_INVENTAIRE_Click()

Dim PRODUIT As String
Dim INVENTAIRE As Integer
Dim MOIS As String
Dim DATES As Date

Dim feuille As Worksheet
Dim ligne As Long
Dim derniere_ligne As Long

PRODUIT = ajout_inventaire_viande.ComboBox_inv_viande

Range("A7").Value = PRODUIT

INVENTAIRE = ajout_inventaire_viande.ComboBox_Q_Viandeinv.Value
Range("C7").Value = INVENTAIRE

MOIS = ajout_inventaire_viande.ComboBox_mois_inv_viande.Value
Range("H7").Value = MOIS

DATES = ajout_inventaire_viande.TextBox_date_inv_viande.Value
Range("I7").Value = DATES

Unload Me
End Sub

Bonjour,

Sans fichier exemple, c'est toujours moins évident, mais en considérant que "A7" est la première ligne d'enregistrement, le code suivant devrait vous aider :

Private Sub VALIDER_INVENTAIRE_Click()
    Dim feuille As Worksheet
    Dim ligne As Long
    Dim derniere_ligne As Long

    dim n as long
    n = Application.WorksheetFunction.CountA(Range("A7:A"&ThisWorkbook.ActiveSheet.Rows.Count))

    with ajout_inventaire_viande
        Range("A"&(7+n)).value = .ComboBox_inv_viande
        Range("C"&(7+n)).value = .ComboBox_Q_Viandeinv.Value
        Range("H"&(7+n)).value = .ComboBox_mois_inv_viande.Value
        Range("I"&(7+n)).value = .TextBox_date_inv_viande.Value
    end with

    Unload Me
End Sub 

Est-ce que cela répond à votre demande ?

PS : pour "factoriser" le code, j'ai utilisé un "With" et ai supprimé vos variables intermédiaires

Merci Fatos,

La feuille d'écriture est nommée " Mouvements_stocks_vande ", peux-tu ajouter stp

Bonsoir NFamory, Fatos, le forum,

A tester....

Private Sub VALIDER_INVENTAIRE_Click()
    Dim PRODUIT As String, MOIS As String
    Dim INVENTAIRE As Integer, derniere_ligne As Long
    Dim DATES As Date
    Dim feuille As Worksheet

     Set feuille = Sheets("Mouvements_stocks_vande")
  derniere_ligne = feuille.Range("A" & Rows.Count).End(xlUp).Row + 1

         PRODUIT = ajout_inventaire_viande.ComboBox_inv_viande
      INVENTAIRE = ajout_inventaire_viande.ComboBox_Q_Viandeinv.Value
            MOIS = ajout_inventaire_viande.ComboBox_mois_inv_viande.Value
           DATES = ajout_inventaire_viande.TextBox_date_inv_viande.Value

  With feuille
   .Range("A" & derniere_ligne).Value = PRODUIT
   .Range("C" & derniere_ligne).Value = INVENTAIRE
   .Range("H" & derniere_ligne).Value = MOIS
   .Range("I" & derniere_ligne).Value = cdate(DATES)
 End With
 Unload Me
End Sub

Cordialement,

Bonsoir xorsankukai,

Il y a blocage à ce niveau

Set feuille = Sheets("Mouvements_stocks_vande")

Re,

Merci pour le retour,

L'intitulé de la feuille doit impérativement correspondre au nom de l'onglet (attention aux majuscules/minuscules, espace en trop...), sinon excel génère une erreur car il ne trouve pas la feuille.

[EDIT] : j'avais fait un copié/coller à partir de ton message, ne serait-ce pas viande ?

Set feuille = Sheets("Mouvements_stocks_viande")

Cordialement,

Merci Fatos,

La feuille d'écriture est nommée " Mouvements_stocks_vande ", peux-tu ajouter stp

Pas de quoi. Pour préciser la feuille d'écriture, il te suffit d'ajouter devant les range :

Sheets("nomDeTaFeuilleDecriture")

Pour simplifier le code, tu peux charger cet objet Sheets dans une variable (feuille) et/ou factoriser avec un With : cela correspond aux compléments proposés par xorsankukai (bonjour et merci également!).

Tiens-nous au courant

Bonsoir ,

C'est bien ça ?

j'ai testé et on me signal q'il y a une mauvaise utilisation de la propriété.

Private Sub VALIDER_INVENTAIRE_Click()

Dim feuille As Worksheet

Dim ligne As Long

Dim derniere_ligne As Long

Dim n As Long

n = Application.WorksheetFunction.CountA(Range("A7:A" & ThisWorkbook.ActiveSheet.Rows.Count))

With ajout_inventaire_viande

sheets ("Mouvements_stocks_viande") & Range("A" & (7 + n)).Value = .ComboBox_inv_viande.Value

sheets ("Mouvements_stocks_viande") & Range("C" & (7 + n)).Value = .ComboBox_Q_Viandeinv.Value

sheets ("Mouvements_stocks_viande") & Range("H" & (7 + n)).Value = .ComboBox_mois_inv_viande.Value

sheets ("Mouvements_stocks_viande") & Range("I" & (7 + n)).Value = .TextBox_date_inv_viande.Value

End With

Unload Me

End Sub

Bonjour, entre les erreurs sur les noms de feuilles et les réécritures perso ; ce n'est pas gagné.

Un simple fichier exemple et vous auriez déjà une réponse adaptée à votre demande.

En passant : aprés le nom de feuille on écrit pas & mais on met un point.

Non
sheets ("Mouvements_stocks_viande") & Range("A" & (7 + n)).Value = .ComboBox_inv_viande.Value

oui
sheets("Mouvements_stocks_viande").Range("A" & (7 + n)).Value = .ComboBox_inv_viande.Value

ok j'envoi le fichier

11test.zip (1.02 Mo)

Bonsoir à tous,

J'ai envoyé le fichier.

Merci d'avance pour votre assistance.

Avec ce code :

1- Quand j'affecte la macro a un objet, la date s'inscrit dans la cellule cible en format mm/jj/aa au lieu de jj/mm/aa

2-Lorque que je lance la macro en étant a la feuille menu2les données s'inscrivent a partir de la ligne A8 au lieu de A7

Private Sub VALIDER_INVENTAIRE_Click()

Dim feuille As Worksheet
Dim ligne As Long
Dim derniere_ligne As Long

Dim n As Long

n = Application.WorksheetFunction.CountA(Range("A7:A" & ThisWorkbook.ActiveSheet.Rows.Count))

With ajout_inventaire_viande

sheets("Mouvements_stocks_viande").Select

sheets("Mouvements_stocks_viande").Range("A" & (7 + n)).Value = .ComboBox_inv_viande.Value

sheets("Mouvements_stocks_viande").Range("C" & (7 + n)).Value = .ComboBox_Q_Viandeinv.Value

sheets("Mouvements_stocks_viande").Range("H" & (7 + n)).Value = .ComboBox_mois_inv_viande.Value

sheets("Mouvements_stocks_viande").Range("I" & (7 + n)).Value = .TextBox_date_inv_viande.Value

sheets("Menu2").Select
End With

Unload Me

End Sub

Bonjour, quelques remarques sur la rédaction.

1) Vous déclarez des variables que vous n'utilisez pas :

Variable Feuille pas utilisée donc dans ce cas n'est pas a déclarer.

Variable derniereligne non plus car vous utilisez la variable " n "

2) Si vous renseignez le nom de feuille pour valider les infos il n'est pas nécessaire de faire des "select" sur la feuille puis de revenir sur la premiere.

Il reste donc au final

Private Sub VALIDER_INVENTAIRE_Click()

Dim Mafeuille As Worksheet
Dim n As Long
Set Mafeuille = Worksheets("Mouvements_stocks_viande")
n = Application.WorksheetFunction.CountA(Range("A6:A" & ThisWorkbook.ActiveSheet.Rows.Count))
Mafeuille.Range("A" & (6 + n)).Value = ComboBox_inv_viande.Value
Mafeuille.Range("C" & (6 + n)).Value = ComboBox_Q_Viandeinv.Value
Mafeuille.Range("H" & (6 + n)).Value = ComboBox_mois_inv_viande.Value
Mafeuille.Range("I" & (6 + n)).Value = TextBox_date_inv_viande.Value
Unload Me
End Sub
15test.zip (0.98 Mo)
Rechercher des sujets similaires à "bouton valider inserer champs formulaire colonnes cibles"