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 :

Gestion des classeurs excel depuis access [AC-2013]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Gestion des classeurs excel depuis access
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre. C'est à propos de la gestion des objets Excel depuis Access.
    Je cherche à créer un nouveau classeur, et l'appeler plus tard.

    Voici le code, je ne comprends pas ce que fait access

    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
    Sub Exemple()
     
    Dim xlApp As Excel.Application
    Dim xlwb0 As Excel.Workbook
    Dim xlsh0, xlsh1 As Excel.Worksheet
    Dim reqexport As DAO.QueryDef
    Dim rec As Recordset
     
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlwb0 = xlApp.Workbooks.Add
     
    xlwb0.Activate
    debug.print xlwb0.Name	'Retourne Classeur3
    debug.print ActiveWorkbook.Name	'Retourne classeur1
     
    End sub
    Lorsque je lance cette procédure je ne comprends pas pourquoi access retourne une valeur différente pour xlwb0.name et ActiveWorkbook.name...
    Du coup, ce que je veux par la suite de ces classeurs ne fonctionne pas vraiment bien^^

    Merci d'avance pour cotre aide !

    Patrick

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    Bonjour

    ActiveWorkbook n'a pour ainsi dire aucun sens du point de vue Access =]

    Le fait de passer par une variable directement te facilitera la tache, car meme le nom du classeur peut changer en cours de processus
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Ceci explique pourquoi le petit test que j'ai proposé ne m'a pas permis de résoudre mon problème.
    J'ai déjà essayé de travailler avec des varaibles Worksheet et Workbook, sans succès. Je ne suis pas arrivé à mes fins et je ne comprends pas comment faire.

    Voici une version raccourcie de ce que j'ai essayé pour écrire dans un classeur créé :

    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
     
     
    Sub Exemple()
     
    Dim xlApp As Excel.Application
    Dim xlwb0 As Excel.Workbook
    Dim xlsh0, xlsh1 As Excel.Worksheet
     
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlwb0 = xlApp.Workbooks.Add
    Set xlsh0 = xlwb0.Sheets(1)
    xlwb0.Sheets.Add.Move After:=xlsh0
    Set xlsh1 = xlwb0.Sheets(2)
     
    'Code
    '... varcode
     
    xlsh0.cells(1,1) = varcode
    xlsh1.cells(2,2) = varcode * 2
     
    Le soucis à ce moment-là est que le code n'écrit pas dans le bon classeur.
    Je n'arrive pas à comprendre ce qui se passe dans la variable xlsh0.
     
    xlapp = nothing
    xlwb0 = nothing
    xlsh0 = nothing
    xlsh1 = nothing
     
    End sub
    Après des heures de prise de tête, toute aide est la bienvenue !!

    Patrick

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    En fait en fonction des versions Excel que tu utilises, le classeur par defaut peut aussi bien avoir 1 feuille que 3 =]

    Ce que je te propose ici serait la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlwb0 = xlApp.Workbooks.Add
    Set xlsh0 = xlwb0.Worksheets(1)
    Set xlsh1 xlwb0.Worksheets.Add
    'eventuel Move ulterieur
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Sans avoir besoin d'être un informaticien chevronné, il faut avoir un minimum de documentation sur le sujet que on traite.

    Les variables qui sont susceptibles de intéresser dans ton projet, serait un bon début!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim xls as Excel.Application
    Dim wb as workbook
    Dim ws as workseet
    Dim rg as range
    Set xls=new Excel.application
    Xls.visible =True
    Set wb=xls.workbooks.add
    Set ws=wb.sheets.add
    Set rg=ws.cells(1,1)
    Rg.value="toto"
    D'autres part évites activate, select et autres sélection dans ton code, c'est ce qu'on rabâcher sans arrêt sur le forum Excel Vba!

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Décembre 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2016
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Salut,

    Avec vos conseils et en poursuivant un peu, je suis arrivé à mes fins.
    Merci !

    Voici une version simplifiée de ce à quoi j'ai abouti :

    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
     
    Private Sub Commande39_Click()
     
    Dim xlApp As Excel.Application
    Dim xlwb0, xlwb1 As Excel.Workbook
    Dim xlsh0, xlsh1, xlsh2, xlsh3 As Excel.Worksheet
     
    On Error Resume Next
    Set xlApp = Nothing
    Set xlwb0 = Nothing
    Set xlwb1 = Nothing
    Set xlsh0 = Nothing
    Set xlsh1 = Nothing
    Set xlsh2 = Nothing
    Set xlsh3 = Nothing
    On Error GoTo 0
     
    Set xlApp = New Excel.Application
    xlApp.Visible = True
    Set xlwb0 = xlApp.Workbooks.Add
    Set xlsh0 = xlwb0.Sheets(1)
    xlwb0.Sheets.Add.Move After:=xlsh0
    Set xlsh1 = xlwb0.Sheets(2)
     
    Debug.Print xlwb0.Name & "-" & xlsh0.Name & "-" & xlsh1.Name
     
    Set xlwb1 = xlApp.Workbooks.Add
    Set xlsh2 = xlwb1.Sheets(1)
    xlwb1.Sheets.Add.Move After:=xlsh2
    Set xlsh3 = xlwb1.Sheets(2)
     
    Debug.Print xlwb1.Name & "-" & xlsh2.Name & "-" & xlsh3.Name
     
    ReDim ArrayTemp(1 To 25000, 1 To 250)
     
    'xlwb0.xlsh0
    For i = 1 To 25000
        For j = 1 To 250
            ArrayTemp(i, j) = 1
        Next j
    Next i
    With xlsh0
        With .Range(.Cells(1, 1), .Cells(25000, 250))
            .Value = ArrayTemp
        End With
    End With
     
    'xlwb0.xlsh1
    For i = 1 To 25000
        For j = 1 To 250
            ArrayTemp(i, j) = 2
        Next j
    Next i
    With xlsh1
        With .Range(.Cells(1, 1), .Cells(25000, 250))
            .Value = ArrayTemp
        End With
    End With
     
    'xlwb1.xlsh2
    For i = 1 To 25000
        For j = 1 To 250
            ArrayTemp(i, j) = 3
        Next j
    Next i
    With xlsh2
        With .Range(.Cells(1, 1), .Cells(25000, 250))
            .Value = ArrayTemp
        End With
    End With
     
    'xlwb1.xlsh3
    For i = 1 To 25000
        For j = 1 To 250
            ArrayTemp(i, j) = 4
        Next j
    Next i
    With xlsh3
        With .Range(.Cells(1, 1), .Cells(25000, 250))
            .Value = ArrayTemp
        End With
    End With
     
    Set xlApp = Nothing
    Set xlwb0 = Nothing
    Set xlwb1 = Nothing
    Set xlsh0 = Nothing
    Set xlsh1 = Nothing
    Set xlsh2 = Nothing
    Set xlsh3 = Nothing
     
    End Sub
    Bon week end,

    Patrick

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

Discussions similaires

  1. Supprimer des lignes Excel depuis Access
    Par mat75019 dans le forum Access
    Réponses: 18
    Dernier message: 10/07/2021, 07h23
  2. [AC-2003] Automatisation d'importation des classeurs Excel dans Access
    Par lajka dans le forum VBA Access
    Réponses: 0
    Dernier message: 18/06/2015, 16h29
  3. [AC-2007] Envoyer par Outlook des fichiers Excel depuis Access
    Par Bernard67 dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/06/2012, 09h32
  4. [AC-2003] Copier/Inserer une feuille dans un classeur Excel depuis ACCESS
    Par moilou2 dans le forum VBA Access
    Réponses: 1
    Dernier message: 25/08/2009, 14h45
  5. Lire des cellules Excel depuis Access
    Par planete.gonz dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/01/2009, 11h40

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