Tableaux dans vba

akni

XLDnaute Nouveau
Bonjour,
J'ai un tableau des quantités vendues par articles, clients et mois, je veux faire une récap par client sans passer par TCD quand j'utilise la méthode FOR NEXT elle tarde un peu, je crois qu'avec les tableaux Ubound et Lbound le résultat sera rapide.
ci joint mon fichier avec la macro FOR NEXT.


Merci beaucoup pour toute aide.
 

Pièces jointes

  • test Tableau 2.xlsm
    1.8 MB · Affichages: 116

KIM

XLDnaute Accro
Merci c'est OK. Ce tableau recap est terminé. Je me suis débarrassé des formules.
J'utilise des formules pour calculer l'âge d'un bâtiment et créer un tableau de synthèse et calculer la surface pondérée selon l'âge du bâtiment.
Je regardera et reviendrai vers toi. Merci pour ta disponibilité.
Bonne fin de journée
KIM
 

KIM

XLDnaute Accro
Bonjour Dranreb,
Je reviens vers toi concernant le même tableau de synthèse.
Est-il possible de saisir une formule dans un tableau TS() ?
J'ai une fonction qui me remplit dans une colonne le libellé de chaque DT
=CherchApprox(A5;l_Cdpt;l_Ldpt)
Je la rajoute manuellement après avoir créé la synthèse par DT.
Dans la boucle ci-dessous,
For Each DR In Gigogne(ColUti(FBase1.[A5:p5]), 1, 10, 2)
......
For Each OP In DR.Co
.......
For Each SITE In OP.Co
L = L + 1
TS(L, 1) = DR.Id
TS(L, 2) = OP.Id
TS(L, 3) = SITE.Id
est-il possible de rajouter :
TS(L,5) = "=CherchApprox(DR.Id;l_Cdpt;l_Ldpt)"
et si oui quelle est la bonne syntaxe ?
Merci
KIM
 

KIM

XLDnaute Accro
Merci, dans ma tête je pensais aux formules. En effet c'est une fonction personnalisée.
Est-ce qu'on peut utiliser des noms définis dans le gestionnaire de noms ? et si oui comment?
Car l_Cdpt et l_Ldpt sont des noms de plage définis dans le gestionnaire de noms.
Il me sort une erreur :
upload_2017-4-21_12-27-18.png


KIM
 

KIM

XLDnaute Accro
Bonsoir Dranreb,
Je viens de constater une anomalie dans mes tableaux de synthèse. Je retrouve une colonne vide à 0 dans DCols.
La colonne de référence pour les titres du tableau de synthèse n'a pas de cellule vide (filtre sur la colonne):
upload_2017-4-22_22-29-0.png

La ligne :
Set DCols = DicInvent(Données, ColTitre, ColDép:=7): CFin = DCols.Count + 7
me donne une colonne supplémentaire vide :
Dans la fenêtre des variables DCols a 8 valeurs dont la dernière est vide :
upload_2017-4-22_22-33-34.png


As-tu une idée pourquoi ?
Merci d'avance
KIM
 

KIM

XLDnaute Accro
Bonsoir Dranreb, et le forum
Avec la ligne :
Set DCols = DicInvent(Données, ColTitre, ColDép:=7): CFin = DCols.Count + 7
me donne 8 valeurs pour DCols dont la dernière est vide.
Dans le tableau R32, je retrouve une colonne Col N vide.
Ce tableaest créé par la macro "Synthese_ParOP_DPT_Site_GrouperCol_vR32"
J'ai contrôlé mes données mais je n'ai trouvé aucune anomalie.
Merci pour votre aide.
KIM
 

Pièces jointes

  • T_RecapGigogne_vKIM2E131E.xlsm
    256.7 KB · Affichages: 40

Dranreb

XLDnaute Barbatruc
Ça vient de :
Set Données = FBase1.[A5:p5].Resize(FBase1.[A64000].End(xlUp).Row - 1)
Supposons que la End(xlUp).Row soit à 1000. - 1 ça fait 999, depuis 5 pour 999 va jusqu'à 1003 : trois lignes vide de trop.
Pourquoi ne pas faire plutôt
Set Données = ColUti(FBase1.[A5:p5])
Il ne se trompe jamais, lui.
 
Dernière édition:

KIM

XLDnaute Accro
Bonjour Dranreb,
Dans la même continuité et pour alléger le fichier excel des formules, je souhaite calculer l'âge des bâtiments par rapport à l'année courante. Les données réelles dépassent les milliers de lignes.
Col N : Surface du bâtiment
Col Q : Année de construction du bâtiment
Q2 : Année de référence = 2017
Col S : Date de réhabilitation
Je construis les col U à Y par formules:
-Réhabilités de moins de 5 ans : =SI(($S5="");0;SI($Q$2-DROITE($S5;4)>5;0;$N5))
-Surface construite de moins de 5 ans : =SI(ESTNUM($Q5);SI($Q$2-$Q5<5;$N5-SI(ESTNUM($U5);U5;0);0);0)
-Surface cosntruite de 5 à 10 ans : =SI(ESTNUM($Q5);SI(ET($Q$2-$Q5>=5;$Q$2-$Q5<=10);$N5-SI(ESTNUM($U5);U5;0);0);0)
-Surface construite de plus de 10 ans : =SI(ESTNUM($Q5);SI($Q$2-$Q5>10;$N5-SI(ESTNUM($U5);U5;0);0);0)
-Surface pondérée : =0,5*W5+X5
voir onglet Base2, col U à Y
Le tableau récapitulatif par DT est calculé par sommeprod

Je sollicite ton aide pour créer ces colonnes par vba (col AC à AG) pour ensuite créer les tableaux recap :
T1 : Recap par surface (col AI à AQ) et T2 Recap par nombre de bâtiment par DT et par catégorie d'âge.

Merci pour ton aide.

PS : En effet en remplaçant par Set Données = ColUti(FBase1[A5:p5]) je n'ai plus de col vides, Merci encore.

KIM
 

Pièces jointes

  • T_RecapGigogne_AgevKIM1.xlsm
    252.1 KB · Affichages: 41

Dranreb

XLDnaute Barbatruc
Bonjour.
À mon avis, du moment qu'il n'y a pas de formules potentiellement longues comme RECHERCHEV ou EQUIV on peut les laisser sous forme de formules.
Rappel: le module de classe TableIndex n'est plus utilisé par les modules de service.
Par contre j'ai équipé récemment SsGr de trois méthodes: Nombre, NbType et Somme.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Le mieux c'est d'enregistrer une nouvelle macro, puis, pendant que ça enregistre, valider les formules sur la 1ère ligne. Ça engendrera les instructions qui les leur affecte en notation R1C1. Il ne restera qu'à les reprendre dans un code qui les affecte à l'ensemble des lignes de différentes colonnes d'un Range. Comme Données.Columns(x).FormulaR1C1 = "=…

Non, la dernière version est désormais proposée là dedans
 

Pièces jointes

  • GigIdx.xlsm
    78 KB · Affichages: 38

KIM

XLDnaute Accro
Merci, je vais essayer.
Quelles sont les nouveautés de la dernière version ?

Quelle est la signification de -3 dans Gigogne(MaPlage, 1, 2, -3, , 4, 5) ?
Entre les données des col 3 et 4, , , veut dire une col vide ?

Merci
KIM
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
341

Statistiques des forums

Discussions
312 027
Messages
2 084 765
Membres
102 658
dernier inscrit
karima