Debut de programme ajouter

Bonjour

Je cherche a démarrer mon programme du mieux possible, voici mon souci:

sur le usf Saisie j'ai un bouton Valider, avec se bouton de voudrai enregistrer tous les info que je rempli dans les txtbox et autres dans le tableau "Extincteur" puis vider tous les objets.

merci de l'aide

Cordialement

Bonjour,

Teste le code ci-dessous et reviens.

Il te faut tout d'abords renommer tes contrôles afin que ce soit plus parlant comme CmbBât au lieu de ComboBox1. Dans le code ci-dessous, les contrôles ont tous été renommés, il te faut, en fonction de la colonne de destination, redéfinir leur propriété "Name" puis tester le code :

Private Sub BtValiderSaisie_Click()

    Dim Ctrl As Control
    Dim I As Long

    With Worksheets("Extincteur")

        'défini la première ligne vide sur la colonne B
        I = .Cells(.Rows.Count, 2).End(xlUp).Row + 1

        .Cells(I, 2) = UCase(CmbBât.Text)
        .Cells(I, 3) = UCase(TxtEmplacement.Text)
        .Cells(I, 4) = UCase(TxtNumExtinteur.Text)
        .Cells(I, 5) = UCase(CmbType.Text)
        .Cells(I, 6) = UCase(CmbCapacite.Text)
        .Cells(I, 7) = UCase(TxtDateVerif.Text)
        .Cells(I, 9) = UCase(CmbFabricant.Text)
        .Cells(I, 10) = UCase(TxtDateFabrication.Text)
        .Cells(I, 11) = UCase(TxtReepreuve.Text)
        .Cells(I, 12) = IIf(ChkRe = True, "X", "")
        .Cells(I, 13) = IIf(ChkMa = True, "X", "")
        .Cells(I, 14) = IIf(ChkRa = True, "X", "")
        .Cells(I, 15) = IIf(ChkD = True, "X", "")
        .Cells(I, 16) = IIf(ChkR = True, "X", "")
        .Cells(I, 17) = IIf(ChkN = True, "X", "")
        .Cells(I, 18) = UCase(TxtObs.Text)

    End With

    MsgBox "Données bien enregistrées !"

    'vide les contrôles
    For Each Ctrl In Me.Controls

        If TypeName(Ctrl) = "TextBox" Or TypeName(Ctrl) = "ComboBox" Then

            Ctrl.Text = ""

        ElseIf TypeName(Ctrl) = "CheckBox" Then

            Ctrl.Value = False

        End If

    Next Ctrl

End Sub

Private Sub UserForm_Initialize()

    CmbBât.RowSource = "Bâtiment"
    CmbCapacite.RowSource = "Capacité"
    CmbType.RowSource = "Type_Extincteur"
    CmbFabricant.RowSource = "Fabriquant"

End Sub

Hervé.

Bonjour à tous,

je ferais une toute petite modif au code de Theze :

.Cells(I, 7) = Cdate(TxtDateVerif.Text)

pour avoir une date numérique sans erreur.

eric

Bonjour Theze, Eriiic

D'abord merci pour votre aide.

J'ai bien repris ton code Theze avec la modif conseillé d'Eriiic et ça marche super bien, en plus je trouve le code hyper concentré et joli.

Entre temps bien évidement j'ai chercher sur le net des solutions donc j'ai essayé de mettre ds mes USF.

1°) je suis arrivé a rechercher les infos du tableau pour les remettre ds les objet de mon USF.

(LA !! si c'est possible, peut être vérifier si mon code est juste, voir le simplifier)

2°) Par la suite je souhaite pouvoir modifier une ligne et également supprimer une ligne.

ce fichier est pour mon travail, alors un peu d'aide serai la bienvenue.

encore GRAND merci a vous.

Cordialement

19materiels1.zip (43.34 Ko)

Bonjour

suite à mes recherche pour mon fichier

j'ai trouvé un code pour modifier une ligne que j'ai mis dans le "USF Consultation" au bouton "Valider".

ça à l'air de vouloir fonctionner mais mon soucis c'est que ça change seulement sur 3 colonne alors qu'il y en a 17 donc je ne comprends pas pourquoi et n'arrive pas à trouver l'erreur !! .

Si quelqu'un peut m'aider à ressoudre se Hiiic ça serai super sympas.

Cordialement

16materiels1.zip (52.09 Ko)

Bonjour

Évites l'utilisation de la propriété RowSource

Modifies ta macro dans l'userform "Consulter"

Private Sub UserForm_Initialize()
Dim J As Long
  With Sheets("Liste")
    For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row
      Me.ComboBox1.AddItem .Range("A" & J)
    Next J
    For J = 2 To .Range("C" & Rows.Count).End(xlUp).Row
      Me.ComboBox2.AddItem .Range("C" & J)
    Next J
    For J = 2 To .Range("B" & Rows.Count).End(xlUp).Row
      Me.ComboBox3.AddItem .Range("B" & J)
    Next J
    For J = 2 To .Range("E" & Rows.Count).End(xlUp).Row
      Me.ComboBox4.AddItem .Range("E" & J)
    Next J
  End With

  With Sheets("Extincteur")
    For J = 8 To .Range("D" & Rows.Count).End(xlUp).Row
      Me.ComboBox5.AddItem .Range("D" & J)
    Next J
  End With
'   Me.ComboBox1.RowSource = "Bâtiment"
'   Me.ComboBox2.RowSource = "Capacité"
'   Me.ComboBox3.RowSource = "Type_Extincteur"
'   Me.ComboBox4.RowSource = "Fabriquant"
'   Me.ComboBox5.RowSource = "ListeN°"
End Sub

Bonjour Banzai64

Merci d'abord d'avoir pris un peu de temps pour moi et de proposer un code (que j'apprecie (je découvre de nouveau code c'est sympas).

j'ai effectué les modif comme tu ma proposé et ça marche très bien, maintenant suite à ça je voudrais pouvoir supprimer une ligne du au choix de la combobox5 sur formulaire "Consultation",

c'est possible ?

Bonjour

Une vision différente

Re bjr banzai64

Quel GRAND Maître !! bravo et merci.

bien vue ta vision des chose est pas mal tout est simplifier et un seul USF cool, ça va changer un peu mes objectifs mais je vais m'adapter.

je voulais par la suite :

  • éviter les doublons de N° (à l'Enregistrement et lors de la Modification)
  • mettre automatiquement les bordures
  • faire le calcul de la Range ("H") en ajoutant 1 an de + par rapport a la Range ("G")

je suis un peu perdu dans les formules mais au moins j'en apprend de nouvelles, cool.

encore Grand merci pour l'aide.

Bonsoir

pompaero a écrit :

- éviter les doublons de N° (à l'Enregistrement et lors de la Modification)

En principe tu ne peux pas : Sinon détailles moi les actions à faire pour avoir un doublon

pompaero a écrit :

mettre automatiquement les bordures

fait
pompaero a écrit :

faire le calcul de la Range ("H") en ajoutant 1 an de + par rapport a la Range ("G")

Fait

Re

Tu est vraiment trop bon, félicitation.

exactement comme je le voulais GRAND GRAND Merci

Pour les doublons c'est juste que je ne voudrai pas retrouver 2fois le même N° d'extincteur dans ma BDD, donc faire une alerte sur le bouton "valider" au moment d'un nouveau enregistrement et en cas de modification.

Cordialement

Bonsoir

Normalement quand tu valides, la macro recherche si le numéro existe, et dans l'affirmative tu as le message "Voulez-vous modifier ...." ,sinon c'est un nouveau numéro et les données sont ajoutés en fin de base

Donc normalement tu ne peux avoir de doublons

Re Banzai64

Oui exact, désolé je n'avais pas essayé, donc impect comme ça peu pas avoir de doublon, Nickel!! .

Par contre j'ai ajouter un MsgBox pour confirmer un nouveau enregistrement mais le souci c'est quand je fais une Modif les deux MsgBox (celui de la Modif et après celui de l'enregistrement s'affiche) est il possible de me conseiller la dessus pour que j'ai le MsgBox de l'enregistrement quand un nouveau extincteur est entrée et MsgBox Modif quand il y a une modif, merci.

voici le code ou j'ai mis mon MsgBox.

Private Sub BtValiderModifier_Click()
Dim Ligne As Long
Dim Cel As Range
Dim I As Integer

  If Me.ComboBox1 = "" Then                 'ici un Test exemple pour la TextBox1, si elle est vide on est viré !!!
    MsgBox "Vous devez saisir un Bâtiment !"
    ComboBox1.SetFocus
    Exit Sub
  End If

  If Me.TextBox2 = "" Then
    MsgBox "Vous devez saisir un N° !"
    MsgBox "Si pas N° noter SN (sans n°)"
    TextBox2.SetFocus
    Exit Sub
  End If

  With Ws
    Set Cel = .Columns("D").Find(what:=Me.TextBox2, LookIn:=xlValues, lookat:=xlWhole)
    'Set Cel = .Columns("D").Find(what:=Me.ComboBox5, LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      Ligne = Cel.Row
      If MsgBox("Voulez-vous modifier les informations de l'extincteur n°" & Me.ComboBox5 & " ?", _
                      vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
    Else
      Ligne = .Range("B" & Rows.Count).End(xlUp).Row + 1
    End If
         [color=#FF0000][b]MsgBox "Voulez-vous enregistrer les informations de l'extincteur n°" & Me.TextBox2 & " ?", _
                      vbQuestion + vbYesNo, "Confirmation"[/b]   [/color]                  
    .Range("B" & Ligne) = UCase(Me.ComboBox1)
    .Range("C" & Ligne) = Me.TextBox1 

ect....

Cordialement

Bonjour

Pourquoi poser une question tu ne tiendras pas compte de la réponse, marques ce que tu vas faire, c'est plus simple

    If Not Cel Is Nothing Then
      Ligne = Cel.Row
      If MsgBox("Voulez-vous modifier les informations de l'extincteur n°" & Me.ComboBox5 & " ?", _
                      vbQuestion + vbYesNo, "Modification") <> vbYes Then Exit Sub
    Else
      Ligne = .Range("B" & Rows.Count).End(xlUp).Row + 1
      MsgBox "Enregistrement du nouvel extincteur n° " & Me.TextBox2
    End If

Bonjour

Impek j'y suis arrivé grasse à toi encore une fois. Merci

Par contre je me suis rendu compte que je ne pouvais pas changer le N° d'extincteur lors d'une modif,

  • est ce normal?
  • est il possible de le faire ?

après ça je crois que je serai au bout de mon projet, Merci encore de ton aide.

cordialement

Bonjour

Non le numéro est unique donc on ne peut le changer

Juste une méthode

Tu fais une copie de l'enregistrement avec le numéro modifié et tu supprimes l'ancien numéro

re

ok bin c'est pas grave je ferai comme ça.

GRAND merci pour tout et a bientôt certainement pour d'autres aventures. .

Je mets résolu.

chao chao!!

cordialement

Rechercher des sujets similaires à "debut programme ajouter"