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 :

Redimmensioner Range en fonction d'une variable. [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut Redimmensioner Range en fonction d'une variable.
    Bonjour,

    je recherche une macro qui permet d'ajouter des lignes à mon tableau en fonction de la valeur d'une cellule.

    Si mon Range=Tableau340 comprend 1 idée et que mon Tableau d'import en comprend 10, alors la macro doit agrandir le Range de 9 lignes.

    Je me perd avec Redim preserv.

    Ci-joint un exemple.

    Merci de votre aide.
    redimRange.zip

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une solution pour ajouter 9 lignes (Valeur de la variable LngAjout) à l'objet Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim rg As Range
    Dim LngAjout  As Long
     
    LngAjout = 9
     
    Set rg = Range("B6:E7")
     
    Set rg = Range("B" & rg.Row & ":E" & (rg.Row + rg.Rows.Count - 1) + LngAjout)
     
    MsgBox rg.Address

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    J'ai dejà essayé mais ca ne correspond pas à mon problème car au prochain import mon Range ne sera plus ("B6:E7") mais ("B6:E16").

    En gros à chaque Mise à jour mon Range sera modifié en fonction de mon tableau d'import (rajout de 1, 2, 3,..... éléments supplémentaires).

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Dans ce cas, déclare la variable Rg en public dans un module, et instancie la au démarrage.
    Tu pourras ensuite agrandir sa taille avec le code proposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rg = Range("B" & rg.Row & ":E" & (rg.Row + rg.Rows.Count - 1) + 9)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4
    Par défaut
    Merci de ton aide.

    J'ai abandonné. Trop compliqué pour moi j'aggrandi mes tableaux manuellement.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans macro, tu peux aussi définir un tableau dynamique en nommant la plage et à l'aide des fonctions NBVAL et DECALER adapter la référence à cette plage.
    Exemple :
    Imaginons une plage $A$1:$C$5 que l'on nomme monTableau
    Dans le gestionnaire des noms, sélectionner monTableau et remplacer fait référence à $A$1:$C$5 par =DECALER($A$1;0;0;nbval($A:$A);nbval($1:$1))
    Il y aussi moyen de rendre un tableau dynamique en convertissant la plage en tableau.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/03/2007, 02h01
  2. Créer une fonction avec une variable
    Par Ricou13 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/01/2007, 23h51
  3. Réponses: 1
    Dernier message: 20/01/2007, 14h06
  4. action vers formaulaire en fonction d'une variable
    Par JauB dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/01/2007, 15h47
  5. [VB6] Image en fonction d'une variable?
    Par TomIG dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/03/2006, 01h22

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