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 :

Conversion VBA Excel en VBA Access [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut Conversion VBA Excel en VBA Access
    Bonjours,

    Je cherche à transformer mon code VBA que j'ai fait sur Excel, pour le mettre dans une BD Access. Autant sous Excel, j'ai pu appliqué une méthode simple,(qui ressemble au langage C) autant sous Access je suis complétement perdu. Et je ne trouve pas de correspondance entre les 2.

    Alors pour faire simple voici le code qui me permet un petit control de doublon avec des exceptions et un récapitulatif à la fin sur Excel, et moi je voudrais faire la même chose sur Access. Mon plus gros problème est que je ne comprend pas le système d'adressage de la cellule Access par rapport à Excel.

    **********************************************************
    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
    Dim Cellule_active
    Dim Cellule_test 
    Dim Ligne 'ligne actuelle
    Dim Ligne_T 'ligne testé
    Dim Colonne
    Dim NbZero 'numero d'article pas encore défini
    Dim NbNC 'numero d'article pas communiqué
    Dim NbAutre 'entrée incorrect
    Dim NbNum 'numero d'article devant être unique
     
    Sub Controle_doublon()
     
    'initialisation
        NbZero = 0
        NbNC = 0
        NbAutre = 0
        NbNum = 0
        Ligne_T = 1
        Ligne = 2
        Colonne = 1
        Cellule_test = Cells(Ligne_T, Colonne)
        Cellule_active = Cells(Ligne, Colonne)
     
     
    'contrôle la cellule devant être testé et compte les divers entree    
    While Cellule_test <> "" Or Cellule_active <> ""
     
        If Cellule_test = 0 Then NbZero = NbZero + 1
        If Cellule_test = "NC" Then NbNC = NbNC + 1
        If Not IsNumeric(Cellule_test) And Cellule_test <> 0 And Cellule_test <> "NC" Then NbAutre = NbAutre + 1
        If IsNumeric(Cellule_test) And Cellule_test <> 0 And Cellule_test <> "NC" Then NbNum = NbNum + 1
     
     
    'Permet de controler les doublons et affiche une boite si besoin   
            While Cellule_active <> ""
     
                If IsNumeric(Cellule_active) And Cellule_active <> 0 And Cellule_test = Cellule_active Then
     
                MsgBox "Numero " & Cellule_active & " present aux lignes " & Ligne_T & " et " & Ligne
                Ligne = Ligne + 1
                Cellule_active = Cells(Ligne, Colonne)
     
                Else:
     
                Ligne = Ligne + 1
                Cellule_active = Cells(Ligne, Colonne)
     
     
                End If
            Wend
        Ligne_T = Ligne_T + 1
        Ligne = Ligne_T + 1
        Cellule_test = Cells(Ligne_T, Colonne)
        Cellule_active = Cells(Ligne, Colonne)
     
     
    Wend
    'affiche un récapitulatif
    Ligne_T = Ligne_T - 1
     
    MsgBox "Nombre de Numero : " & NbNum & vbCrLf & "Nombre de " & Chr34 & "0" & Chr34 & " : " & NbZero & vbCrLf & "Nombre de NC : " & NbNC & vbCrLf & "Autre entrée : " & NbAutre & vbCrLf & "Numero de ligne de fin : " & Ligne_T
     
     
     
    End Sub
    **********************************************************
    PS: Je n'ai pas défini le type de variable dans Excel. lorsque j'arriverai à faire ce que je veux, j'engagerai la partit optimisation de mon code, et je définirai ces types en fonction des besoins.

    Pour vous situé mes connaissances en la matière, j'ai déjà programmé de petit composant électronique en Assembleur et en C, et ce petit bout de programme est mon première flirt avec VBA.

  2. #2
    Membre Expert 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 : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Par défaut
    Bonsoir,
    Pour ton code, il te suffit de passer tes cellules excel en contrôles access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cells(Ligne_T, Colonne)
    devient
    Mais après, le vba Access et le VBA Excel ne se fait pas de la même manière.

    Dans l'excel, on parle de cellules, de feuilles etc... alors que dans l'Access, c'est plutôt des contrôles, des formulaires, des tables, etc...

    Il faut que tu définisses d'abord ton formulaire et tes tables au niveau de la structure.
    Ensuite, tu pourras parler de conversion de code de programmation.
    Mais pour l'instant, n'ayant ni les tables, ni les formulaires, on ne peut vraiment t'aider.

  3. #3
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Oulalaaa....
    Bon, déjà, tu oublies Excel !
    Ce sera ton pire ennemi sur Access.

    Personnellement, je ne valide pas la réponse précédente.
    Elle n'est pas fausse du tout mais ne semble pas correspondre à ta demande.
    Les références qui y sont faites en terme de controls, etc. seraient plus l'équivalent d'un outil msForm dans Excel.

    Toi, là, tu gères des données, et tu voudrais simplement un listing, par catégorie de données dans une colonne, au choix.
    L'outil de base est donc la requête, et c'est donc le SQL qu'il convient d'examiner.

    Dans ton cas, tu as 2 traitements :
    - quel type d'information y a-t-il dans cette cellule ? (0, "NC", un numérique ou autre chose)
    - pour chaque type d'information, combien y a-t-il de ligne qui lui corresponde dans la colonne choisie.

    Admettons que tu aies une Table "LaTable", qui contienne la colonne à tester "LaColonne"

    Voici ce que donnerait ton SQL pour obtenir ton résultat (Pour simplifier l'exercice, je vais faire 2 requêtes, mais on pourrait le faire en une seule)
    • Requête (qryTypeInfo) pour le traitement de l'information de contenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT
        iif(LaColonne = "0", "Nombre de 0", 
            iif(LaColonne = "NC","Nombre de NC", 
                iif(isnumeric(LaColonne ),"Nombre de numéros","Autre entrée")
            )
        ) AS TYPEINFO
    FROM
        LaTable
    Ici, pour chaque ligne, on analyse ce qu'il y a dans le champ de la table LaTable, et on en ressort le libellé voulu. Ce résultat est affiché dans le champ TYPEINFO de la requête créée qryTypeInfo.
    Maintenant, il convient de regrouper tous les items de même valeur de cette première requête, et de les compter pour obtenir les doublons
    • Requête (qryDoublons) qui sort le résultat attendu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
          TYPEINFO
        , Count(TYPEINFO)
    FROM
        qryTypeInfo
    GROUP BY
        TYPEINFO
    Ici, on lit la requête précédente (qryTypeInfo), on affiche et on regroupe le champ TYPEINFO, et on compte le nombre d'occurrence de TYPEINFO dans ce groupe).
    C'est tout.


    Ca, c'est "La Base"
    Maintenant, plus tu te perfectionnera dans cette nouvelle manière de réfléchir, plus tu te rendras compte qu'on pouvait faire un code SQL un peu plus tordu pour n'avoir qu'une seule requête.
    Et puis, ensuite, tu te poseras la question de savoir comment faire cette demande sur n'importe quel champs de manière dynamique, et du coup, tu verras comment lier le code VBA avec le SQL. Et enfin, tu te demanderas comment faire pour qu'en plus d'être dynamique, il soit interactif, et tu en viendras à t'interroger sur les formulaires

    Bon courage !

  4. #4
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    Merci de vos réponses, j'examinerais tous ça lorsque je reviendrais sur ce job lors de mon temps libre, car actuellement j'ai reçu une autre priorité.

    Mais j'ai bien compris une chose, l'Assembleur est vraiment plus simple...

    Je comprends mieux pourquoi je ne trouvais rien de concluant lors de mes recherche sur internet. Et l'histoire des requêtes est une solution sur laquelle j'étais tombé, mais quand j'ai vu qu'il y avait du SQL, je m'étais dit : une chose à la fois. Et je suis parti coté VBA. Mais maintenant je vais prendre se que vous m'avez donné, je vais analyser tous cela, et l'intégrer dans mes petit connaissance. Ainsi je pourrais continué à progressé dans se domaine.

    Et si je me retrouve bloqué à nouveau, je reviendrais.

    Bonne journée

  5. #5
    Membre averti
    Homme Profil pro
    Employer
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Employer
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Par défaut
    J'ai pas forcement trouver toutes les solutions, a ce problème que j'avais à l’époque, cependant depuis le temps, j'ai appris beaucoup de truc et astuce. et d’ailleurs maintenant c'est le genre de problème que je résous en regardant la finalité du code, et je recode complètement les parties qui m’intéresse.
    Bref, comme ce poste est depuis longtemps oublier, je le passe en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA Excel pour ouvrir Access
    Par Rashlack dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/12/2010, 19h02
  2. [XL-2003] Problème de conversion formule excel -> Macro VBA
    Par bedrohung dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/04/2010, 18h53
  3. VBA excel : piloter BdD access et y importer fichier CSV
    Par hnokia dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/05/2007, 17h30
  4. [VBA-E] macro VBA excel suppression graphiques
    Par totoza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/05/2006, 08h45
  5. [VBA-E] probleme vba excel
    Par derayef dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 16/05/2006, 23h47

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