IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Création d'entrée sur boucle - Conception base [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut Création d'entrée sur boucle - Conception base
    Bonjour le Forum,

    Je suis en pleine conception d'une Base de Donnée, pour une gestion de Stock / Production.

    Pour l'instant je coince sur un gros point qui est le suivant:
    - Pour un produit "A" (une référence), "EX" exemplaires, ce qui donne "PAL" nbre de palettes
    - J'ai donc une "TABLE Produit" dans laquelle j'ai toutes ces informations sur chaque produit

    - Il me faudrait créer une "Table PAL" avec les informations par palette, ce qu'il y a sur chaque palette ....

    Comment créer une "Table PAL" pour chaque Palette, avec les infos ?

    Exemples : Produit A = DEPLIANT, Exemplaires EX = 100.000 Ex., Nbre de PAL = 10 Palettes pleines (Soit 9 pleines + 1 Palette solde)

    Avec Excel, j'avais utilisé une boucle pour créer chaque entrée(PAL)
    For i = 1 to Nbre de Pal.

    Comment faire avec Access ?
    J'aimerai utiliser ACCESS, pour que toutes les données soient centralisées... Dans une TABLE
    Plus simple par la suite que des feuilles de calculs par produit

    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Auriez-vous un exemple de contenu et ce que vous souhaitez obtenir ?

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  3. #3
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Bonjour argyronet,

    Dans les grandes lignes
    Nom : SnipImage.JPG
Affichages : 125
Taille : 141,0 Ko

    Dans une "Table" j'ai le dossier global - Nbre d'ex, conditionnement etc... Qui va me donner le nbre de palette (A3:L3 pour exemple)

    J'aimerai créer une "requete ou autre" qui me crée le détail du dossier (A6: N19 pour exemple), d'après le nbre de palette "qui va être ma variable"
    En gros, si dans la TABLE GLOBAL, le calcul me donne 5 Palettes, lors de l'execution de la procédure.... Je vais avoir 5 entrées dans ma "TABLE DETAILS"

    Actuellement, je procède la maniere suivante. DU BRICOLAGE
    TABLE GLOBAL avec une requete sur une TABLE Nr de Pal Temporaire (Numérotée de 1 à 1000), avec une formule qui me donne le nombre d'exemplaires sur la palette.
    En gros, 50.000 Ex. à 10.000 Ex. par palette, ca me fait 5 palette. La 6eme palette sera à -10.000 Ex.
    Je filtre cette requete avec >0, il ne retient que les palettes positives.

    Je fonctionne aussi sous Excel avec une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For X = 1 To nbrepal Step 1
     .....
     If exPal * X < extotal _
                 Then Cells(X + 3, 2) = exPal _
                 Else: Cells(X + 3, 2) = extotal - (X - 1) * exPal  'Exemplare auf der Palette
    Bref, il me faudrait construire une procédure similaire dans ACCESS !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    Dim xlapp       As Excel.Application
    Dim xlsheet     As Excel.Worksheet
    Dim xlBook      As Excel.Workbook
    Dim X           As Integer
    Dim anzahlPal   As Integer
    Dim Auflage As Long, exPal As Long, ExVB As Long, VBlage As Long, lagPal As Long
    Dim aufTrag As String, matchCode As String, verSSion As String, Verpackung As String
    Dim Adresse As String, straSse As String, oRt As String
    Dim belege As Long, auflageohne As Long
    Dim nrcodebarre As Integer
     
    On Error GoTo gestionerreur
    Set xlapp = Excel.Application
     
    Call transfin
     
    Worksheets("historik").Activate
    With Worksheets("historik")
         nrcodebarre = Application.WorksheetFunction.Max(Columns(1))
    End With
     
    Set xlBook = xlapp.ActiveWorkbook
     
    If USFEintrag.belege = "" Then USFEintrag.belege.Value = "0" Else
     
    aufTrag = USFEintrag.Objekt
    matchCode = USFEintrag.Auftragnr & " / " & USFEintrag.HeftNr
    verSSion = USFEintrag.Version
    Auflage = USFEintrag.Auflagegesamt
    belege = USFEintrag.belege
    Adresse = USFEintrag.Adresse.Column(1)
    straSse = USFEintrag.Adresse.Column(2)
    oRt = USFEintrag.Adresse.Column(3)
    auflageohne = Auflage - belege
    Verpackung = USFEintrag.Verpackung
     
    Select Case USFEintrag.ExVB
            Case Is = ""
                anzahlPal = InputBox("Anzahl von Paletten // Wickel")
                If anzahlPal < 1 Then
                MsgBox "Ich brauche min. 1 Pal."
                Exit Sub
                Else
                End If
     
            Case Else
                ExVB = USFEintrag.ExVB
                If USFEintrag.VBlage = "" Then VBlage = "1" Else VBlage = USFEintrag.VBlage
                If USFEintrag.Lage = "" Then lagPal = "1" Else lagPal = USFEintrag.Lage
                exPal = ExVB * VBlage * lagPal
                anzahlPal = WorksheetFunction.RoundUp((auflageohne / exPal), 0)
     
    End Select
     
     
    'Ajouter une feuille de calcul
        Set xlsheet = xlBook.Worksheets.Add
        xlsheet.name = "pzt_Liste"
     
    'le titre - Entete
        xlsheet.Cells(1, 1) = "Auftrag"
        xlsheet.Cells(1, 2) = matchCode & "_" & aufTrag
        xlsheet.Cells(2, 1) = "Split"
        xlsheet.Cells(2, 2).NumberFormat = "@"
        xlsheet.Cells(2, 2) = verSSion
        xlsheet.Cells(2, 4) = "Auflage"
        xlsheet.Cells(2, 5) = Auflage
        xlsheet.Cells(2, 5).NumberFormat = "###,###"
        xlsheet.Cells(2, 8).FormulaLocal = "=summe(B:B)"
        xlsheet.Cells(2, 8).NumberFormat = "###,###"
        xlsheet.Cells(1, 7) = Date$
        xlsheet.Cells(1, 8) = Time$
        xlsheet.Cells(1, 9) = Environ("Username")
        xlsheet.Cells(3, 1) = "Palette Nr."
     
        Select Case USFEintrag.Verpackung.Value
            Case Is = ("Gewickelt")
                xlsheet.Cells(3, 2) = "Exemplare im Wickel"
                xlsheet.Cells(3, 3) = ""
                xlsheet.Cells(3, 4) = ""
                xlsheet.Cells(3, 5) = ""
                xlsheet.Cells(3, 6) = ""
                xlsheet.Cells(3, 7) = ""
     
            Case Is = ("auf Stange")
                xlsheet.Cells(3, 2) = "Exemplare auf der Palette"
                xlsheet.Cells(3, 3) = "Exemplare / Stange"
                xlsheet.Cells(3, 4) = "Stangen volle Palette"
                xlsheet.Cells(3, 5) = "Anzahl Stange auf diese Palette"
                xlsheet.Cells(3, 6) = ""
                xlsheet.Cells(3, 7) = "Ex. in der letzte Stange"
     
     
            Case Is = ("Plano (Roto5)")
                xlsheet.Cells(3, 2) = "Exemplare auf der Palette"
                xlsheet.Cells(3, 3) = ""
                xlsheet.Cells(3, 4) = ""
                xlsheet.Cells(3, 5) = ""
                xlsheet.Cells(3, 6) = ""
     
            Case Else
                xlsheet.Cells(3, 2) = "Exemplare auf der Palette"
                xlsheet.Cells(3, 3) = "Exemplare im VB"
                xlsheet.Cells(3, 4) = "VB/Lage"
                xlsheet.Cells(3, 5) = "Anzahl VB auf diese Palette"
                xlsheet.Cells(3, 6) = "Volle Lagen"
                xlsheet.Cells(3, 7) = "+ Pakete"
     
      End Select
     
        xlsheet.Cells(3, 8) = "Verpackung"
        xlsheet.Cells(3, 9) = "Unterschrift"
        xlsheet.Cells(3, 10) = "Matchcode"
        xlsheet.Cells(3, 11) = "Auftrag"
        xlsheet.Cells(3, 12) = "Split"
        xlsheet.Cells(3, 13) = "Auflage"
        xlsheet.Cells(3, 14) = "Adresse"
        xlsheet.Cells(3, 15) = "Strasse"
        xlsheet.Cells(3, 16) = "Ort"
        xlsheet.Cells(3, 17) = "AnzahlPaletten"
        xlsheet.Cells(3, 18) = "CodePalette"
     
    'debut de la boucle
     
    For X = 1 To anzahlPal Step 1
     
     Select Case USFEintrag.ExVB
       Case Is = ""
            Cells(X + 3, 1) = X
            Cells(X + 3, 3) = ""
            Cells(X + 3, 4) = ""
            Cells(X + 3, 8) = Verpackung
            Cells(X + 3, 10) = matchCode
            Cells(X + 3, 11) = aufTrag
            Cells(X + 3, 12).NumberFormat = "@"
            Cells(X + 3, 12) = verSSion
            Cells(X + 3, 13) = Auflage
            Cells(X + 3, 13).NumberFormat = "###,###"
            Cells(X + 3, 14) = Adresse
            Cells(X + 3, 15) = straSse
            Cells(X + 3, 16) = oRt
            Cells(X + 3, 17) = anzahlPal
            Cells(X + 3, 2).NumberFormat = "###,###"
            If exPal * X < auflageohne _
            Then Cells(X + 3, 2) = exPal _
            Else: Cells(X + 3, 2) = auflageohne - (X - 1) * exPal 'Exemplare auf der Palette
     
     
        Case Else
            Cells(X + 3, 1) = X
            Cells(X + 3, 8) = Verpackung
            Cells(X + 3, 10) = matchCode
            Cells(X + 3, 11) = aufTrag
            Cells(X + 3, 12).NumberFormat = "@"
            Cells(X + 3, 12) = verSSion
            Cells(X + 3, 13) = Auflage
            Cells(X + 3, 13).NumberFormat = "###,###"
            Cells(X + 3, 14) = Adresse
            Cells(X + 3, 15) = straSse
            Cells(X + 3, 16) = oRt
            Cells(X + 3, 17) = anzahlPal
            Cells(X + 3, 2).NumberFormat = "###,###"
            If exPal * X < auflageohne _
                 Then Cells(X + 3, 2) = exPal _
                 Else: Cells(X + 3, 2) = auflageohne - (X - 1) * exPal 'Exemplare auf der Palette
     
                 Select Case USFEintrag.Verpackung.Value
                     Case Is = ("Gewickelt")
                         Cells(X + 3, 3) = "" 'ExVB
                         Cells(X + 3, 4) = ""
                         'Cells(X + 3, 5).FormulaLocal = "=aufrunden((B" & X + 3 & ") /(C" & X + 3 & ");0)" 'Anzahl VB auf d palette
                         Cells(X + 3, 5) = ""
                         Cells(X + 3, 6) = ""
                         Cells(X + 3, 7) = ""
                         'If Cells(X + 3, 2) = Cells(X + 3, 3) * Cells(X + 3, 5) Then Cells(X + 3, 7) = "" _
                         'Else Cells(X + 3, 7) = Cells(X + 3, 2) - (Cells(X + 3, 3) * (Cells(X + 3, 5) - 1))
     
                     Case Is = ("auf Stange")
                         Cells(X + 3, 3) = ExVB
                         Cells(X + 3, 4) = VBlage
                         Cells(X + 3, 5).FormulaLocal = "=aufrunden((B" & X + 3 & ") /(C" & X + 3 & ");0)" 'Anzahl VB auf d palette
                         Cells(X + 3, 6) = ""
                         If Cells(X + 3, 2) = Cells(X + 3, 3) * Cells(X + 3, 5) Then Cells(X + 3, 7) = "" _
                         Else Cells(X + 3, 7).FormulaLocal = "=aufrunden((B" & X + 3 & ") - (C" & X + 3 & ")*((E" & X + 3 & ")-1);0)"
     
                     Case Is = ("Plano (Roto5)")
                         Cells(X + 3, 3) = ""
                         Cells(X + 3, 4) = ""
                         Cells(X + 3, 5) = ""
                         Cells(X + 3, 6) = ""
                         Cells(X + 3, 7) = ""
     
                     Case Else
                          Cells(X + 3, 3) = ExVB
                          Cells(X + 3, 4) = VBlage
                          Cells(X + 3, 5).FormulaLocal = "=aufrunden((B" & X + 3 & ") /(C" & X + 3 & ");0)" 'Anzahl VB auf d palette
                          Cells(X + 3, 6).FormulaLocal = "=abrunden((E" & X + 3 & ") / " & VBlage & ";0)" 'Volle Lagen
                          Cells(X + 3, 7).FormulaLocal = "=aufrunden(((B" & X + 3 & ")-((F" & X + 3 & " * " & VBlage & ")* C" & X + 3 & ")) / " & ExVB & " ;0)" 'Anzahl Pakete
     
                   End Select
         End Select
     
         'Creation du code
          Cells(X + 3, 18).NumberFormat = "@"
          Cells(X + 3, 18) = Format(USFEintrag.Auftragnr, "00000") & Format(USFEintrag.HeftNr, "0000") & _
          Format(nrcodebarre, "000") & Format(X, "000")
     
      Range("A" & X + 4 & ":Q" & X + 4 & "").Select  ' inclus la palette BELEGE
             With Selection
                  .Borders(xlEdgeBottom).LineStyle = xlContinuous
                  .Borders(xlEdgeBottom).Weight = xlThin
                  .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
                  .Borders(xlEdgeTop).LineStyle = xlContinuous
                  .Borders(xlEdgeTop).Weight = xlThin
                  .Borders(xlEdgeTop).ColorIndex = xlAutomatic
              End With
     
    Next X

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Si votre table est quasi identique à la feuille présentée, une simple requête de regroupement suffit à répondre à votre besoin :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine, Count(PalUnique) AS NbrePal
    FROM boldair67
    GROUP BY Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine;

    avec éventuellement un WHERE sur le MatchCode...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  5. #5
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Bonjour Argyronet,

    Oui les deux tables sont quasi identiques, par contre c'est exactement l'inverse qu'il me faut...
    C'est le "détail" qu'il me faut construire, pas le résumé qui lui est entrée par l'utilisateur

    Un style de dé-groupage

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui mais comment obtenez-vous
    1. un taux à 19.600 ou 12.100 ?
    2. un Nbre de couches plein à 7 et à 4 ?


    avec cette seule ligne ?
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  7. #7
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Un simple calcul dans le formulaire de saisie

    Palette pleine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.ExPal = Me.Ex___Paq * Me.Paq_Couche * Me.Nbre_Couche
     
    Me.nbrePal = WorksheetFunction.RoundUp((Me.Tirage.Value / Me.ExPal.Value), 0)
    Pour la derniere palette, en gros (Tirage) - (nbrePalette - 1 * ExPal)
    =([Tirage])-(([nbrePal]-1)*[ExPal])

    L'image est en Allemand,Nom : SnipImage.JPG
Affichages : 156
Taille : 11,5 Ko

    J'ai des champs "Fond Blanc de gauche" que l'on renseigne
    Champs "Fond blanc du centre" qui se calcul
    Et champs "Fonc gris" calcul automatique sur les données du formulaire - A titre d'infos

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui, donc en admettant que vous ayez le formulaire idoine pour obtenir les valeurs absentes et créées dynamiquement, vous pouvez alors vouis inspirer de cet exemple...

    On suppose que la table DetailHistorik existe, evidemment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Option Compare Database
    Option Explicit
     
    Sub DetailHistorik()
     
    Const SQL_BASE                                         As String = "SELECT Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine, NbrePal FROM Historik WHERE Matchcode='%1';"
    Dim strSQL                                             As String
    Dim strInputMatchCode                                  As String
    Dim oRS                                                As DAO.Recordset
    Dim oDB                                                As DAO.Database
    Dim lngNBPal                                           As Long
    Dim P                                                  As Long
    Dim F                                                  As Integer
    Dim strSQLInsert                                       As String
    Dim strValues                                          As String
    Dim strPalUnique                                       As String
     
        '**** Test ****
        strInputMatchCode = InputBox("Quel code produit ?", "Précisez...", "30951/1608")
        'strInputMatchCode = InputBox("Quel code produit ?", "Précisez...")
        If Len(strInputMatchCode) Then
            strSQL = Replace(SQL_BASE, "%1", strInputMatchCode)
            Set oDB = CurrentDb
            Set oRS = oDB.OpenRecordset(strSQL, dbOpenDynaset)
            With oRS
                If Not .EOF Then
                    lngNBPal = Nz(.Fields("NbrePal"), 0)
                    strValues = ""
                    If lngNBPal Then
                        For P = 1 To lngNBPal
                            'pas le dernier champ 'NbrePal'
                            For F = 0 To .Fields.Count - 2
                                strValues = strValues & EnquoteString(.Fields(F).Value)
                            Next
                            'A peaufiner (je ne sais pas comment on obtiet l'info)
                            strPalUnique = "'61491010" & Format(P, "00") & "'"
     
                            strSQLInsert = "INSERT INTO DetailHistorik (Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine, PalUnique)"
                            strSQLInsert = strSQLInsert & "VALUES(" & strValues & strPalUnique & ");"
                            oDB.Execute strSQLInsert, dbFailOnError
                            strValues = ""
                            strPalUnique = ""
                        Next
                    Else
                        MsgBox "Aucun nombre de palette n'a été spécifié pour " & strInputMatchCode, vbExclamation
                        .Close
                    End If
     
                Else
                    MsgBox "Aucun produit ne correspond à " & strInputMatchCode, vbExclamation
                    .Close
                End If
            End With
     
        Else
            MsgBox "Un code est requis !", vbExclamation
        End If
     
    End Sub
     
    Private Function EnquoteString(ByVal FValue As Variant) As String
        If IsNumeric(FValue) Then
            EnquoteString = Replace(FValue, ",", ".") & ", "
        ElseIf IsDate(FValue) Then
            EnquoteString = Format(CDate(FValue), "mm/dd/yyyy") & ", "
        Else
            EnquoteString = "'" & FValue & "', "
        End If
    End Function
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  9. #9
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Aaaaa, super je commence à y voir plus clair !

    Donc on peut créer des plusieurs entrées "nbredepal" dans une table Y à partir d'une table X sur un nombre variable "nbredepal"
    Un genre de boucle. Comme dans Excel
    Fox x = 1 to nbredepal step 1

    Est-ce que vous pouvez m'expliquer un peu le code ?
    Est-ce que je peux dire à Access, tel Champ Table X va dans tel Champ Table Y ?

    Merci pour votre aide

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Oui, puisque l'on se sert se cette valeur pour faire de l'INSERT en masse.
    Est-ce que je peux dire à Access, tel Champ Table X va dans tel Champ Table Y ?
    Oui,...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Table1.ChampA AS ChampB, Table2.ChampA AS ChampC FROM Table1 WHERE Table1.ChampClé=Valeur;
    voici le code commenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    Option Compare Database
    Option Explicit
     
    Sub DetailHistorik()
    'faire référence à DAO (3.6 ou +)
    Dim oRS                                                As DAO.Recordset
    Dim oDB                                                As DAO.Database
     
    Const SQL_BASE                                         As String = "SELECT Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine, NbrePal FROM Historik WHERE Matchcode='%1';"
    Dim strSQL                                             As String
    Dim strInputMatchCode                                  As String
    Dim lngNBPal                                           As Long
    Dim P                                                  As Long
    Dim F                                                  As Integer
    Dim strSQLInsert                                       As String
    Dim strValues                                          As String
    Dim strPalUnique                                       As String
     
        '****Pour Test uniquement****
        strInputMatchCode = InputBox("Quel code produit ?", "Précisez...", "30951/1608")
        'strInputMatchCode = InputBox("Quel code produit ?", "Précisez...")
     
        'S'il y a une chaîne inscrite
        If Len(strInputMatchCode) Then
            'On remplace le %1 par cette valeur pour monter la condition WHERE
            strSQL = Replace(SQL_BASE, "%1", strInputMatchCode)
            'On ouvre une instance de la base de données en cours
            Set oDB = CurrentDb
            'On ouvre le jeu d'enregistrements
            Set oRS = oDB.OpenRecordset(strSQL, dbOpenDynaset)
            'Avec ce jeu...
            With oRS
                'Tant qu'il y a des lignes
                If Not .EOF Then
                    'On prend la valeur du nombre de palettes
                    lngNBPal = Nz(.Fields("NbrePal"), 0)
                    'On initialise la chaine
                    strValues = ""
                    'S'il y a des palettes
                    If lngNBPal Then
                        'Pour n palettes
                        For P = 1 To lngNBPal
                            'Pour chaque champs de la table (le -2 signifie qu'on ne veut pas le dernier)
                            For F = 0 To .Fields.Count - 2
                                'On cocatène la chaîne via la fonction EnquoteString()
                                strValues = strValues & EnquoteString(.Fields(F).Value)
                            Next
                            'A peaufiner (je ne sais pas comment on obtinet l'info)
                            strPalUnique = "'61491010" & Format(P, "00") & "'"
                            'On construit la chaîn INSERT
                            strSQLInsert = "INSERT INTO DetailHistorik (Matchcode, Adresse, Tirage, ExPaket, Couches, [Paq Couche], ExPal, NbreDePal, NbreCouchePleine, PalUnique)"
                            'avec les valeur des champs + le compteur
                            strSQLInsert = strSQLInsert & "VALUES(" & strValues & strPalUnique & ");"
                            'On execute la requête
                            oDB.Execute strSQLInsert, dbFailOnError
                            'On réinitialise les chaines
                            strValues = ""
                            strPalUnique = ""
                        Next
                    Else
                        'Pas de valeur définie
                        MsgBox "Aucun nombre de palette n'a été spécifié pour " & strInputMatchCode, vbExclamation
                    End If
     
                Else
                    MsgBox "Aucun produit ne correspond à " & strInputMatchCode, vbExclamation
                End If
                .Close
            End With
     
        Else
            MsgBox "Un code est requis !", vbExclamation
        End If
        'on libère et ferme les objets
        Set oRS = Nothing
        oDB.Close
        Set oDB = Nothing
    End Sub
     
    Private Function EnquoteString(ByVal FValue As Variant) As String
        If IsNumeric(FValue) Then
            EnquoteString = Replace(FValue, ",", ".") & ", "
        ElseIf IsDate(FValue) Then
            EnquoteString = Format(CDate(FValue), "mm/dd/yyyy") & ", "
        Else
            EnquoteString = "'" & FValue & "', "
        End If
    End Function
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  11. #11
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Il y a un soucis avec le code ....

    oRS.Execute ____ Il doit y avoir une reference(Bibliotheque) à activer !!!

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Ce n'est pas oRS mais oDB
    oDB = Database - c'est la base qui exécute.

    Note:
    Dans le bloc de code, j'ai écrit :
    Citation Envoyé par Argy
    'faire référence à DAO (3.6 ou +)
    Attention aux priorités si vous avez également ADO (que vous pouvez décocher si vous n'en avez pas besoin).

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  13. #13
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Propriété ou Méthode non connu

    Microsoft DAO 3,6 - activé

    Cette ligne en surbrillance. Si j'essaye de la réecrire, aprés oDB. --- Il y a pas la fonction "execute"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRS.Execute strSQLinsert, dbFailOnError

  14. #14
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Humm, j'insiste et réitère

    Ce n'est pas oRS mais oDB

    oDB = Database - c'est la base qui exécute.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  15. #15
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Yes, j'avais pas vu votre post .... dsl Résolu

    Bon, j'ai essayé de comprendre le tout pour pouvoir evoluer et remouliner le bloc à mes besoins.
    Par contre, pour l'instant je bloc sur
    ERREUR de SYNTAX - INSERT INTO - 3134

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub testpourcomprehension()
     
    Dim strSQL                             As String
    Dim strSQLinsert                       As String
    Dim strInputMatchCode                  As String
    Dim oRS                                As DAO.Recordset
    Dim oDB                                As DAO.Database
    'Dim lngNBPal                           As Long
    'Dim P                                  As Long
     
     
    strSQL = "SELECT T_Auftraege.ObjektNr, T_Auftraege.HeftNr FROM T_Auftraege WHERE T_Auftraege.Matchcode='%1';"
     
    strInputMatchCode = InputBox("Quel code produit ?", "Précisez...", "74/1605")
     
     If Len(strInputMatchCode) Then
            strSQL = Replace(strSQL, "%1", strInputMatchCode)
     End If
     
            Set oDB = CurrentDb
            Set oRS = oDB.OpenRecordset(strSQL, dbOpenDynaset)
     
     
    strSQLinsert = "INSERT INTO T_Paletten ( ObjektNr, HeftNr );"
     
    oDB.Execute strSQLinsert, dbFailOnError
     
    'INSERT INTO T_Paletten ( ObjektNr, HeftNr )
    'SELECT T_Auftraege.ObjektNr, T_Auftraege.HeftNr
    'FROM T_Auftraege
    'WHERE (((T_Auftraege.Matchcode)="74/1605"));
     
    End Sub
    J'ai copié en gros le code de l'éditeur de requête, avant de continuer avec la boucle.....

  16. #16
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Dans une clause INSERT il faut un VALUES

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL="INSERT INTO TableClasse (IDEleve, NomPrenom, Age) VALUES (" & E & ", '" & strNomPrenom & "', " & intAge &");"
    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  17. #17
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Bonjour Argyronet,

    Merci pour ton aide, j'ai adapté ton code à ma base et ca fonctionne presque bien.

    - Reste le soucis de "La date". Dès que j'inserts une date dans mon sgl ... Boum ca coince. "Conflit"

    -Autre question, concernant le CodePal. Est-ce que je peut faire du calcul dans ce champ
    Champ "CodePal" = & champ1 & pal &
    pal = pal + 1 - pour numéroter les palettes 1, 2, 3 etc...

  18. #18
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par boldair67 Voir le message
    Reste le soucis de "La date". Dès que j'inserts une date dans mon sgl ... Boum ca coince. "Conflit"
    Pouvez-vous expliquer ce que vous entendez par conflit ?

    Citation Envoyé par boldair67 Voir le message
    -Autre question, concernant le CodePal.
    Est-ce que je peut faire du calcul dans ce champ Champ "CodePal" = & champ1 & pal &
    pal = pal + 1 - pour numéroter les palettes 1, 2, 3 etc...
    Du fait que l'on soit dans une boucle, on peut concaténer la valeur du compteur à ce que l'on veut.
    C'est ce que j'ai écrit ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'A peaufiner (je ne sais pas comment on obtient l'info)
                            strPalUnique = "'61491010" & Format(P, "00") & "'"
    P est le compteur...

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

  19. #19
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2016
    Messages : 100
    Points : 49
    Points
    49
    Par défaut
    Yes, pour le compteur c'est résolu - Unique pour palette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strPalUnique = Nz(.Fields("MegalithNr"), 0) & Format(Nz(.Fields("Produktteil"), 0), "00") & Format(P, "000")
    Par contre la date
    Erreur de syntaxe '29.03.201' --- Il manque le"6"
    Par contre le debug.print est correct

    'Armand', 74, 1605, '74/1605', 61270, 'Laura Wohnen Kreativ', 2, 00, 50000, 500, 4, 1, 5000, 1, 1, 39, 29.03.2016,

  20. #20
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 169
    Points
    12 169
    Billets dans le blog
    5
    Par défaut
    Telle qu'écrite ici, la date n'est pas une date mais un nombre décimal et donc, les points sont considérés comme une décimale vu par SQL.
    • soit vous gardez ce format, ce qui suppose que le champ cible est Texte et non Date auquel cas il faut l'enquoter de '29.03.2016' (Code ASCII 39) ;
    • soit vous l'affectez à un champ Date auquel cas il faut le formater en mm/dd/yyyy et l'enquoter de #03/29/2016#.


    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0
    *** Je recherche des profils (2 ans min.) Java EE, Fullstack, Front, .Net, Mobile... pour CDI ***

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [conception] Base de données sur le football
    Par Kakine dans le forum Modélisation
    Réponses: 25
    Dernier message: 06/01/2007, 02h27
  2. Réponses: 3
    Dernier message: 11/06/2006, 12h09
  3. Avis sur la conception de ma base de données.
    Par perlgirl dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 10/11/2005, 21h47
  4. Besoin d'aide sur la conception d'un base de données
    Par lordgodgiven dans le forum Modélisation
    Réponses: 1
    Dernier message: 01/10/2005, 16h51
  5. Recherche Livre / Conseils sur la conception de Base
    Par Yeuma dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 02/01/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo