Saisie BDD :lecture/sauvegarde [Résolu]

Signaler
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
-
Bonjour,

Fichier d’exemple : https://www.cjoint.com/c/IHBnGhAeKWI

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.

Je tape la valeur d’une ligne dans le textbox « Epuipement » et on vient charger les donné dans les textbox prévue dans frame « Caractéristique » 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é, la ligne sélectionné à un tour de retard je ne sais pas pourquoi ?

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 « Epuipement » 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.



Configuration: Windows / Edge 18.17763

4 réponses

Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656
bonjour, veux-tu dire que ta procédure TextBox_EquipementSAP_Change ne fait pas ce que tu souhaites?
peux-tu expliquer à nouveau en mentionnant tes procédures dans la description?
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

je pense alors que tu peux appliquer ma suggestion en #10.
n'oublie pas d'adapter le contenu des premières lignes pour que cela corresponde aux nom de tes champs.
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020

par exemple, dans TextBox_EquipementSAP_Change, tu pourrais faire une boucle sur toutes les colonnes, en allant chercher les noms des champs en tête de colonnes, du genre
dim ncol as long
for ncol = 1 to 100
    Me.Controls("TextBox_" + CStr(.Cells(1, ncol))) = .Cells(nom.Row, ncol)
next ncol
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Bonjour yg_be
Ca roule?

Cote rapidite excecution pour toutes recherches, je lui ai remis un code qui fait le boulot et le gars ne le teste meme pas.....

Pour son "probleme" textbox equipement, apparemment ca fait ce qu'il a demande, mais .......
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020

bonjour f894009, tout va!
il y a une autre discussion en cours sur (presque) le même sujet?
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Re,
ca flotte.

Rectification:
"Cote rapidite", est p'tete pas a lui qui j'ai remis un code…...

Pour le reste du code, a fait ce qu'il pensait etre bon ou qui marchait, d'ou des choses bizares ......
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656
qu'essaies-tu de faire ainsi?
            val.Select
            Me.TextBox_EquipementSAP.Value = Selection.Offset(1, 0).Value  ' Displays the value of a next line (down)
            val.Select

que veux-tu dire par "la ligne sélectionné à un tour de retard"?
peut-être voudrais-tu faire:
val.Offset(1, 0).Select
Me.TextBox_EquipementSAP.Value = Selection.Value
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

il faut remplacer la ligne 10 par la ligne que je propose.
je pense qu'il est inutile de traiter la colonne 1, qu'en penses-tu?
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

explication:
.Cells(1, ncol)
permet d'obtenir le contenu de la cellule en ligne 1 et en colonne ncol de l'onglet que tu as précisé dans le
with

CStr()
convertit le contenu en caractères (si jamais c'était un nombre)
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
>
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020

.Cells(2, ncol)

j'ai mis 2 car on commence à récupérer les donnée à partir de la ligne 2, mais j'ai tjrs le même erreur qui vient quand j'exécute.
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

il faut laisser 1, car on récupère le nom des champs sur la première ligne.
as-tu adapté le contenu de la première ligne de la feuille Filtred data SAP pour que cela corresponde aux noms de tes champs?
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Re,

Autant pour moi, Controls avec un s dans le code que j'ai ecrit. je viens de rectifier….
Messages postés
6827
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
7 juillet 2020
530
Bonjour à tous,

Le plus simple, mettre la propriété TabIndex de chaque TextBox en fonction des colonnes:

TextBox_EquipementSAP = TabIndex 0

TextBox_Sortfield= TabIndex 1

etc.

et voici le code:

 Dim Ctrl As Control
For Each Ctrl In Controls
    If TypeName(Ctrl) = "TextBox" Then
Ctrl.Object.Value = Cells(2, Ctrl.TabIndex + 1) 'ligne 2 a adapter
    End If
Next Ctrl


Si cela avait été fait lors de la conception!!!

La programmation c'est 80% de cogitation à la préparation et 20 % pour le code
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Bonjour a vous deux,

L' idee de mettre en nom de champs les noms d'objet est le mieux vu la soupe au niveau de l'ordre des champs.
Cependant, il lui faudra tester si CheckBox mettre a True/False en fonction de la valeur X/Vide du dit champ

Bonne chance…….
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020

bonjour f894009, merci. je m'attendais à devoir faire une exception pour les checkbox, et j'aurais probablement proposé quelque chose de plus compliqué pour détecter le type de Control.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
>
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020

oui, la solution 58 marche, mais tout les checkbox sont cochés et sont grisé, il y a un moyen des les activer ou pas selon fonction de la valeur True/Vide du champ concerné.

j'ai essayé qqch comme ça mais je ne marche pas, je ne suis pas sure que c'est la bonne manière de faire.

    For Each Ctrl In Me.Controls
        If Ctrl.Name <> "YES" Then
            If TypeName(Ctrl) = "CheckBox" Then Ctrl.Value = False
        Else
            Ctrl.Value = True
        End If
        
    Next Ctrl


merci de l'aide
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020
656 >
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

tu ne montres qu'une partie de ce que tu as essayé: où l'as-tu mis dans ton code?
tu n'expliques pas comment déterminer, à partir de la valeur de la cellule, si la checkbox doit être cochée ou pas.
suggestion (sans savoir ce que tu veux exactement obtenir):
Private Sub Fill_Data_Fields()
Dim noms As Range
Dim ncol2 As Long, ctrl As Control
 ' Load the data from the DataBase Application sheet
With ThisWorkbook.Sheets("DB Application")
    Set noms = .Range("A3", .Cells(Rows.Count, "A").End(xlUp)).Find( _
    What:=Me.TextBox_EquipementSAP.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious)
    If Not noms Is Nothing Then
        For ncol2 = 24 To 67
            Set ctrl = Me.Controls(cstr(Sheets("Criteria Fields").Cells(1, ncol2)))
            If TypeName(ctrl) = "CheckBox" Then
                ctrl = (.Cells(noms.Row, ncol2).Value = "YES")
            Else
                ctrl = .Cells(noms.Row, ncol2).Value
            End If
        Next ncol2
    End If
End With
End Sub
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019
>
Messages postés
11489
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 juillet 2020

ça fonctionne, c'est super,

Merci beaucoup.
Messages postés
82
Date d'inscription
mardi 27 août 2019
Statut
Membre
Dernière intervention
3 octobre 2019

Merci à tous pour votre aide.

C'est sympa de compter sur une vrai communauté VBA :)