bonjour a tous,

Voila j'ai un petit probleme sur un programme VBA (toujours le meme, sa fait plusieurs sujet que je poste )

Donc je dois enregistrer des NumIntervenant et NumTache d'excel vers acces dans une table PARTICIPER, j'ai donc fait un programme en VBA, sa marche mais le seul probleme c'est que le programme enregistre dans la base de donnée seulement le premier NumIntervenant et le premier NumTache mais pas les autres (en gros il ne passe pas a la ligne suivante), donc il doit y avoir un probleme de boucle surement dans mon programme...

Mon code :

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
'=======variable globale du programme =======
 
'déclaration de la variable connexion
Public connexion As ADODB.Connection
Public Const piloteBase As String = "Microsoft.Jet.Oledb.4.0"
 
'fait le lien avec la base de donnée Gestproj
Public Const cheminBase As String = "chemin de ma base"
 
'déclaration de la variable RECAP en tant que chaine de charactere qui prend comme valeur
'"RECAP"(feuille de travaille)
Public Const RECAP As String = "RECAP"
' ligne du tableau ou il y a le premier numéro intervenants
Public Const lgDepartNumIntervenant = 12
'colonne du tableau ou il y a les numéros des taches
Public Const colNumTache = 7
'colonne du tableau ou il y a les numéros d'intervenants
Public Const colNumIntervenant = 6
Sub ouvertureBase()
 
    ' Teste pour savoir si le chemin est accessible à la base de donnée
    If Len(Dir("chemin de ma base")) > 0 Then
        ' Déclaration de la variable de connexion
        Set connexion = New ADODB.Connection
 
        'Définition du pilote de connexion
        connexion.Provider = piloteBase
 
        'Définition de la chaîne de connexion
        connexion.ConnectionString = "chemin de ma base"
 
        'Ouverture de la base de données
        connexion.Open
    End If
End Sub
'fermeture de la base
Sub fermetureBase()
    connexion.Close
End Sub
 
Sub AjouterIntervenant()
 
'déclaration des données a enregistrer
Dim NumIntervenant As Long
Dim NumTache As Integer
 
'variable necessaire pour le traitement de l'enregistrement
 
'indice de parcours du tableau des employés (ligne en cours qui est traité)
Dim lgIntervenantEnCour As Integer
 
'l'enregistrement
 
'initialisation au premier Intervenant a traiter
lgIntervenantEnCour = lgDepartNumIntervenant
 
NumIntervenant = Worksheets(RECAP).Cells(lgIntervenantEnCour, colNumIntervenant)
While (NumIntervenant <> 0)
 
    'récupération des informations à enregister dans la base de données dans la colonne "colNumTache"
    NumTache = Worksheets(RECAP).Cells(lgDepartNumIntervenant, colNumTache)
 
    'enregistrement de l'intervenant dans la base de données : appel du sous-programme EnregistrerIntervenant()
    Call EnregistrerIntervenant(NumIntervenant, NumTache)
 
    'Passage à la ligne suivante, pour enregistrer l'intervenant suivant
    lgIntervenantEnCours = lgIntervenantEnCours + 1
    'écrasement des données présente dans NumIntervenant pour le passage a la ligne suivante
     NumIntervenant = Worksheets(RECAP).Cells(lgIntervenantEnCours, colNumIntervenant)
 
Wend
MsgBox ("les numéros intervenants et numéros taches ont bien été enregistrés")
End Sub
 
Sub EnregistrerIntervenant(NumeroIntervenant As Long, NumeroTache As Integer)
 
Dim requeteSQL As String
 
'construction de la requete d'insertion
    requeteSQL = requeteAjoutIntervenant(NumeroIntervenant, NumeroTache)
 
'ouverture et appel de la base de données
    Call ouvertureBase
 
 'exécution de la requete d'insertion (SQL)
    connexion.Execute (requeteSQL)
 
'fermeture de la base de donnée
    Call fermetureBase
End Sub
 
Function requeteAjoutIntervenant(NumeroIntervenantI As Long, NumeroTacheI As Integer) As String
 
'déclaration des variable de la requete
Dim strSQL As String
 
strSQL = "INSERT INTO PARTICIPER (NumEmploye, NumTache )" & _
                        " VALUES(""" & NumeroIntervenantI & """, """ & NumeroTacheI & """)"
 
 'renvoie la requete SQL ainsi construite
    requeteAjoutIntervenant = strSQL
 
End Function
merci d'avance pour votre aide

Je pense qu'il n'y a que besoin du programme principal, le reste sa n'a pas d'importance pour mon probleme

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 AjouterIntervenant()
 
'déclaration des données a enregistrer
Dim NumIntervenant As Long
Dim NumTache As Integer
 
'variable necessaire pour le traitement de l'enregistrement
 
'indice de parcours du tableau des employés (ligne en cours qui est traité)
Dim lgIntervenantEnCour As Integer
 
'l'enregistrement
 
'initialisation au premier Intervenant a traiter
lgIntervenantEnCour = lgDepartNumIntervenant
 
NumIntervenant = Worksheets(RECAP).Cells(lgIntervenantEnCour, colNumIntervenant)
While (NumIntervenant <> 0)
 
    'récupération des informations à enregister dans la base de données dans la colonne "colNumTache"
    NumTache = Worksheets(RECAP).Cells(lgDepartNumIntervenant, colNumTache)
 
    'enregistrement de l'intervenant dans la base de données : appel du sous-programme EnregistrerIntervenant()
    Call EnregistrerIntervenant(NumIntervenant, NumTache)
 
    'Passage à la ligne suivante, pour enregistrer l'intervenant suivant
    lgIntervenantEnCours = lgIntervenantEnCours + 1
    'écrasement des données présente dans NumIntervenant pour le passage a la ligne suivante
     NumIntervenant = Worksheets(RECAP).Cells(lgIntervenantEnCours, colNumIntervenant)
 
Wend
MsgBox ("Les numéros intervenants et taches ont bien été enregistrés")
End Sub
voila sa sera je pense beaucoup plus lisible