XL 2010 [Résolu] Index Equiv en VBA

Spinzi

XLDnaute Impliqué
Bonjour à tous,

je recherche à calculer une partie de mon tableau non pas à l'aide de formule mais via VBA.

Mon tableau (onglet "Synthèse") est composé d'une partie TCD et d'une autre partie manuelle (je n'utilise pas le TCD pour toutes mes données car j'ai bcp plus d'informations dans mon fichier original et le TCD est vraiment lent). Les formules et le TCD reposent sur l'onglet "Base".

Je souhaiterais, grace à un bouton, pouvoir lancer une macro qui me remonte (comme le fait actuellement ma formule index equiv) les informations de l'onglet "base" (sous forme de tableau excel) en fonction des ordres (lignes) et des entetes de colonnes de mon onglet synthèse.

Pourriez vous m'aiguiller ? Je suis nul en VBA.

Merci d'avance,
Spinzi
 

Pièces jointes

  • VBA IP.xlsx
    18.5 KB · Affichages: 46

Spinzi

XLDnaute Impliqué
Bonjour,

je reviens à la charge car tout passer en macro me permettrait d'éliminer mes problèmes de lenteur du fichier.

Ci joint un fichier complet avec les formules index equiv.
j'aimerais que la macro reproduise la même chose dès que j'appuie sur un bouton.

Je suis disponible pour toute question si ce n'est pas clair.

Pour rappel :
_TCD issu de la base en cours pour me ramener l'exhaustivité des informations (ordre budgétaire) puis index equiv sur cet ordre budgétaire pour ramener les informations en colonnes (en tètes identiques entre base en cours et budget)
_noms des colonnes dynamiques
_nombre de lignes et de colonnes fixe (je supprime après les lignes sans donnée)

Merci d'avance,
Spinzi
 

Pièces jointes

  • VBA IPv6.xlsm
    6.8 MB · Affichages: 21
Dernière édition:

Spinzi

XLDnaute Impliqué
Petit up,

je suis à votre disposition si vous avez des questions.

Je souhaite remplacer ma fonction index equiv qui prend des ressources, par une macro.
_Ma base de données source = onglet "Base en cours"
_Ma base de restitution = onglet "Budget" plage K16 : BW4214
_Clé d'indexation des lignes = colonne Code budgétaire (E dans onglet "Base en cours"; D dans onglet "Budget")
_Clé d'indexation des colonnes = il faut que ce soit dynamique car le texte des entêtes va bouger en fonction de la cellule D10 et D11 de l'onglet "Budget".

Merci d'avance
Spinzi
 

Spinzi

XLDnaute Impliqué
Bonjour Bebere,

ma plage reste la même mais les entetes changent suivant les sélections effectuées en cellules D10 et D11 (tu peux essayer si tu le souhaites).
La V0 sera toujours présente, par contre par forcément la V1.
il faut donc que dans la macro, si il ne trouve pas l'entete dans la base en cours, qu'il ramène 0.

Je ne sais pas si je me suis fait comprendre =)

Merci de te repencher sur mon problème.

Spinzi
 

Spinzi

XLDnaute Impliqué
Bonjour Bebere,

merci pour ton essai.
Cependant, en terme de fonctionnement, je ne veux pas choisir n A_ ce que la macro veut calculer : je voudrais qu'elle calcule automatiquement la plage de données K16 : BW4214 en fonction du code budgétaire et de l'entete présents dans l'onglet "Base en cours".

De plus ,dans ta macro, on dirait que tu n'utilises pas le tableau déjà défini "Base1" dans l'onglet "Base en cours" et que tu modifies cette plage
:
Code:
Sub CréerTable()
  Ws1.ListObjects.Add(xlSrcRange, Ws1.Range("A1:AP" & Ws1.Range("A65000").End(xlUp).Row), , xlYes).Name = "Base1"
  '  Range("Base[#All]").Select
  Ws1.ListObjects("Base1").TableStyle = "TableStyleMedium2"
End Sub

Pour résumer, merci de :
_utiliser une seule plage de données à calculer qui est K16:BW4214 dans l'onglet "Budget" => enlever les case V0 et V1
_utiliser la table prédéfinie "Base1" dans l'onglet "Base en cours" sans la redimensionner.

N'hésite pas à me poser des questions si il y a des choses que tu ne comprends pas.
Spinzi
 

Bebere

XLDnaute Barbatruc
Spinzi dans remplissage ce code n'est pas employé
si tu regardes dans le code tu verras que c'est base1 qui est employé
Set ListObj = Ws1.ListObjects("Base1")
le code recherche le code budgétaire et inscrit la somme en rapport avec l'entête
si tu n'as plus besoin de v0 et v1 met les entêtes comme tu le souhaites
 

Spinzi

XLDnaute Impliqué
Bonjour Bebere,

Ok merci pour votre retour,
cependant je n'arrive pas à modifier la macro pour enlever les case et faire une macro propre.
Pourriez vous me retourner un fichier prenant en comptes les dernières modifications et aussi si vous pouviez commenter la macro de sorte que je puisse modifier les plage de données si j'avais un changement.

Merci bcp pour votre aide,

Spinzi
 

Bebere

XLDnaute Barbatruc
bonjour
Spinzi
je ne comprend pas pourquoi enlever les V0 dans budget
il y en a aussi dans base en cours
à moins que tu parles du code,alors je ne vois pas ce qui te dérange
et si tu partais d'un choix établi ce serait plus facile
le code compléterait budget,tu n'aurais pas besoin de changer les entêtes à la main dans budget
 

Spinzi

XLDnaute Impliqué
Re,

mes entetes sont dynamiques et sont modifiés automatiquement : je n'ai rien de manuel à faire.
C'est pour cela qu'il n'y a aucun intérêt à différencier 2 plages de calculs (V0 et V1) : toute la plage K16 à BW4214 doit être calculée en fonction des données (toutes les entetes et toutes les lignes de la Base1).

Ma plage dans l'onglet "Budget" ne bougera jamais en termes de nombre de colonnes (de K à BW).
ma plage dans l'onglet "Base en cours" contient toutes les données dont j'ai besoin (c'est pour cela qu'il faut prendre l'exhaustivité, toute la base "Base1").

C'est plus clair pour vous ?

Spinzi
 

Spinzi

XLDnaute Impliqué
Bonjour,

je permets un petit up car je vais avoir besoin de ce fichier très rapidement : pensez vous pouvoir m'apporter une solution ce soir ? (désolé, ce n'est pas dans mes habitudes de demander un retour aussi rapide mais je pensais pouvoir trouver la solution plus rapidement).

Merci d'avance
Spinzi
 

Spinzi

XLDnaute Impliqué
Bonjour Bebere,

Il y a encore quelques points que je souhaiterai éclaircir :
_Je souhaite que la macro calcule la plage de données K16 à BW et dernière ligne. La macro ne commence actuellement qu'a la colonne L = comment changer cet argument dans la macro ? (pour info, la dernière ligne remplie est la ligne 1292 mais la macro calcule jusqu'à la ligne 1293)
_Je souhaiterais également que la plage des entetes dans la base en cours s'adapte automatiquement en fonction du nombre de colonnes mais j'ai l'impression que cet argument est fixe dans la macro :
Code:
enteteBase = Ws1.[BK1:DY1]
_De plus, je ne comprends pas ce passage de la macro lorsque tu es dans la partie "Sub colonnes" :
Code:
If test Then
  ReDim Preserve col(1 To 2, 1 To k)
  col(1, k) = i  'colonnes de budget
  col(2, k) = j + 62  'colonnes de base en cours
  k = k + 1
A quoi correspond
Code:
col(2, k) = j + 62  'colonnes de base en cours
?
je devrai le modifier si mon nombre de colonnes dans l'onglet base e ncours change ?

Merci d'avance,
Spinzi
 

Bebere

XLDnaute Barbatruc
Spinzi
C'est écrit à côté col(2, k) = j + 62 'colonnes de base en cours
redim preserve dimensioonne le tableau col()
cela va jusqu'à 1292(variable DerL),tu as 1293 à la sortie de la boucle
tu changes la lettre L par celle que tu veux
avec enteteBase = Ws1.[BK1:DY1],tu vois tout de même à quoi cela coorespond
ligne 1 de base en cours de colonne BK à DY
dans la feuille base en cours,si tu veux les index de colonnes tu cliques sur fichier(en vert)
ensuite sur options,formules et cocher style de référence l1c1
 

Spinzi

XLDnaute Impliqué
Re,

comme je t'ai dis je suis vraiment 0 en VBA.
dans la macro tu prends des plages particulières.
hors ce que je souhaite, c'est un fichier qui s'adapte tout seul.
Aussi je cherche à remplacer :
Code:
enteteBase = Ws1.[BK1:DY1]
par qqchose dans cette veine mais je n'y arrive pas car je pense que ma nouvelle variable "derC" renvoie un numéro et non pas la colonne :
Code:
derC = Range("A1").End(xlToRight).Column
  enteteBase = Ws1.Range("A1:" & derC & "1")
  Ws1.Range("A2:" & derC & derL) = ""

Pareil pour le col = j + 62, je souhaiterais que la macro utilise toutes les colonnes.

Je le répète, si ce n'est pas assez précis n'hésitez pas !

Spinzi
 

Pièces jointes

  • VBA IPv6v4.xlsm
    6.4 MB · Affichages: 22

Discussions similaires

Réponses
3
Affichages
314

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa