Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/01/2012, 14h45   #1
Invité de passage
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 1
Points : 1
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
kayl83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/01/2012, 16h40   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
Bonjour,

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

Code :
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
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 00h09   #3
Invité de passage
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 1
Points : 1
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).
kayl83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 08h36   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 237
Points : 7 237
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 :
1
2
 
Set rg = Range("B" & rg.Row & ":E" & (rg.Row + rg.Rows.Count - 1) + 9)
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 14h54   #5
Invité de passage
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 1
Points : 1
Merci de ton aide.

J'ai abandonné. Trop compliqué pour moi j'aggrandi mes tableaux manuellement.
kayl83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 15h12   #6
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 313
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 313
Points : 2 679
Points : 2 679
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
http://philippe.tulliez.be
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
corona est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 09h36   #7
Invité de passage
 
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 1
Points : 1
Bonjour,

et merci, ca fonctionne manuellement lorsque j'écris du texte sous la dernière ligne, mais ca ne le fait pas automatiquement après mon import.

Il faut peut-être rajouter dans la formule le nbre de ligne attendu (nbr de ligne à importer-nbre de ligne du tableau)?
kayl83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h45.


 
 
 
 
Partenaires

Hébergement Web