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

sousou

XLDnaute Barbatruc
Bonjour.
Je pense que tu n'adoptes pas peut_être la bonne manière pour réaliser ton projet.
Une solution déjà testée,
dans une feuille paramètre tu fait un tableau de correpondance entre tes controls et les colonnes de chaque feuille

exemple:
user | feuille1 | feuill2
textbox1 |1 |2
textbox2 | 2 |3
ect

Avec ce genre de tableau il est facile de faire des boucles pour charger ou décharger le userform
 

New_VBA_User

XLDnaute Nouveau
Bonjour.
Je pense que tu n'adoptes pas peut_être la bonne manière pour réaliser ton projet.
Une solution déjà testée,
dans une feuille paramètre tu fait un tableau de correpondance entre tes controls et les colonnes de chaque feuille

exemple:
user | feuille1 | feuill2
textbox1 |1 |2
textbox2 | 2 |3
ect

Avec ce genre de tableau il est facile de faire des boucles pour charger ou décharger le userform


le soucis, c'set que je ne sais pas le faire, est-ce possible de faire un exemple tout simple pour comprendre.
merci
 

danielco

XLDnaute Accro
Bonjour,

Ajoute une feuille "Feuil1". En colonne B, la liste de tes champs. En colonne C, mets en regard le nom des contrôles correspondants :
Annotation 2019-09-09 123952.png

Utilise le code :
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
         .Cells(Ligne, I) = Me.Controls(Nom).Value
      End If
    Next I
  End With
End Sub

Cordialement.

Daniel
 

sousou

XLDnaute Barbatruc
RE
J'espère que cela va t'inspirer, même si il te manque des explications j'ai fait un peu vite (demande)

principe:
Une feuille param contient tous les nom des box, et le numero des colonnes correspondante dans les deux feuilles
Je n'ai rempli qu'une partie du tableau
un dbclik sur une ligne de la base, te renvoi les données dans le user
next et previous joue le même rôle,
save les sauve dans l'autre feuille
L'avantage de ce principe: Juste le tableau à mofifier quand tu veux changer quelques chose dans la structure
 

Pièces jointes

  • Test-projets.xlsm
    193.1 KB · Affichages: 13

New_VBA_User

XLDnaute Nouveau
RE
J'espère que cela va t'inspirer, même si il te manque des explications j'ai fait un peu vite (demande)

principe:
Une feuille param contient tous les nom des box, et le numero des colonnes correspondante dans les deux feuilles
Je n'ai rempli qu'une partie du tableau
un dbclik sur une ligne de la base, te renvoi les données dans le user
next et previous joue le même rôle,
save les sauve dans l'autre feuille
L'avantage de ce principe: Juste le tableau à mofifier quand tu veux changer quelques chose dans la structure

Salut,

le fichier ça marche bien, j'ai mis dans mon programme, ça marche nikel.

une question, pour la compréhension, pourquoi tu mets des n° dans les colonne B et C dan la feuille "Param"

comme on peut faire si on a déjà enregistré une ligne, ne pas enregistré la même ligne, en fait vérifier les doublons.

actuellement on enregistre la même ligne plusieurs fois.

si une ligne existe alors on le remplace.

Merci pour ton aide.
 

sousou

XLDnaute Barbatruc
RE
Avec la prmière colonne, tu charge le userform avec les données de la base
Avec la seconde, tu rempli la seconde feuille à partir du user, les colonnes ne sont nécessairement les mêmes

Pour ton doublon, Ca dépend te ton fonctionnement que je ne connais pas.
on peu ajouter un test pour voir si la ligne à copier existe déjà?
Mais dans ce cas ne faut-il pas charger toutes données existantes dans la feuille destination?
 

New_VBA_User

XLDnaute Nouveau
RE,
oui, c'est mieux de tout envoyé dans la feuille d'enregistrement.

par ex: on doit regarder si la ligne qu'on va enregistré est déjà existant dans la feuille "DataBase Application" on peut juste regarder dans la colonne A
Ex. si la valeur "10003005" existe alors on remplace toute la ligne.

Il ne faut pas qu'il y ait des doublons dans la feuille "DataBase Application"

j'espère c'est assez claire.

Merci
 

New_VBA_User

XLDnaute Nouveau
Bonjour,

Ajoute une feuille "Feuil1". En colonne B, la liste de tes champs. En colonne C, mets en regard le nom des contrôles correspondants :
Regarde la pièce jointe 1040066
Utilise le code :
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
         .Cells(Ligne, I) = Me.Controls(Nom).Value
      End If
    Next I
  End With
End Sub

Cordialement.

Daniel

Cette solution marche aussi,

comment pouvons nous faire aussi pour le Checkbox, si le chekbox est coché alors on écris la valeur "YES dans la colonne correspondante.

Ex: si "Checkbox_Printing est coché, alors on écris "YES" dans la colonne BV.

il y a 8 checkbox

Merci
 

danielco

XLDnaute Accro
Pas testé :

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 Application.Left(Nom, 8) = "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
Pas testé :

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 Application.Left(Nom, 8) = "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


j'ai une erreur pour Application.Left.

erreur c'et:" Wrong n° of arguments or invalide property assignment"
 

danielco

XLDnaute Accro
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
 

Discussions similaires

Réponses
5
Affichages
342

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2