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

Macros et VBA Excel Discussion :

Piloter Excel depuis Access


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 126
    Par défaut Piloter Excel depuis Access
    bjr à tous, je veux piloter excel depuis access mais quand j'exécute mon code un msg erreur: objet requis apparais sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'on récupère le nombre total de lignes
    nbLignes = xlWks.Range("A" & Rows.Count).End(xlUp).Row
    Après une discussion dans le forum Access, j'ai eu conseille de me guider vers vous. Alors voici le code complet
    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Option Compare Database
     
    Sub COMPLET()
    Dim xlApp As Object 'Est Excel
    Dim xlBook  As Object 'Est un classeur
    Dim xlWks  As Object 'Est une feuille
    Dim xlRange As Variant 'Est une cellule
    Dim FichierXl As String 'Est le chemin du fichier de sortie
    Dim Libellé4, nbLignes, formuleETotalGeneral, formuleETotalMois, FinMois, DebMois, FinService
    FichierXl = CurrentProject.Path & "\" & "Prebudget01" & Year(Now) & Month(Now) & Day(Now) & ".xlsx"
     
    DoCmd.TransferSpreadsheet acExport, , "Origine", FichierXl
        'Export des données de la requête en fichier Excel. La fonction False pour ne pas avoir les entêtes de colonnes _
        ne fonctionne pas pour un export Excel.
     
    Set xlApp = CreateObject("Excel.Application") 'Ouverture d'une nouvelle instance d'Excel
    Set xlBook = xlApp.Workbooks.Open(FichierXl) 'Ouverture du fichier
    Set xlWks = xlBook.ActiveSheet 'Activation de la feuille
    'Set xlRange = xlWks.Range("A1:A65535") 'Création de la plage de cellules. 65535 stations possible (limite du programme Excel)
    xlApp.DisplayAlerts = False
    xlApp.ScreenUpdating = False
     
    xlWks.Name = "NouveauNomDeLaFeuille" 'Renomme la feuille
     
    'Libellé1 = "SERVICES CENTRAUX"
    'Libellé2 = "SERVICES DÉCONCENTRÉS INTÉRIEUR"
    'Libellé3 = "SERVICES DÉCONCENTRÉS CONAKRY"
    Libellé4 = "TOTAL GENERAL"
     
    'on récupère le nombre total de lignes
    nbLignes = xlWks.Range("A" & Rows.Count).End(xlUp).Row
    'on groupe l'ensemble
    xlWks.Rows(2 & ":" & nbLignes).Group
     
     
    'la formule pour le total général
    formuleETotalGeneral = "=SOUS.TOTAL(9;E2" & ":E" & nbLignes & ")"
     
    'on peut déjà placer le total général -Libelle, formule et étire
    xlWks.Range("A" & nbLignes + 1) = Libellé4
    xlWks.Range("E" & nbLignes + 1).FormulaLocal = formuleETotalGeneral
    xlWks.Range("E" & nbLignes + 1 & ":I" & nbLignes + 1).FillRight
    xlWks.Range("A" & nbLignes + 1 & ":I" & nbLignes + 1).Font.Bold = True
     
    'on commence par séparer tous les mois
    FinMois = nbLignes
    For i = nbLignes To 1 Step -1
        If xlWks.Range("A" & i) <> xlWks.Range("A" & i + 1) And xlWks.Range("A" & i + 1) <> "TOTAL GENERAL" Then
            'Mise à jour de la ligne de début de mois
            DebMois = i + 1
     
            'on construit la formule
            formuleETotalMois = "=SOUS.TOTAL(9;E" & DebMois & ":E" & FinMois & ")"
     
            'on la place dans la cellule en fin de mois
            xlWks.Rows(FinMois + 1).Insert
            xlWks.Range("E" & FinMois + 1).FormulaLocal = formuleETotalMois
     
            'on étire la formule jusqu'à la colonne I
            xlWks.Range("E" & FinMois + 1 & ":I" & FinMois + 1).FillRight
     
            'on place le label
            xlWks.Range("A" & FinMois + 1) = "Total " & xlWks.Range("A" & FinMois)
     
            'on groupe le mois, on merge et centre
            xlWks.Rows(DebMois & ":" & FinMois).Group
     
     
            '********************************************************
            'groupement interne par service
     
            FinService = FinMois
            For j = FinMois To DebMois Step -1
                While xlWks.Range("C" & j).Value = xlWks.Range("C" & j - 1).Value And xlWks.Range("A" & j).Value = xlWks.Range("A" & j - 1).Value
                    j = j - 1
                    If j = 0 Then Exit Sub
                Wend
                'on insère une ligne en fin de service
                xlWks.Rows(FinService + 1).Insert
                FinMois = FinMois + 1
                'on colle la formule et on étire
                xlWks.Range("E" & FinService + 1).FormulaLocal = "=SOUS.TOTAL(9;E" & j & ":E" & FinService & ")"
                xlWks.Range("E" & FinService + 1 & ":I" & FinService + 1).FillRight
     
                'Ajoute le nom du service en C avec TOTAL - en gras
                xlWks.Range("C" & FinService + 1).Value = "TOTAL " & xlWks.Range("C" & FinService).Value
                xlWks.Range("C" & FinService + 1 & ":I" & FinService + 1).Font.Bold = True
     
                'Regroupe les lignes
                xlWks.Rows(j & ":" & FinService).Group
                xlWks.Range("C" & j & ":C" & FinService).Merge
                'xlWks.Range("C" & j & ":C" & FinService).HorizontalAlignment = xlCenter
                'xlWks.Range("C" & j & ":C" & FinService).VerticalAlignment = xlCenter
     
                FinService = j - 1
            Next j
            xlWks.Range("A" & DebMois & ":A" & FinMois).Merge
            'xlWks.Range("A" & DebMois & ":A" & FinMois).HorizontalAlignment = xlCenter
            'xlWks.Range("A" & DebMois & ":A" & FinMois).VerticalAlignment = xlCenter
        '********************************************************
            FinMois = i
        End If
    Next i
    xlWks.Activate 'Activation de la feuille1
     
    xlApp.ScreenUpdating = True
    xlApp.DisplayAlerts = True 'Le message d'enregistrement est réactivé
    xlApp.Visible = False 'Excel est invisible
    'xlRange.Cells(1, 1).Select 'Selection de la cellule A1
    xlBook.Save
    xlBook.Close True 'Fermer le fichier et l'enregistre sans message de confirmation dû à xlapp.DisplayAlerts=false
    xlApp.Quit 'Fermerture d'excel
    MsgBox "Terminer", vbInformation, "Excel"
     
    Set xlRange = Nothing 'Effacement de la mémoire tampon de la cellule active
    Set xlWks = Nothing  'Effacement de la mémoire tampon de la feuille active
    Set xlBook = Nothing  'Effacement de la mémoire tampon du classeur actif
    Set xlApp = Nothing  'Effacement de la mémoire tampon de l'instance Excel
     
    End Sub
    Merci pour votre aide.

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    je n'utilises Acces que très rarement mais je ne pense pas que Rows soit un objet Access, il faut donc préciser le Parent !

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbLignes = xlWks.Range("A" & xlWks.Rows.Count).End(xlUp).Row
    Cela dit, définir tous les objets Excel avec le type générique Object ne me semble pas une bonne idée.
    Il faudrait les définir pour ce qu'ils sont. Par exemple, pour xlBook : Excel.Workbook

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

    Je pense que cela vient de la constant xlup

    A la vue de ton code tu n'as pas référencé la bibliothèque Excel et donc Access ne connait pas les constantes Excel.

    Remplace xlUp par sa valeur pour voir : -4162 , cela n'est qu'une hypothèse.

    Philippe

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 126
    Par défaut
    bjr à tous, voilà encore le coup des génies. Merci pour l'aide

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

Discussions similaires

  1. Piloter Excel depuis Access
    Par kabamel dans le forum Access
    Réponses: 7
    Dernier message: 03/08/2018, 14h50
  2. Piloter excel depuis access : select
    Par le_sayan dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/06/2010, 19h02
  3. Piloter importation Excel depuis Access en VBA
    Par Joselito2 dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/05/2010, 15h45
  4. piloter excel depuis access : trier
    Par Arzawe dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/03/2008, 11h29
  5. imprimer feuille excel depuis access
    Par Jean Bonnisme dans le forum Access
    Réponses: 3
    Dernier message: 18/11/2004, 08h46

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