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 :

Amélioration d'un outil VBA - Access pour ArcGis


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Amélioration d'un outil VBA - Access pour ArcGis
    Bonjour à tous,

    Je suis débutant en programmation et je n'ai jamais utilisé le langage VBA alors svp soyez indulgents

    J'ai cherché des solutions à mon problème mais je ne crois pas avoir trouvé de post répondant à ma question, les seules réponses s'en approchant concernent les tableurs Excel. Si c'est le cas désolé pour le doublon.

    Enfin, voila mon problème :

    J'ai une base de données Access qui recense l'ensemble des arbres présents au sein d'un patrimoine forestier, et dont les informations associées à chaque arbre sont stockées dans différentes tables.
    Je dispose d'un outil me permettant de supprimer un arbre sélectionné :



    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
    Sub supprimer_arbre()
    'supprime un arbre
    Dim maligne As IRow
    Dim rep As String
    Dim idarbre As Long
    Dim mondoc As IMxDocument
    Dim macarte As IMap
    Dim macouche As ILayer
    Dim matable_arbre As ITable
    Dim i As Long
    rep = MsgBox("Voulez-vous supprimer définitivement cet arbre ?", vbYesNo, "Suppression")
    If rep = "6" Then 'oui
    Set maligne = recuperer_ligne("arbre")
    If IsNull(maligne.Value(maligne.Fields.FindField("id_arbre"))) Or maligne.Value(maligne.Fields.FindField("id_arbre")) = "" Then
    maligne.Delete
    Else
    idarbre = maligne.Value(maligne.Fields.FindField("id_arbre"))
    Set mondoc = ThisDocument
    Set macarte = mondoc.Maps.Item(0)
    For i = 0 To macarte.LayerCount - 1
    If macarte.Layer(i).Name = "arbre" Then
    Set macouche = macarte.Layer(i)
    Set matable_arbre = macouche
    Exit For
    End If
    Next i
    choix_supr "photo", idarbre
    choix_supr "document", idarbre
    choix_supr "haubanage", idarbre
    choix_supr "remplacement", idarbre
    choix_supr "arbre_suivi", idarbre
    choix_supr "intervention", idarbre
    choix_supr "intervention_sol", idarbre
    choix_supr "analyse_sol", idarbre
    choix_supr "implantation", idarbre
    choix_supr "prelevement", idarbre
    End If
    maligne.Delete
    MsgBox "Suppression effectuée !", vbExclamation, "Information"
    mondoc.ActiveView.Refresh
    Else
    MsgBox "Suppression annulée !", vbInformation, "Information"
    End If
    End Sub
    L'outil fonctionne parfaitement mais il ne convient plus aux besoin de mon service :
    J'ai crée une nouvelle table "historique" dont la structure est la même que la table principale "arbre".
    Avant de supprimer l'arbre concerné de ma table principale, j'aimerai récupérer les informations qui sont présentes sur cette table pour les copier dans ma table historique.
    Du coup la suppression des informations associées de l'arbre concerné dans les tables annexes (photo, haubanage etc.) n'est plus une nécessité.


    J'espère être suffisamment précis,
    Merci beaucoup pour l'aide que vous pouvez m'apporter quelle qu'elle soit, je vous en serait particulièrement reconnaissant

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,
    Pour récupérer les informations de votre table arbre afin de les copier dans la table historique, il y a la possibilité d'utiliser le recordset ou le SQL, si j'ai bien compris votre problème.

    Personnellement, je préfère le recordset donc en gros sa se passerait comme cela :
    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
    dim mabase as dao.database
    dim recarbre, recHistorique  as dao.recordset
    set mabase = currentdb
    set recarbre = mabase.openrecordset("arbre", dbopentable, dbreadonly)
    set recHistorique = mabase.openrecordset("Historique")
     
    while recarbre.EOF = false
         recHistorique.AddNew ' .Edit pour seulement éditer les informations
         recHistorique.Fields("Champs1").Value = recarbre.Fields("Champs1").Value
         recHistorique.Fields("Champs2").Value = recarbre.Fields("Champs2").Value
         recHistorique.Update
         recarbre.Movenext
    wend
     
    recarbre.Close
    recHistorique.Close
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour et merci Gado2600 pour votre réponse,

    J'ai dans un premier temps référencé la bibliotèque Microsoft DAO 3.6 qui ne l'était pas (jusque là tout va bien).

    Mais l'outil bloque sur le "Set mabase = currentdb"
    La variable n'est pas définie.
    L'erreur est surement toute bête mais je ne vois pas la solution.. une idée?

    Merci beaucoup pour votre aide!

  4. #4
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,
    Essayez avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set recarbre = currentdb.openrecordset("arbre", dbopentable, dbreadonly)
    set recHistorique = currentdb.openrecordset("Historique")
    pour voir si cela change quelque chose ou non.
    Si cela bloque sur la première ligne de déclaration d'un recordset, c'est que vous avez un problème avec votre bibliothèque DAO.
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Cela ne fonctionne pas non plus, malheureusement je crois avoir un problème avec la bilbiotèque DAO..

    Existe-t-il un moyen de contourner ce problème?

    J'aurai du le préciser plus tôt, mais je n'utilise pas directement Access. Les lignes de code que vous voyez sont issues de l'éditeur visual basic integré à mon SIG (ArcGis).

    Ce qui est etrange c'est que l'informaticien qui a programmé cet outil ne se connecte à aucun moment à la BD. Les tables sont directement implantées et modifiées dans le SIG.

    Je ne sais pas si je suis très claire, en tout cas merci à nouveau!

  6. #6
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Re-Bonjour,
    Vous programmez en VB (Visual Basic) ou en VBA (Visual Basic pour Applications) ?
    Dans le cas du VB, je crois qu'il y a quelques différences et de plus, ce n'est pas la bonne section du forum
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    à moins de m'être trompé je crois bien avoir à faire à un outil en VBA (puisqu'il ne s'agit pas d'un programme autonome et qu'il est impossible de dissocier mon code du fichier, c'est bien ca hein?)

    Après je ne savais pas trop quelle section du forum concernait le plus mon problème. Enfin désolé si mon poste n'est pas placé au bon endroit.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu pourrais peut-être jeter un coup d'oeil sur ce forum : http://www.developpez.net/forums/f12...-geographique/

    Philippe

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/01/2015, 09h03
  2. Réponses: 5
    Dernier message: 09/09/2005, 17h51

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