Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/05/2007, 10h26   #1
Invité de passage
 
Inscription : mai 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 37
Points : 1
Points : 1
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 :
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 :
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
Anorgasmophobie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 14h37   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je n'ai pas fait de sql depuis 91 (1991, pas 1800) mais j'ajouterais trois doEvents dans ton code, quoique je pense que tu peux te passer du dernier
Code :
1
2
3
4
5
6
7
8
9
10
'ouverture et appel de la base de données
    Call ouvertureBase
    DoEvents
 'exécution de la requete d'insertion (SQL)
    connexion.Execute (requeteSQL)
    DoEvents
'fermeture de la base de donnée
    Call fermetureBase
    DoEvents
End
Si tu ne sais pas, regarde dans l'aide à quoi ça sert
A tout hasard, donc. En tous cas ta boucle me "paraît" correcte... si tu n'as pas de ligne vide dans ta plage de données dans Excel
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 14h39   #3
Membre éprouvé
 
Inscription : février 2007
Messages : 491
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 491
Points : 469
Points : 469
bonjour
la variable Public Const lgDepartNumIntervenant = 12
etant constante ne permet pas l evolution de la boucle
declare la Public lgDepartNumIntervenant = 12
patbou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 15h18   #4
Invité de passage
 
Inscription : mai 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 37
Points : 1
Points : 1
En mettant les DoEvents sa ne marche toujours pas

et en déclarant la variable comme sa "Public lgDepartNumIntervenant = 12" la ligne s'affiche en rouge...

Anorgasmophobie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 15h26   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Alors mets
Code :
Public lgDepartNumIntervenant
et dans la première sub qui l'utilise, initialise-le à 12 comme n'importe quelle variable locale
Code :
lgDepartNumIntervenant = 12
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 15h34   #6
Invité de passage
 
Inscription : mai 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 37
Points : 1
Points : 1
Je viens d'essayer sa ne marche toujours pas, je suis désesperé
Anorgasmophobie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 16h24   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
après cette ligne,
Citation:
NumIntervenant = Worksheets(RECAP).Cells(lgIntervenantEnCours, colNumIntervenant)
mets
Code :
Debug.print NumIntervenant
et affiche la fenêtre "Exécution" -> Editeur VB -> Affichage -> fenêtre exécution
et lance ta procédure. dans la fenêtre, tu devrais voir toutes les valeurs successives de NumIntervenant
Ensuite, tu dis...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2007, 16h31   #8
Invité de passage
 
Inscription : mai 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 37
Points : 1
Points : 1
désolé mais j'ai office en anglais donc je ne trouve pas sa :
"Exécution" -> Editeur VB -> Affichage -> fenêtre exécution

Tu pourrais me dire les emplacements exactes ...

Bon ben là je suis completement perdu, je comprend vraiment pas ou peut etre l'erreur ...

Bon j'ai essayer d'exécuter le programme pas à pas avec F8 et j'ai poser des espions sur NumIntervenants, lgdepartnumintervenant, lgintervenantencours

Tout se passe bien jusqu'a ce qu'on arrive a cette ligne :

Code :
 lgIntervenantEnCours = lgIntervenantEnCours + 1
Ou lgintervenantEnCours devrait s'incrémenter de +1 et donc passer a 13 et changer de ligne, mais il ne le fait pas, et donc le programme se termine en ne faisant que la premiere ligne du tableau excel

j'espere que quelqu'un pourra m'aider ...

Au pire je peux donner la base de donnée et le programme pour que quelqu'un regarde, et m'aide parce que là j'en est vraiment besoin ...

EDIT : Je me permet de mettre mon programme et ma base de donnée en esperant que quelqu'un pourra y jeter un coup d'oeil et m'aider

l'application à développer.zip

EDIT2 : il faut bien sur dans le programme changer le chemin de la base de donnée

Bon j'ai du nouveau (meme si il y a pas grand monde qui doit me lire lol), donc j'ai trouver l'erreur en faite j'avais declaré une variable en temps que "lgIntervenantEnCour" et dans le programme je l'avais écrit avec un "s" a la fin, bref maintenant sa marche donc tout les NumTache et NumIntervenant ont été transferé dans la table PARTICIPER, les NumTache et NumIntervenant correspondent bien mais il ne sont pas dans l'ordre du tableau excel, par exemple la premiere ligne de mon tableau excel est en 4 eme position de la ligne de ma base de donnée ... donc là je comprend pas mais alors pas du tout d'ou sa vient ... :s
Anorgasmophobie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2007, 17h11   #9
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 676
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 676
Points : 7 628
Points : 7 628
Citation:
Envoyé par Anorgasmophobie
en faite j'avais declaré une variable en temps que "lgIntervenantEnCour" et dans le programme je l'avais écrit avec un "s" a la fin
D'où l'intérêt de mettre en début de programme.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 13h30   #10
Invité de passage
 
Inscription : mai 2007
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 37
Points : 1
Points : 1
Et pour mon probleme d'ordre dans la base de donnée ?

personne ?

J'avais penser a faire un ORDER BY sur ma requete... le truc c'est que je n'arrive pas a l'inserer cet order by dans ma requete SQL

ma requete :

Code :
1
2
strSQL = "INSERT INTO PARTICIPER (NumEmploye, NumTache )" & _
                        " VALUES(""" & NumeroIntervenantI & """, """ & NumeroTacheI & """)"
EDIT : j'ai peut etre trouver d'ou venait l'erreur en faite, parce que c'est bizarre dans ma base de donnée, dans ma table PARTICIPER, les NumIntervenants sont rangés dans l'ordre croissant, alors que je n'est rien spécifié, c'est vraiment bizarre ...
Anorgasmophobie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h25.


 
 
 
 
Partenaires

Hébergement Web