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 :

Modification fichier Excel via Access VBA: Un vrai casse-tete


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut Modification fichier Excel via Access VBA: Un vrai casse-tete
    Salut a tous,

    Bon pour info j'ai bien regarder le tuto access concernant le pilotage d'Excel mais je ne sais pas comment faire pour creer ma fonction.

    Alors en fait je dispose d'un classeur excel qui lors de ma requete de mise a jour est copie afin d'effectuer les modifications necessaires avant son importation sous access.

    Ce classeur est compose de 21 feuilles qu'il faudrait que je reussisse a mettre bout a bout avec la presentation de ma table access de destination.

    Sur chaque feuille il faut que je supprime les 2 premieres lignes ainsi qu'un certain nombre de colonnes avant d'assembler mon fichier.

    La suppression ca je m'en sors mais la ou je galere vraiment, c'est pour mettre chaque feuille bout a bout sachant que le nombre de ligne par feuille ne peut etre defini!

    J'ai vraiment besoin de votre aide car je suis en plein casse tete!

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,
    si mettre bout à bout signifie "les unes en dessous des autres" :
    - voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65000").End(xlUp).Row
    si mettre bout à bout signifie "les unes à côté des autres" :
    - voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("IV1").End(xlToLeft).Column
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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 averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Merci pour ta reponse mais malheureusement je ne sais pas comment la mettre en oeuvre.

    En fait apres avoir bien regarder tout ca ce qu'il faudrait que je fasse c'est que je puisse creer ma fonction de sorte qu'en partant de la derniere feuille de mon classeur, elle commence par supprimer les 3 premieres lignes puis que les lignes restantes soient ramenees sur la feuille precedente et ainsi de suite jusqu'a tout ramener sur la 1ere feuille.

    J'ai ce code qui fonctionne pour supprimer la feuille:
    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
    ' Entries : strBook <- Book path.
    '          strSheet  <- Name of the sheet to delete.
     
    Function UpdatePrepare( _
      ByVal strClasseur As String, _
      ByVal strFeuille As String)
    Dim xlApp As Excel.Application
    Dim wbk As Excel.Workbook
     
    ' Open the book
    Set xlApp = CreateObject("Excel.Application")
    Set wbk = xlApp.Workbooks.Open(strClasseur)
     
    ' Desactivate Excel messages
    xlApp.DisplayAlerts = False
     
     
    ' Delete selected sheet
    On Error Resume Next
    wbk.Worksheets(strSheet).Delete
    If err.Number > 0 Then
     
      MsgBox "Deletion impossible for sheet [" & strFeuille & _
      "] from book [" & strClasseur & "]", vbExclamation
     
      ' Close book without saving changes
      wbk.Close False
    Else
      ' Close the book with saving changes
      wbk.Close True
    End If
    Set wbk = Nothing
     
    ' Close Excel
    xlApp.Quit
    Set xlApp = Nothing
    End Function
    Reste a creer la suppression des lignes et le rappatriement des lignes dans la feuille precedente.

    S'il vous plait j'ai besoinde comprendre ce code mais j'ai un peu de mal.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    En considérant que tu as pu faire le nettoyage des colonnes qui ne seront pas transférées, voici un code qui transfère les données de toutes les autres feuilles sur la feuille nommée Feuil1. Dans l'exemple, j'ai considéré qu'il fallait transféré deux colonnes, mais tu adaptes PlageSource à ton cas.

    Plutôt que de rapatrier les données de la dernière feuille sur l'avant-dernière et de remonter, j'ai préféré partir de la deuxième et d'aller jusqu'à la dernière...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Transfert()
        Dim Feuille As Worksheet
        Dim PlageSource As Range ' définit la plage source dans les feuilles qui seront transférées
        Dim CelluleCible As Range ' définit la première cellule en A de la feuille 1 disponible
     
        For Each Feuille In Worksheets
            If Feuille.Name <> "Feuil1" Then
                Set CelluleCible = Worksheets("feuil1").Cells(Rows.Count, 1).End(xlUp)(2)
                Feuille.Rows("1:3").Delete
                Set PlageSource = Feuille.Range("a1:b" & Feuille.Cells(Rows.Count, 1).End(xlUp).Row)
                PlageSource.Copy Destination:=CelluleCible
            End If
        Next Feuille
    End Sub
    A jpcheck: Attention qu'avec 2007, les codes que tu proposes ne sont pas valables, car il y a plus de 65536 lignes (pq proposer 65000, fainéantise? ) et plus de 256 colonnes.
    Des codes universels pour toutes les versions d'Excel sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cells(rows.count,1).End(xlup)
    cells(1,columns.count).end(xltoleft)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Merci beaucoup ca marche nikel enfin a un detail pres, suite a ma mise a jour et l'importation sous access puis destruction du fichier, si j'essaie de relancer la mise a jour (l'ancien fichier n'existe plus), il me met une erreur de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Run-Time error '1004'
     
    Method 'Worksheets' of object '_Global' failed
    En fermant completement Excel et en stoppant le debuggeur ca repart mais si je pouvais regler ca ce serait mieux!

    D'autre part pour la suppression des feuilless, ca ne fonctionne pas avec ce code:
    Merci beaucoup encore

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Bon je viens de me rendre compte d'un autre souci il se trouve que 2 des colonnes que j'importe contiennent des formules hors avant de les importer, il faut que je supprime les colonnes dont ces formules dependent et resultat je me retrouve avec deux colonnes vides.

    J'ai alors 2 solutions:
    -soit copier ces colonnes et les coller sous excel avant l'importation en ne collant que les valeurs
    -soit supprimer les colonnes inutiles directement sous access mais dans ce cas il n'accepte pas mes noms de champs.

    Dans les 2 cas je suis bloque car je ne sais pas comment programmer ma fonction pour m'en sortir.

    S'il vous plait aidez moi!!!!!

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

Discussions similaires

  1. [AC-2003] Comment supprimer totalement un fichier Excel via Access ?
    Par CIRE3 dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/07/2013, 14h06
  2. [Excel 2003] Ouverture fichier excel via internet (VBA)
    Par senbo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/07/2013, 13h25
  3. [Toutes versions] Importer données dans fichier Excel via macro VBA
    Par JEREMY01 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/07/2012, 23h13
  4. copier une feuille excel vers un autre fichier excel en access VBA
    Par acbdev dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/03/2008, 09h32
  5. Réponses: 6
    Dernier message: 15/02/2008, 11h10

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