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 :

Problème macro copier/coller [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 92
    Par défaut Problème macro copier/coller
    Bonjour,
    J'ai besoin de votre aide car j'ai un problème.
    En faite j'ai un code sur access qui permet de me copier/coller les données d'une feuille excel.
    Seuleument ma feuille excel fait plusieurs insertion de données. Un jour j'aurais 20 lignes et le fois d'après je peux avoir 10000 lignes.
    Sauf que à l'heure actuelle si par exemple la dernière insertion a été de 10000 lignes et que la j'insere 3 lignes, la barre de défilement ne s'arrete pas à la 3ème ligne mais à la 10000ème.
    Existe t il un code qui permette de réinitialiser la feuille excel à chaque fois que je clique sur mon bouton insertion ?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Bonjour,

    Sans voir le code de la macro Access, ça va être dur de trouver l'erreur...

    Ceci dit il est probablement aussi simple de faire sans macro et d'éviter les erreurs. Access permet d'importer une feuille Excel comme une table en gardant la liaison avec le fichier source. Après il suffit de faire une requête d'insertion dans la table de destination et roulez jeunesse.

    Quand les données de ton fichier Excel change, il suffit de mettre à jour les liaisons dans Access avant de lancer la requête.

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 92
    Par défaut
    Ha oui pardon voici le code Access :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub importationexcelturnover_Click()
     
    On Error GoTo ImportXL_B_Error
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tb_TURNOVER", "T:\...\TURNOVER.xls", True, "turnover_export!"
        MsgBox "IMPORTATION  DU FICHIER TURNOVER.XLS REUSSIE", vbInformation
    On Error GoTo 0
    ImportXL_B_Exit:
    Exit Sub
    ImportXL_B_Error:
        MsgBox "Il y a eu un problème lors de l'importation !", vbExclamation
    Resume ImportXL_B_Exit
     
    End Sub
    J’ai voulue spécifier la plage d’importation mais elle est variable.
    Mais je sais que le problème viens d’Excel étant donné que la 1ère importation se fait bien mais si je change mon fichier Excel et que j’enregistre que 3 lignes au lieu de 106 j’ai 103 lignes vides et je pense que Access veut copier ces lignes vides vus qu’avec la barre de défilement je peux descendre jusqu’à la 106ème ligne.
    Par contre pour ta solution existe-t-il une FAQ ou je puisse me baser car je ne suis pas très au point sur Access.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Ok, bon il y a plusieurs choses:

    Le code VBA que tu donnes fais simplement l'import de fichier Excel dont j'ai parlé. C'est équivalent à faire un "Clic droit → Importer" dans la fenêtre "Tables" de ta bdd sauf qu'avec ce code, l'emplacement du fichier Excel à importer est déjà renseigné.

    Ensuite si j'ai bien compris la suite du problème, c'est que tu voudrais que ta tabler ait exactement le même nombre de lignes que ton fichier Excel. Si ça marche la première fois mais pas les suivantes (lorsqu'il y a moins de lignes que l'import précédent), supprimer la table existante devrait résoudre le problème. Le plus simple est de le faire à la main.

    Si tu veux le faire par la macro, il suffit de rajouter une ligne:

    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
    Private Sub importationexcelturnover_Click()
     
    On Error GoTo ImportXL_B_Error
     
    DoCmd.DeleteObject acTable, "Tb_TURNOVER"
     
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tb_TURNOVER", "T:\...\TURNOVER.xls", True, "turnover_export!"
        MsgBox "IMPORTATION  DU FICHIER TURNOVER.XLS REUSSIE", vbInformation
    On Error GoTo 0
    ImportXL_B_Exit:
    Exit Sub
    ImportXL_B_Error:
        MsgBox "Il y a eu un problème lors de l'importation !", vbExclamation
    Resume ImportXL_B_Exit
     
    End Sub
    Le problème, c'est que si la table n'existe pas, ça va te faire planter la macro.
    Pour contourner le problème tu pourrais utiliser un "On Error Resume Next" (mais c'est sale) ou alors gérer l'erreur complètement. Mais à moins que tu ne tiennes vraiment à le faire avec du VBA, autant le faire à la main.

    PS: j'ai regardé pour la première solution dont je te parlais mais je n'arrive pas à lui donner les arguments de la commande (genre je peux lancer la boite de dialogue d'import de fichier mais pas spécifier directement quel fichier je veux importer) donc laisse tomber de ce côté!

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 92
    Par défaut
    Merci de te pencher sur mon problème.
    Ensuite si j'ai bien compris la suite du problème, c'est que tu voudrais que ta tabler ait exactement le même nombre de lignes que ton fichier Excel.
    Dans ma table Access je voudrais garder les données anciennes déjà presentes. Et par la suite insérer les autres lignes qui se trouvent dans Excel. Aujourd'hui je peux insérer 100 lignes et demain 10 lignes.
    Sauf que Excel garde en mémoire les 100 lignes même si les 90 dernières sont vides. Après quelques recherches j'ai vu que Excel garde ces "lignes fantômes" (quand je faix ctrl + fin le curseur me renvoie à la ligne 26000 alors qu'il n'y a aucun enregistrement). Et que donc du côté de Access l'importation plante.
    J'ai fais quelques recherches pour effacer ces lignes fantômes voici ce que j'ai trouvée :
    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
    Sub NettoyerLignesFantômes()
     
    Dim DL As Long, DC As Integer, Sh As Worksheet
     
    Set Sh = Worksheets("tunover_export")
    DL = DerLig(Sh) + 1
    DC = DerLig(Sh) + 1
     
    With Sh
    .Range(.Cells(DL, "A"), .Cells(65536, "IV")).Delete xlUp
    .Range(.Cells(1, DL), .Cells(DL, 256)).Delete xlUp
    End With
    End Sub
    '--------------------------------
    Function DerLig(Sh As Worksheet)
    On Error Resume Next
    DerLig = Sh.Cells.Find(What:="*", _
    LookIn:=xlFormulas, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlPrevious).Row
    On Error GoTo 0
    End Function
    '--------------------------------
    Function DerCol(Sh As Worksheet)
    On Error Resume Next
    DerCol = Sh.Cells.Find(What:="*", _
    LookIn:=xlFormulas, _
    SearchOrder:=xlByColumns, _
    SearchDirection:=xlPrevious).Column
    On Error GoTo 0
    End Function
    seulement dès que je lance la macro j'ai la ligne 11 qui est surlignée en jaune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range(.Cells(1, DL), .Cells(DL, 256)).Delete xlUp
    J'ai refait d'autres recherches mais je n'ai rien trouvée...

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Ok je vois. Donc j'imagine que tu as une table (appelons-la "principale") dans laquelle tu veux stocker toutes tes données différente de la table dans laquelle tu importes ton fichier Excel (appelons-là "d'import") et que tu copies à chaque fois les données de ta table d'import vers ta table principale, non?

    Si c'est bien le cas, je vois déjà 2 moyens possibles pour résoudre ton problème (et pas besoin de macro pour cela):

    1. Essaie de supprimer la table d'import entre 2 imports successifs comme je te l'ai suggéré avant car le problème peut venir de là. Si ça vient d'Excel comme tu le penses, tu peux effectivement soit essayer de supprimer tes lignes fantômes dans Excel, soit définir une clé primaire (car une clé primaire est forcément non "null", cf. le 2.) lors de l'import si l'une des colonnes de ton fichier Excel s'y prête.
    2. Sinon, met la propréité "Null interdit" de l'un des champs de ta table principale à "Vrai". Cela interdit à ce champ d'être vide et dans ce cas, toutes les entrées fantômes de ta table d'import seront ignorées lorsque tu les copies vers ta table principale (il y aura même un message pour t'en avertir).

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

Discussions similaires

  1. [XL-2010] Problème macro copier-coller des cellules dans deux feuilles Excel
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2014, 20h05
  2. Problème Pour Macro copier/coller
    Par Max6546 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/04/2013, 12h11
  3. [XL-2007] Problème de copier/coller aprés ajout d'une macro.
    Par crevette06220 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2011, 23h29
  4. Problème macro copier/coller
    Par HotshotPP dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2011, 14h21
  5. Problème de copier coller macro VBA
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/11/2009, 19h56

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