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 :

[E-07] Faire un coller dans une table


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [E-07] Faire un coller dans une table
    Bonjour,

    J'essaye d écrire une procédure pour coller ce que contient le clipboard dans une table.
    Cette table est limites a 22 lignes et 5 colonnes.

    La procédure coller est associées a un bouton.

    J´essaye de la faire fonctionner de la manière suivante:

    si la table est vide: coller a partir de la première ligne
    si elle n est pas vide coller juste en dessous de la derniere ligne qui contient de l information
    si l utilisateurs tente de coller plus de 22 lignes, coller les premières 22 lignes et afficher un message d erreur pur les lignes restantes.
    Si les elements a coller dépassent la capacité de la table, coller pour remplir la table et afficher une erreur:

    J ai commence de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("OrderPart").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
    Le problème est que cela ne colle pas si la table est vide.
    Donc je l ai change en vérifiant que si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("OrderPart").cells(1,1)
    est vide, le collage commence a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("OrderPart").cells(1,1)
    et sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("OrderPart").End(xlDown).Offset(1, 0).PasteSpecial xlPasteValues
    C'est pas tres élégant mais c est un début.

    Mon problème principale est pour déterminer quand est ce que l information a coller dépasse la capacité et mieux de combien de ligne elle la dépasse.

    J avais penser a bloquer les cases juste en dessous de la table et d utiliser une «*on err goto*» mais l erreur apparaît a chaque fois et rien n est coller.

    J ai aussi essayer de trouver un moyen de pouvoir lire le contenu du clipboard et de déterminer le nombre de ligne mais je n ai pas trouver d information pour le faire.

    Une autre solution , serait de coller les elements dans une table intermédiaire, compter le nombre de ligne et comparer avec le nombre de ligne qui contient de l information dans la table et ensuite coller uniquement celle qui permette de remplir la table mais cela ne me paraît pas tres optimiser.

    SI quelqu'un un a une autre idée, merci de la partager.

    Xavier

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Une solution élégante (et testée ) pour avoir systématiquement le numéro de la première ligne vide quel que soit la situation (colonne vide ou pas), la voilà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row - (Range("A1").Value <> "")
    Attention ça ne marche que pour la colonne 1 sans en-têtes de colonne: à adapter si besoin.


    Pour tester si ça dépasse les 22 lignes, rien de plus simple. Tu colles dans un premier temps sans te préoccuper du nombre de lignes. Ensuite tu recherche le numéro de la dernière ligne remplie, et là:
    -tu compares avec le numéro théorique à ne pas dépasser et bingo t'as directement ton nombre d'éléments en trop si t'es au dessus et sinon t'es en dessous
    -super facile de supprimer les lignes vu que tu as la nombre de lignes en trop

    Voilà, ça c'est selon moi la solution optimisée. Si tu ne veux pas de "clignotement" dû au collage/suppression, je te suggère de lire un petit peu ce topic:
    http://www.developpez.net/forums/d64...eur-ferme-vba/

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci de ta reponse mais en fait, j ai omis un element qui apparement change tout.
    Ma table est en fait une listobject.
    De plus cette table a des entetes et ne commence pas a la premiere ligne.
    Etant un listobject les fonctions end(xlup) et end(xldown) donnent le meme resultat que la table soit vide ou pleine, la derniere case de la table semble bloquer le end(xldown).

    Pour l instant j ai develope la routine suivante:

    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
    Private Sub cmdCopyAll_Click()
     
    Application.ScreenUpdating = False
     
    On Error GoTo message
     
    ListObjects("OrderPart").Unlist
    Range("E30").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    ListObjects.Add(xlSrcRange, Range("$E$4:$I$26"), , xlYes).Name = "OrderPart"
    With ListObjects("OrderPart")
        .TableStyle = ""
        .ShowTableStyleRowStripes = False
    End With
    Range("E4:F4").Font.ColorIndex = 37
    Application.ScreenUpdating = True
    Exit Sub
     
    message:
        ListObjects.Add(xlSrcRange, Range("$E$4:$I$26"), , xlYes).Name = "OrderPart"
        With ListObjects("OrderPart")
            .TableStyle = ""
            .ShowTableStyleRowStripes = False
        End With
        Range("E4:F4").Font.ColorIndex = 37
        Application.ScreenUpdating = True
     
    End Sub
    Je defait et je refais la table.
    Le probleme est que:
    -je n arrive pas a enlever l autofiler avec vba.
    -l onglet design est activer a chaque fois.

    Pour le probleme de la limite de 22 ligne est que je ne pas coller les lignes pour ensuite efacer celles qui sont en trop car il y a des calculs en dessous de la table....

    Xavier

Discussions similaires

  1. [WD17] coller dans une table en saisie
    Par tun_01 dans le forum WinDev
    Réponses: 2
    Dernier message: 21/04/2014, 13h02
  2. Réponses: 2
    Dernier message: 21/05/2011, 13h30
  3. Faire un echo dans une table
    Par voyageurdumonde dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2010, 14h57
  4. [VRML] Faire des trous ronds dans une table.
    Par yoyo910 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 22/03/2006, 17h56
  5. [Débutant]Comment faire des tranches de nombre dans une tabl
    Par Jedecouvreaccess dans le forum Access
    Réponses: 7
    Dernier message: 05/09/2005, 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