Microsoft 365 Importer données plusieurs textbox,combobox,checkbox dans une feuille Excel

New_VBA_User

XLDnaute Nouveau
J’aimerai crée une base de données avec des critère de saisie, j’ai besoin d’un peu d’aide pour bien faire des choses, pour ne pas trop chargé le programme, je pense qu’il y a les moyens de faire plus rapidement.

on charge la valeur dans le textbox « Equipement » depuis la feuille "Filtered Data SAP"

Et les bouton Next et Previous permet de lire les ligne haut et en bas depuis la ligne sélectionné.

Ce que j’aimerai faire c’est saisir les données dans les autres champ vides et les enregistrés avec le bouton « Save Data » dans la feuille « DataBase Application » avec les critères défini.

À chaque valeur saisie dans le textbox « Equipement » charger les données de tous les champs.


Je ne sais pas s’il y a un moyen avec des boucles pour ne pas copier 100 lignes.

Merci de votre aide.
Salutations.
 

Pièces jointes

  • Test-projets.xlsm
    203.9 KB · Affichages: 15

New_VBA_User

XLDnaute Nouveau
Ou mieux :

VB:
Private Sub CommandButton_SaveData_Click()
  Dim I As Long, Plage As Range, Ligne As Long, Nom As String
  With Sheets("Feuil1")
    Set Plage = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp))
  End With
  With Sheets("DataBase Application")
    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    For I = 1 To 96
      Nom = Plage(I).Offset(, 1)
      If Nom <> "" Then
        If TypeName(Me.Controls(Nom)) = "CheckBox" Then
          If Me.Controls(Nom).Value = True Then
            .Cells(Ligne, I) = "YES"
          End If
        Else
         .Cells(Ligne, I) = Me.Controls(Nom).Value
        End If
      End If
    Next I
  End With
End Sub

Daniel

ta soluton marche bien.

Merci pour l'aide.
 

New_VBA_User

XLDnaute Nouveau
j'ai encore une petite questions,
là on a résolu le problème d'enregistrement de donnée,

mais on peut actuellement enregistrer une ligne plusieurs fois, ce n'est pas le but.

comment faire pour détecter si la ligne qu'on va enregistré n'existe pas déjà dans la feuille et si oui, alors on remplace la ligne.

Merci pour l'aide.
 

danielco

XLDnaute Accro
Bonjour,

En se basant sur le numéro d'équipement (colonne A :

VB:
Private Sub CommandButton_SaveData_Click()
  Dim I As Long, Plage As Range, Ligne As Long, Nom As String
  With Sheets("Feuil1")
    Set Plage = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp))
  End With
  With Sheets("DataBase Application")
    Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    If IsNumeric(Application.Match(CLng(Me.TextBox_EquipementSAP.Text), .[A:A], 0)) Then
      MsgBox "Saisie en double"
      Exit Sub
    End If
    For I = 1 To 96
      Nom = Plage(I).Offset(, 1)
      If Nom <> "" Then
        If TypeName(Me.Controls(Nom)) = "CheckBox" Then
          If Me.Controls(Nom).Value = True Then
            .Cells(Ligne, I) = "YES"
          End If
        Else
         .Cells(Ligne, I) = Me.Controls(Nom).Value
        End If
      End If
    Next I
  End With
End Sub

Daniel
 

New_VBA_User

XLDnaute Nouveau
c'est bien, mais le but est si on enregistre la ligne une fois avec toutes les donnés, et plus tard on reviens sur cette équipement et on modifie certains donnée ou on complète les info manquants et on met à jour dans la feuille "DataBase Application".
ta solution ci-dessus empêche enregistrement en double.

merci de l'aide
 

danielco

XLDnaute Accro
Alors :

VB:
Private Sub CommandButton_SaveData_Click()
  Dim I As Long, Plage As Range, Ligne As Long, Nom As String
  With Sheets("Feuil1")
    Set Plage = .Range("B1", .Cells(.Rows.Count, 2).End(xlUp))
  End With
  With Sheets("DataBase Application")
    If IsNumeric(Application.Match(CLng(Me.TextBox_EquipementSAP.Text), .[A:A], 0)) Then
      Ligne = Application.Match(CLng(Me.TextBox_EquipementSAP.Text), .[A:A], 0)
    Else
      Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    End If
    For I = 1 To 96
      Nom = Plage(I).Offset(, 1)
      If Nom <> "" Then
        If TypeName(Me.Controls(Nom)) = "CheckBox" Then
          If Me.Controls(Nom).Value = True Then
            .Cells(Ligne, I) = "YES"
          End If
        Else
         .Cells(Ligne, I) = Me.Controls(Nom).Value
        End If
      End If
    Next I
  End With
End Sub

Daniel
 

New_VBA_User

XLDnaute Nouveau
c'est parfait, ça marche.

j'ai encore une petite question, quand on écris les valeurs dans les textbox, combobox etc... et on enregistre c'est bon, mais quand on change d'équipement avec bouton Next, logiquement si c'est un nouveau équipement on ne devrait pas y avoir de valeur dans les textbox Ver, CSID...
tant dis qu'il garde les donnée de l'équipement précèdent.

aurais-tu une idée comment faire quand on sélectionne un nouveau équipement, on ne garde les donnée des équipement précédant.

merci
 

danielco

XLDnaute Accro
Traduit en langage Excel, ça revient à faire une recherche du textbox équipement dans la colonne A. Si on trouve une équivalence, EQUIV renvoie le numéro de ligne, donc un résultat numérique, on se sert de numéro de ligne.

(pas sûr d'avoir été clair)

Daniel
 

danielco

XLDnaute Accro
c'est parfait, ça marche.

j'ai encore une petite question, quand on écris les valeurs dans les textbox, combobox etc... et on enregistre c'est bon, mais quand on change d'équipement avec bouton Next, logiquement si c'est un nouveau équipement on ne devrait pas y avoir de valeur dans les textbox Ver, CSID...
tant dis qu'il garde les donnée de l'équipement précèdent.

aurais-tu une idée comment faire quand on sélectionne un nouveau équipement, on ne garde les donnée des équipement précédant.

merci
Dans ce cas, il faut réinitialiser ces éléments au début de la procédure :

VB:
Dim val As Range
'RAB des contrôles
Me.TextBox_Ver.Text = ""
'etc.

Daniel
 

Discussions similaires

Réponses
5
Affichages
330

Statistiques des forums

Discussions
312 275
Messages
2 086 707
Membres
103 377
dernier inscrit
fredy45