[VBA] AIde pour autoIncrement

Résolu
Signaler
Messages postés
39
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
29 juin 2007
-
Messages postés
39
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
29 juin 2007
-
Bonjour à tous, je suis novice en VBA et dans le cadre de mon stage je doit faire une application d'importation de fichier Excel vers une base de données Access. Enfin bref, j'aimerai savoir comment déclarer un type AutoIncrément, en l'occurence dans le code qui suit Num_projet.

Voici mon code:

Sub Cmd_Importation_Click()
   'On Error GoTo err
  
Dim Num_agent As Integer 'AutoIncrement(pas de numéro d'agent)
'Dim Nom_projet
Dim Nom_agent As String 'Nom de l'agent
Dim Num_projet As Integer 'AutoIncrement (pas de numéro de projet)
Dim Semaine_realisation As String 'numéro de la semaine de réalisation
Dim Metier As String 'Métier
Dim Projet As String 'Nom du projet
Dim Description As String 'description de l'activité réalisée
Dim Tache As String 'Avancement (en pourcentage ou terminé)
Dim Temps_passe As Integer 'Temps_passé sur le projet (en h)
                                                                                  
Dim SQL As String 'Variable qui permet de créer une table
Dim NomTable As String 'Nom de la table d'importation n°1
Dim NomTable2 As String 'Nom de la table d'importation n°2
Dim j As Integer 'Compteur

Dim NomDuFichier 'Nom du fichier à importer (insertion des cellule Excel)
Dim xls As Excel.Application    'Excel
Dim MonClasseur As Excel.Workbook 'Le classeur
Dim MaFeuilleDeDonnees As Excel.Worksheet 'la Feuille
Dim CDialog As New MSComDlg.CommonDialog 'la boite de dialogue

With CDialog
       'Répertoire d'ouverture
       .InitDir = "C:"
       'Filtre sur les Classeur Excel
       .Filter = "*.xls Classeur Excel|*.xls"
       'Montre la boite de dialogue ouverture de fichier
       .ShowOpen
       'Récupère le chemin et le nom choisi
       NomDuFichier = .Filename
End With
  
If NomDuFichier = vbNullString Then
       Call MsgBox("Veuillez sélectionner un fichier", vbExclamation Or vbOKOnly, "Attention !!!")
       Exit Sub
End If
Set Dbs CurrentDb 'CurrentDb> Suivi_activites
      
'Initialisation Nom de la table d'importation n°1
NomTable = "Projets"
'Initialisation Nom de la table d'importation n°2
NomTable2 = "Agents"
 
'Ouverture de l'application EXCEL
Set xls = New Excel.Application

'Ouverture du classeur Excel choisi plus haut par l'utilisateur
Set MonClasseur = xls.Workbooks.Open(NomDuFichier)

'Affectation de l'objet feuille
Set MaFeuilleDeDonnees = MonClasseur.Worksheets(1)
Call MsgBox("Le classeur d'importation est ouvert", vbInformation Or vbOKOnly)

'Creation des tables d'importation
SQL = "create table " & NomTable & "(Num_projet integer, Semaine_realisation string, Metier string, Projet string, Description string, Tache string, Temps_passe integer)"
Dbs.Execute SQL
SQL = "create table " & NomTable2 & "(Num_agent integer, Nom_agent string, Num_projet integer)"
Dbs.Execute SQL
MsgBox ("Tables d'importation crées")

j = 5 'on initialise j à 5 (Cellules vides avant la ligne 5)
   With MaFeuilleDeDonnees
       Do While Not IsEmpty(.Range("A" & CStr(j)))
      
           'Recuperations des données lignes par lignes
           Semaine_realisation = .Range("C" & CStr(j)).Value
           Metier = .Range("D" & CStr(j)).Value
           Projet = .Range("E" & CStr(j)).Value
           Activite_realisee = .Range("F" & CStr(j)).Value
           Temps_passe = .Range("G" & CStr(j)).Value
           Tache = .Range("H" & CStr(j)).Value
          
           'Insertion des données dans la table
           SQL = "INSERT INTO NomTable (Num_projet, Semaine_realistion, Metier, Projet, Description, Tache, Temps_passe) values ('" & VNum_projet & "','" & VSemaine_realisation & "','" & VMetier & "','" & VProjet & "','" & VDescription & "','" & VTache & "','" & VTemps_passe & "');"
           Dbs.Execute SQL
          
           j = j + 1
       Loop
   End With
 
   'Fermeture du classeur d'Importation
   'False = pas sauvegarder les changements
   Call MonClasseur.Close(False)
   'Quitter l'application Excel
   Call xls.Quit
   MsgBox (" Le classeur d'importation est fermé ")
   MsgBox (" Importation des données effectuée ")
  
  
err:
   'Destruction des objets
   Set xls = Nothing
   Set MonClasseur = Nothing
   Set MaFeuilleDeDonnees = Nothing
   Set CDialog = Nothing
  
End Sub

Par avance merci de vos réponses

6 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

si Num_Projet est le numéro qui doit s'incrémenter de 1, à chaque fois que tu exécutes ce code, il te suffit de placer cette valeur dans ton fichier Excel.
Tu choisis une cellule (faut être sûr qu'elle ne se fasse pas effacer), au pire, tu mets la couleur d'écriture à blanc, et dès que ce code s'effectue, tu lis la cellule en question, tu l'augmentes de 1, tu t'en sers pour ta variable, et remplace Call MonClasseur.Close(False) par Call MonClasseur.Close(TRUE)

C'est de la bidouille, mais c'est une solution.

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
39
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
29 juin 2007

Merci de ta réponse, je vais voir ça!!! ...même si j'ai pas tout compris

++
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
SAlut,
Moi qui suit aussi l'autre discution, pourquoi continues tu à récupérer tes données dans une variable et à en insérer des autres (meme pas déclarées)

Choses que je t'avais déjà dit.
est ce que ton code n'a pas évoluer depuis l'autre discution... mais alors à quoi serve les conseils que tu peux recevoir...

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
39
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
29 juin 2007

Mais il suffit juste d'enlever  values ('" & VNum_projet & "','" & VSemaine_realisation
& "','" & VMetier & "','" & VProjet & "','" &
VDescription & "','" & VTache & "','" & VTemps_passe
& "');" c'est ce que tu m'a dis, il n'y a pas de soucis. Je ne pense que cela est avoir avec l'autoIncrément

merci de ta reponse
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Je ne dit pas que ca a quelques chose à voir, je dit que ton programme n'évolue pas alors qu'il devrait déjà corriger un certains nombres d'erreurs. voila tout.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
39
Date d'inscription
lundi 21 mai 2007
Statut
Membre
Dernière intervention
29 juin 2007

Maerci de ton soutien