Ajout d'une ligne dans un tableau par un bouton userform

Bonjour,

voici mon problème: j ai mis dans mon userform un bouton "ajouter" qui permettra de remplir 2 tableaux différents selon une condition (boutons d'option) a travers mon formulaire userform . si la condition est true remplir le 1ier tableau sinon remplir le 2ieme. Le problème c'est que le code que j'ai écrit pour remplir le 1ier tableau (sous la condition marche=true) et incrémenter ses ligne marche bien mais une fois que j'écrit le même code pour remplir le 2ieme tableau ( condition arret=true) ça marche pas. si quelqu' un pourrai m'aider a résoudre ce problème j'en serrais très reconnaissante.

voici mon code:

'Bouton ajouter

Private Sub CommandButton2_Click()
Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String

If stade.Value = "" Then
MsgBox ("Choisissez un stade")
ElseIf marche = True Then
If equipement.Value = "" Or HTP.Value = "" Or HM.Value = "" Or QUO.Value = "" Or CUO.Value = "" Or QCSP.Value = "" Or CCSP.Value = "" Or nombre.Value = "" Then
MsgBox ("Informations insuffisantes")
Else
sourceCol = 2   'column B has a value of 2
    rowCount = Sheets("simulation").Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 4 To rowCount
        currentRowValue = Sheets("simulation").Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
           Sheets("simulation").Cells(currentRow, sourceCol).Value = equipement
           Sheets("simulation").Cells(currentRow, sourceCol + 1).Value = nombre
             Sheets("simulation").Cells(currentRow, sourceCol + 2).Value = HTP
             Sheets("simulation").Cells(currentRow, sourceCol + 3).Value = HM
              Sheets("simulation").Cells(currentRow, sourceCol + 4).Value = QUO
              Sheets("simulation").Cells(currentRow, sourceCol + 5).Value = QCSP
            Exit For
        End If
    Next
End If
End If

'ajouter equipement en arret
If arret = True Then
sourceCol = 1   'column a has a value of 1
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 25 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
             Sheets("simulation").Cells(currentRow, sourceCol).Value = equipement
             Sheets("simulation").Cells(currentRow, sourceCol + 1).Value = nombre
             Sheets("simulation").Cells(currentRow, sourceCol + 2).Value = HA
             Sheets("simulation").Cells(currentRow, sourceCol + 3).Value = DEBIT
             Sheets("simulation").Cells(currentRow, sourceCol + 4).Value = COUT
      Exit For
    End If

    Next

End If
End Sub

Bonjour barabara,

à tester,

Private Sub CommandButton2_Click()
Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String, tb1, tb2, sh As Worksheet

Set sh = Sheets("simulation")

If stade.Value = "" Then
    MsgBox ("Choisissez un stade")
ElseIf marche = True Then

    If equipement.Value = "" Or HTP.Value = "" Or HM.Value = "" Or QUO.Value = "" Or CUO.Value = "" Or QCSP.Value = "" Or CCSP.Value = "" Or nombre.Value = "" Then
        MsgBox ("Informations insuffisantes")
    Else
        sourceCol = 2   'column B has a value of 2
        rowCount = sh.Cells(Rows.Count, sourceCol).End(xlUp).Row

        'for every row, find the first blank cell and select it
        For currentRow = 4 To rowCount
            currentRowValue = sh.Cells(currentRow, sourceCol).Value
            If IsEmpty(currentRowValue) Or currentRowValue = "" Then

                tb1 = Array(equipement, nombre, HTP, HM, QUO, QCSP)

                For j = 0 To UBound(tb1)
                    sh.Cells(currentRow, sourceCol + j).Value = tb1(j)
                Next j

                Exit For
            End If
        Next

    End If
End If

'ajouter equipement en arret
If arret = True Then
    sourceCol = 1   'column a has a value of 1
    rowCount = sh.Cells(Rows.Count, sourceCol).End(xlUp).Row

    'for every row, find the first blank cell and select it
    For currentRow = 25 To rowCount
        currentRowValue = sh.Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then

            tb2 = Array(equipement, nombre, HA, DEBIT, COUT)

            For j = 0 To UBound(tb2)
                sh.Cells(currentRow, sourceCol + j).Value = tb2(j)
            Next j

            Exit For
        End If
    Next
End If

Merci pour votre réponse,

le 1ier tableau ça marche bien mais le 2ieme toujours pas. sa 1iere ligne est remplie mais une fais je realise une deuxieme entrée ca marche pas.

re,

peux-tu joindre ton fichier ?

22tableau-de-bord.xlsm (170.73 Ko)

re,

le combobox stade doit être renseigné à partir de quel feuille ?

UserForm1.stade.AddItem Cells(84, colonne).Value

il est dans la feuille "tableau de bord"

re,

comment fonctionne ce tableau ?

par exemple si je choisi SKF1

le combobox equipement doit être renseigné par quel valeur ?

tableau

le nom de l equipement (skf1) sera transféré a la feuille "simulation" . il sera mis dans la case d equipement dans le 1ier tableau si l utilisateur choisi "marche" comme option sinon s'il choisi "arretele", nom de l equipement sera trasnféré dans la case equipement dans le 2ieme tableau

re,

le combobox equipement doit être renseigné par quel valeur ?

il y a un bug sur cette macro,

c'est la raison pour laquel j'ai demandé comment fonctionne ce tableau ?

Private Sub stade_Change()
i = 1
UserForm1.equipement.Clear

Do While Cells(84, i).Value <> ""
    If Cells(84, i).Value = stade.Value Then
    colonne = i
    End If
    i = i + 1
Loop

j = 85
Do While Cells(j, colonne).Value <> ""
    UserForm1.equipement.AddItem Cells(j, colonne)
    j = j + 1
Loop
End Sub

Le tableau me résume seulement mes options c est à dire que stade et équipement sont des listes deroulantes en cascade c est a dire a base du choix du stade que je fais le choix d équipement . Je ss pas si j’ai bien répondu a votre question

re,

s.t.p. donne moi un exemple concret des valeurs qui doivent être mit dans le combobox equipement

par exemple si je choisi SKF1 dans le combobox stade

le combobox equipement doit être renseigné par quel valeur ?

par exemple:

si SKF1 est choisi dans le combobox stade

les valeurs du combobox equipement seront

?

?

?

Les valeurs du combobox stade sont les titres des cases du tableau c est a dire dans le combobox stade je choisis : foration ou decapage ou transport .... c est ensuite dans le combobox equipement que je choisi si c est skf1 ou skf2 ...

9af565f9 8246 4324 8571 dd93950706f3

re,

ha! ok, là j'ai compris,

je regarde ça et te revient.

re,

si j'ai bien compris,

la macro ajoute les info des textbox (equipement, nombre, HA, DEBIT, COUT)

sur la première ligne vide trouvée sous la ligne 25 de la feuille

alors si on écrit les info sur une seule ligne à quoi sert la boucle ?

ps/ si cette boucle n'est pas utile, je vais l'enlever.

For currentRow = 25 To rowCount

pour trouver la première ligne vide, cette ligne est suffisante,

rowCount = sh.Cells(Rows.Count, sourceCol).End(xlUp).Row + 1

La boucle va me servire a ajouter un equipement avec les infos qui viennent avec a chaque fois que je remplis le formulaire et que je clique sur ajouter

re,

à tester,

Private Sub CommandButton2_Click()
Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String, tb1, tb2, sh As Worksheet

Set sh = Sheets("simulation")

If stade.Value = "" Then
    MsgBox ("Choisissez un stade")
ElseIf marche = True Then

    If equipement.Value = "" Or HTP.Value = "" Or HM.Value = "" Or QUO.Value = "" Or CUO.Value = "" Or QCSP.Value = "" Or CCSP.Value = "" Or nombre.Value = "" Then
        MsgBox ("Informations insuffisantes")
    Else
        sourceCol = 2   'column B has a value of 2
        rowCount = sh.Cells(Rows.Count, sourceCol).End(xlUp).Row

        'for every row, find the first blank cell and select it
        For currentRow = 4 To rowCount
            currentRowValue = sh.Cells(currentRow, sourceCol).Value
            If IsEmpty(currentRowValue) Or currentRowValue = "" Then

                tb1 = Array(equipement, nombre, HTP, HM, QUO, QCSP)

                For j = 0 To UBound(tb1)
                    sh.Cells(currentRow, sourceCol + j).Value = tb1(j)
                Next j

                Exit For
            End If
        Next

    End If
End If

'ajouter equipement en arret
If arret = True Then
    sourceCol = 1   'column a has a value of 1
    rw = sh.Cells(Rows.Count, sourceCol).End(xlUp).Row + 1

    'for every row, find the first blank cell and select it

    tb2 = Array(equipement, nombre, HA, DEBIT, COUT)

    For j = 0 To UBound(tb2)
        sh.Cells(rw, sourceCol + j).Value = tb2(j)
    Next
End If
End Sub

ca marche bien sauf que au remplissage du 2ieme tableau la premiere ligne reste vide c est a dire meme si la ligne 25 est vide l'ajout se realise a partie de la ligne 26

re,

oui, c'est à cause du tableau,

j'ai modifié le code,

à tester,

ca marche tres bien !!

Merci infiniment pour votre aide

Rechercher des sujets similaires à "ajout ligne tableau bouton userform"