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 :

Array - est-il possible de copier le format ? [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut Array - est-il possible de copier le format ?
    Bonjour,
    je travaille sur un fichier important et j'ai écrit une procédure qui recrée les formats de bordures, à partir d'un bouton. Il se trouve que cette procédure est très longue a s'exécuter.
    Je me suis dit que si je passai par un Array, ça irait beaucoup plus vite, sauf que je n'ai trouvé aucun exemple sur la toile.
    J'ai vu comment copier un Array dans un Autre, mais cela copie les données, or moi je voudrais copier les formats d'une plage d'un tableau (Modèle) dans celui qu'utilise les gens.

    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si par Array tu veux parler de variables et qu'en plus elles sont déclarées comme valeurs (Integer, Long, Double, etc.), c'est sûr que les formats ne passent pas.

    Pour copier un format entre cellules, il faut simplement passer par une copie de cellules comme on pourrait le faire à la main.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Worksheets("MonModele").Range("A1:B2").Copy
    Worksheets("MaDestination").Range("C3:D4").PasteSpecial (xlPasteFormats)

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    pour tout ce qui est question de présentation, il est souvent bien plus rentable de partir d'un modèle …


  4. #4
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour,

    En soit, les formats de cellules ou de tableaux ne sont que des données, des chiffres ou des string, du style xlContinuous.
    Tu peux donc aisément les stocker dans une variable Array, et réaffecter les formats en parcourant ton tableau.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Si tu avais mis ton code ça éviterait des propositions inutiles car déjà présentes.
    Essaie déjà en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenuptating=false
    en début de procédure.
    Pour copier tous les formats d'un coup et que les formats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("B2:E4").Copy
    Range("J2").PasteSpecial Paste:=xlPasteFormats
    eric

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par eriiic Voir le message
    Essaie déjà en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.screenuptating=false
    en début de procédure.
    Je ne vois pas trop en quoi cette instruction apporte quelque chose à son problème.

  7. #7
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour à tous et merci de vos réponses,
    Eriiic, Marc et Menhir :
    Oui j'utilise jusqu'à présent, la méthode du modèle copy / .PasteSpecial Paste:=xlPasteFormats.

    Ma question était généraliste au départ, et motivée, parce dans un autre poste, Issoram m'a écrit un code pour effacer les données qui tombent sur les jours de WE ou fériés.
    Aussi, je me demandais s'il était possible d'insérer une largeur de colonne en même temps.
    le code d'Issoram est :
    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
    Sub Test_With_Array()
         Dim tabTemp As Variant
        Dim c As Integer
        Dim plg As Range, plage As Range
         Set plg = [C5:AG120]
        tabTemp = [C3:AG3].Value
        For c = LBound(tabTemp, 2) To UBound(tabTemp, 2)
            If WorksheetFunction.Weekday(tabTemp(1, c), vbMonday) > 5 Or Application.CountIf([FERIES], tabTemp(1, c)) > 0 Then
                If plage Is Nothing Then
                    Set plage = plg.Columns(c)
                Else
                    Set plage = Union(plage, plg.Columns(c))
                End If
            End If
        Next c
         If Not plage Is Nothing Then plage.ClearContents
         Set plage = Nothing: Set plg = Nothing
        Erase tabTemp
     End Sub
    La réponse de Nico Chg m'a fait essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If Not plage Is Nothing Then plage.ClearContents
    plage.ColumnWidth = 1
    et cela fonctionne très bien.
    je n'avais jamais vu (encore) un code, sous forme d'Array, avec un format... Je vous remercie tous pour vos réponses.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Je ne vois pas trop en quoi cette instruction apporte quelque chose à son problème.
    Je n'ai pas vu son code, il ne l'a pas mis.
    Vu que le temps est annoncé comme considérable une possibilité est qu'il y ait du scrolling.
    La différence avec screenupdating=false sera dans ce cas également considérable.
    Non ?

    eric

  9. #9
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour,

    un exemple d'Array contenant des format de cellule (ici une couleur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For J_ColorTab = 5 To NbCol
        ColorTab(Index_ColorTab) = FeuilleDeux.Cells(Max, J_ColorTab).Interior.Color
        Index_ColorTab = Index_ColorTab + 1
    Next J_ColorTab
    Je récupère la couleur d'une cellule, et je la met dans une variable tableau, afin de la traiter plus tard.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/04/2013, 18h39
  2. Réponses: 16
    Dernier message: 04/09/2010, 02h16
  3. Réponses: 1
    Dernier message: 27/04/2010, 20h39
  4. Réponses: 7
    Dernier message: 27/11/2007, 17h05
  5. Réponses: 7
    Dernier message: 15/02/2006, 15h12

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