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] Affecter un tableau à une plage de cellules, serait-ce possible ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Par défaut [VBA-E] Affecter un tableau à une plage de cellules, serait-ce possible ?
    Comme VBA nous cache plein de choses, j'ai pensé qu'il existait peut-être un fonction cachée...

    J'ai un tableau renseigné, Tableau(25)
    J'ai une plage Range("A1:A25) ou Range($A$1;$A$2;$A$3;$A$4;$A$5;$A$6;$A$7;$A$8;$A$9;$A$10;$A$11;$A$12;$A$13;$A$14;$A$15;$A$16;$A$17;$A$18;$A$19;$A$20;$A$21;$A$22;$A$23;$A$24;$A$25")
    Est-il possible de renseigner toute la plage à l'aide d'une seule ligne de commande ?
    Un truc dans le genre
    Range(Plage) = Tableau
    qui bien sûr ne fonctionne pas...
    Merci de vos nombreuses réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    Il y'a ceci dans la FAQ
    http://vb.developpez.com/faqvba/?page=3.4.4#TabVariant

    Je pense que cette partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Montab As Variant, cmpt1 As Long, cmpt2 As Long
    Montab = Range("A1:J65535").Value
    For cmpt1 = LBound(Montab, 1) To UBound(Montab, 1)
        For cmpt2 = LBound(Montab, 2) To UBound(Montab, 2)
            Montab(cmpt1, cmpt2) = Montab(cmpt1, cmpt2) * 2 + 3
        Next cmpt2
    Next cmpt1
    Range("A1:J65535").Value = Montab
    peut t'aider

    Starec

  3. #3
    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
    Par défaut
    Merci de ta réponse, Starec. Elle aurait pu m'aider récemment pour répondre à une autre question

    Je vais être plus clair quant à ma question.
    RowSource permet de placer une plage de données dans une liste.
    Avec RowSource, une liste n'est autre qu'un tableau de données solidaire de la plage.
    Je prends "seulement" le problème à l'envers.
    Imagine une liste dont on pourrait modifier les données entraînant la mise à jour de la plage de cellules liée.
    Seulement, ma question porte sur un simple tableau dont la modification entraînerait la mise à jour d'une plage.
    Range(Cells(1, 1), cells(1, Ubound(LeTableau))) = LeTableau (*)
    Un exemple valant mieux qu'un long discours...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim Tableau
    Tableau = Array("", "JAN", "FEV", "MAR", "AVR", "MAI", "JUN", "JUL", "AOU", "SEP", "OCT", "NOV", "DEC")
    Set Plage = Range("A1:L1")
    For Each Cel In Plage
         Cel.Value = Tableau(Cel.Column)
    Next
    Ce code écrit Tableau dans la plage A1:L1
    Si je change Tableau(7) = "JUI", je suis contraint de relancer la boucle.
    Je "voudrais" une fonction qui fasse ça sur une seule ligne sans me préoccuper de l'index.
    En outre, ça faciliterait la réponse à bon nombre de questions récurrentes
    Mais je suppose que quelqu'un y a pensé et qu'une dll doit bien exister "quelque part". Non ?


    (*) Pour les pinailleurs LeTableau(0) ne contiendrait pas de valeur

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    une partie de la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Ousk()
    Dim Tableau
    Dim plage As Range
    Tableau = Array("JAN", "FEV", "MAR", "AVR", "MAI", "JUN", "JUL", "AOU", "SEP", "OCT", "NOV", "DEC")
    Set plage = Range("A1:L1")
    plage.Value = Tableau
    MsgBox "Avant ... " & Range("G1")
    Tableau(7 - 1) = "JUI"
    plage = Tableau
    MsgBox "Apres ...." & Range("G1")
    End Sub

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    En fait, tu voudrais une fonction replace sur un Tableau en quelquesorte ?

    Je crois que j'avais déja vu une réponse, je crois de Alain sur un truc de ce genre, mais faudrait qu eje retrouve le post
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Ton problème est très interressant, voici une idée, peut-être loufoque.

    1 - Création d'une routine avec comme argument
    - ton tableau
    - ta valeur à remplacer
    - où la remplacer

    et cette routine te met ta plage à jour quant tu l'as lancé.
    Ainsi quant tu lances ta sub, tu met tes valeurs en paramètres et cela lance le remplissage de ta plage

    Starec

  7. #7
    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
    Par défaut
    Non, Illight, mais c'est toujours intéressant, je compte sur toi
    Je ne veux pas remplacer une donnée dans mon tableau, le but n'est pas celui-ci. Il est d'affecter un tableau à une plage de cellule.
    Mais toute idée est bonne à prendre.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/06/2015, 14h42
  2. Réponses: 3
    Dernier message: 20/07/2009, 12h37
  3. Affecter le vide à une plage de cellule
    Par eclix3 dans le forum Excel
    Réponses: 3
    Dernier message: 10/01/2008, 16h46
  4. affecter un nom à une plage de cellule
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/11/2006, 10h37
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

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