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 :

[VBA-E] - transformé un tableau excel en objet


Sujet :

Macros et VBA Excel

  1. #1
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Points : 85
    Points
    85
    Par défaut [VBA-E] - transformé un tableau excel en objet
    bonjour, je n'ai pa de code à présenter, jvoulai juste savoir si on pouvai faire passé un tableau excel en un objet, afin de pouvoir le transporté vers une autre feuille ou un autre classeur ? merci

  2. #2
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Une feuille Excel est déjà un objet en soit. Il s'agit d'un Object de type WorkSheet.

    Le code qui suit permet de copier la feuille RESULTAT - RECHERCHE du classeur courant dans le classeur nommé classeur1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub CopierFeuiller()
        Dim FeuilleSource As Worksheet
     
        Set FeuilleSource = ThisWorkbook.Worksheets("RESULTAT - RECHERCHE")
        FeuilleSource.Copy after:=Workbooks("Classeur1").Worksheets(Workbooks("Classeur1").Worksheets.Count)
    End Sub

  3. #3
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Points : 85
    Points
    85
    Par défaut
    jevais mexpliqué plus clairement. en fait j'ai 2 feuilles, sur 2 classeurs différents, qui comportent chacunes un tableau. je voudrais copier l'un des tableau sur l'autre feuille pour les mettre sur la même feuille. le problème c'est qu'il ne sont pa dimensionnés de la même façon, les colonnes ne correspondent pas du tout, et j'aurais voulu garder cette différence.

    est-ce possible ? dites le si c'est pas clair !

    merci

  4. #4
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Dans cas il suffit de copier les cellules d'une feuille sur une autre feuille. Utilise alors la fonction Copy de l'objet Range.

  5. #5
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Points : 85
    Points
    85
    Par défaut
    tu veux dire qu'il faudrait que je copie chaque cellule une par une d'une feuille à l'autre ? mais si je fais sa, j'aurais juste la valeur contenue dans la cellule mais pa la taille de la cellule. or, je voudrai gardé la dimension de la cellule.

  6. #6
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Je n'ai pas dit : "chaque cellule une par une" mais "les cellules"
    Je n'ai pas parlé de "la valeur contenue dans la cellule" mais de l'objet Range.

    Range désigne un bloc de cellules avec toutes les propriétés qui s'y rattache, donc le contenu, le format, la taille, la mise en forme, les formules, etc...

  7. #7
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Points : 85
    Points
    85
    Par défaut
    ouai en gros elle prend en compte le format de la cellule + la valeur. mais pa sa taille. si jcopie mon tableau avec la méthode range dans une autre feuille, le format de la cellule copié se copiera bien sur la nouvelle feuille, mais si la cellule mesurait 3cm sur l'ancienne feuille, et qu'elle ne mesure que 2cm sur la nouvelle feuille, la taille de la nouvelle cellule ne sera pa 3cm mais 2cm.

  8. #8
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Je ne connais pas VBA.
    Je sais seulement que Ousk a eu à traiter un problème similaire.
    Je me rappelle également avoir eu avec lui une conversation, pour traiter (hors VBA donc) du passage de tableaux dynamiques (truc tremplin qu'il a utilisé pour faire face au problème VBA).
    Il était parti de cet esprit là, résultat de notre conversation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Command1_Click()
       Dim toto(3) As String, titi
       For i = 0 To 2 '====juste pour remplir pour essayer
         toto(i) = Str(i)
       Next
       Let titi = toto ' == je fais une équivalence
       toto(0) = "a" '=== pour vérifier que pas toujours égal
       For i = 0 To 2
         MsgBox titi(i) & " " & toto(i) ' === et vérifie que titi est # de toto si j'ai modifié toto
        Next
    End Sub
    Attendez ousk !
    Pour adapter à VBA, il a la solution !

  9. #9
    En attente de confirmation mail
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 121
    Points : 85
    Points
    85
    Par défaut
    en gros est-ce que la cellule "A1" d'une feuille quelconque peut mesuré 2cm, et que "A2", cellule présente sur la même feuille mesure 3cm ?

  10. #10
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Dans ce cas, tu peux ajuster la taille des cellules après la copie. Pour cela parcour la collection Columns :

    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
    Public Sub Main()
        CopierCellules _
            ThisWorkbook.Worksheets("Source").Range("B2:J10"), _
            Workbooks("Classeur2").Worksheets("Destination").Range("D4")
    End Sub
     
    Public Sub CopierCellules(CellulesSources As Range, Cible As Range)
        Dim IndexColumn As Long
        Dim R As Range
     
        'Copie des cellules
        CellulesSources.Copy
        Cible.PasteSpecial Paste:=xlPasteAll
     
        'Ajustement de la taille des cellules
        IndexColumn = Cible.Column
        For Each R In CellulesSources.Columns
            Cible.Parent.Columns(IndexColumn).ColumnWidth = R.ColumnWidth
            IndexColumn = IndexColumn + 1
        Next
    End Sub

    Edit : Il y a une solution sans doute plus élégante en utilisant le paramètre xlColumnWidths de la méthode PasteSpecial : Selection.PasteSpecial Paste:=xlColumnWidths

    Mais n'arrive à mettre en oeuvre cette solution. Si quelqu'un à une solution...

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Désolé jemefe, je n'étais pas disponible et n'ai donc pas vu ce post.
    J'ai bien tout lu et je ne comprends pas
    j'ai 2 feuilles, sur 2 classeurs différents, qui comportent chacunes un tableau. je voudrais copier l'un des tableau sur l'autre feuille pour les mettre sur la même feuille. le problème c'est qu'il ne sont pa dimensionnés de la même façon, les colonnes ne correspondent pas du tout, et j'aurais voulu garder cette différence.
    Où veux-tu coller ton second tableau ? Sur les colonnes vide faisant suite à ton premier tableau ou sur les lignes vides suivant le premier tableau ?

    Si tu le colles en dessous, et que tu redimensionnes les colonnes après copie, les colonnes seront modifiées dans ton premier tableau.
    Si tu le colles sur les colonne suivantes, la solution de Catbull est la bonne, enfin, je n'ai pas mieux...

    Bref, qu'appelles-tu tableau ? Une plage de données ? Un graphe ?
    Ou veux-tu placer une feuille de calcul sur une autre feuille de calcul ? Auquel cas, c'est ce qu'a évoqué jmfmarques et on verra.

    Tu précises ?

    A+

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je n'avais pas vu
    en gros est-ce que la cellule "A1" d'une feuille quelconque peut mesuré 2cm, et que "A2", cellule présente sur la même feuille mesure 3cm ?
    Et la réponse est NON ! (voir explication sur post précédent)

    A+

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour une simple image d'une plage de données copiée sur une autre feuille, l'aide te donne le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub CopieEcranPartielXls()
        Worksheets("Calendrier").Range("A1:W36").CopyPicture xlScreen, xlBitmap
        Worksheets("Feuil2").Paste destination:=Worksheets("Feuil2").Range("A37")
    End Sub
    Tu dois activer une référence mais là, je compte sur bbil ou AlainTech pour te l'indiquer. (Dans l'éditeur VBA -> OUtils -> Références)

    Tu dis

    A+

Discussions similaires

  1. [VBA-E] Construction d'un tableau EXCEL avec VBA
    Par oliver75 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/05/2007, 07h35
  2. [VBA-E]transformer array en tableau type range
    Par matel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/03/2006, 09h50
  3. [VBA] insérer un tableau Excel dans un formulaire
    Par Alexj51 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 08/02/2006, 13h15
  4. [VBA-E]créer un tableau Excel en vba
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/01/2006, 16h06
  5. Aide débutant instruction VBA tableau Excell
    Par damien33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/09/2005, 10h31

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