Tableau et données - comptage

goldenboy

XLDnaute Occasionnel
Bonjour à tous,

Deuxième fois de l'année que je viens vous solliciter.

J'ai besoin de votre aide pour réaliser un comptage. Le fichier joint vous donnera l'idée de ce qui doit être réalisé.

Je pense que l'utilisation de tableau et de boucle imbriquées sont nécessaires, mais je ne maitrise pas vraiment les tableaux.

Le nombre de ligne à traiter est généralement entre 1500 et 2000.

Je reste à votre disposition pour toutes informations complémentaires.

Très cordialement.
 

Pièces jointes

  • tablo-tri.xlsx
    13.6 KB · Affichages: 78
  • tablo-tri.xlsx
    13.6 KB · Affichages: 80
  • tablo-tri.xlsx
    13.6 KB · Affichages: 78

goldenboy

XLDnaute Occasionnel
Re : Tableau et données - comptage

Bonjour mapomme,

Cette solution semble convenir et en voyant le code, je me rends compte que ma demande n'était pas simple.

Je rencontre une difficulté lors de l'ajout de clé pour la partie 'lecture des classements.

Voici la partie du code qui me fait planter :
VB:
'lecture des classements
dClass.RemoveAll: dClass.CompareMode = TextCompare
tAux = Feuil1.Range("A2").CurrentRegion.Value
i1 = 3: i2 = UBound(tAux, 1)
j1 = LBound(tAux, 1): j2 = UBound(tAux, 2)
For j = j1 To j2
  For i = i1 To i2
    If IsEmpty(tAux(i, j)) Then Exit For
    T2(1) = tAux(1, j): T2(2) = tAux(2, j)
    dClass.Add tAux(i, j), T2
    Debug.Print tAux(i, j)
  Next i
Next j
Erase tAux


J'ai ajouté un debug.print pour voir les données qui étaient ajoutées.
Dans votre fichier joint ça commence bien à "voiture" puis "camion" puis "cuillère" etc...
J'ai voulu modifier les catégories, les objets et les listes de codes, et moi il m'affiche "liste1", "objet1" et là il plante puisqu'il veut de nouveau ajouter "liste1" lorsqu'il passe à la deuxième catégorie.

J'ai pourtant respecté la disposition des tableaux c'est à dire :
- Ligne 2 = catégories
- Ligne 3 = liste associée
- Ligne 4 à 14 = objets
- Ligne 16 à 19 = listes

En écrivant ce message je me rend compte qu'en changeant la ligne i1 = 3: i2 = UBound(tAux, 1) par i1 = 4: i2 = UBound(tAux, 1), les objets sont biens ajoutés. C'est bizarre je trouve, a moins que vous n'ayez une explication.

Me vient donc un nouveau problème dans la partie suivante :
VB:
'effacement de la feuille résultat
With Sheets("Résultats")
  'effacement de la feuille
  .Columns("a:d").ClearContents
  'écriture des données sur la feuille
  .Range("a1").Resize(UBound(tData, 1), UBound(tData, 2)).Value = tData
  'suppression colonnes inutiles
  .Columns("b:c").Delete
  'tri selon catégories puis dates
  .Columns("A:B").Sort Key1:=.Range("B1"), Order1:=xlAscending, _
      Key2:=.Range("A1"), Order2:=xlAscending, Header:=xlYes, _
      MatchCase:=False, Orientation:=xlTopToBottom
En pas à pas, le problème est sur la ligne
'écriture des données sur la feuille
VB:
 .Range("a1").Resize(UBound(tData, 1), UBound(tData, 2)).Value = tData
en effet, la feuille "résultats" n'est pas alimentée et la lecture du tdata ne se fait pas :
'lecture du tableau trié des résultats
VB:
tData = .Range("A1").CurrentRegion.Value
J'ai le message "erreur d'execution '13':" "incompatibilité de type"

ci joint le fichier pour une meilleur compréhension.
J'ai ajouté un debug.print aussi pour vérifier la boucle sur les données. La boucle se fait bien jusqu'à la ligne 100.
 

Pièces jointes

  • Tablo-tri v4.xlsm
    38.9 KB · Affichages: 43
  • Tablo-tri v4.xlsm
    38.9 KB · Affichages: 55
  • Tablo-tri v4.xlsm
    38.9 KB · Affichages: 54

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Tableau et données - comptage

Bonsoir Goldenboy,

Il ne faut pas modifier le code. il fonctionne bien à priori.

L'erreur est une conséquence de l'instruction de la ligne suivante:
tAux = Feuil1.Range("A2").CurrentRegion.Value

Que fait cette instruction ?

Elle sélectionne la région de toutes les données contigües à la cellule A2 de la Feuil1.
Elle est l'équivalent de:
  • se placer sur la cellule A2
  • tapez Ctrl+*

Si vous reprenez mon fichier, si vous vous placez sur la cellule A2 de la feuille puis si vous tapez Ctrl+*,alors, la zone A2:H2 est sélectionnée et correspond à la zone des données des classements.

Si vous faites la même chose sur le fichier que vous avez joint, la zone sélectionnée devient A1:T8. Or la zone des données pour le tableau des classements doit être: A2:T8.

Pourquoi ce phénomème sur votre fichier? Parce la cellule N1 n'est pas vide. Cette cellule est donc incluse dans le sélection via le CurrenRegion.

Dans mon fichier joint, cette cellule N1 était suffisamment éloignée de la zone des données pour ne pas interférer avec le comportement de Feuil1.Range("A2").CurrentRegion.

Essayez avec votre fichier: effacer la cellule N1 -> le programme se déroule normalement.

En résumé chaque tableau (classement et liste) doit être délimité par une ligne vide au-dessus et en-dessous et par une colonne vide à droite.


Autre point:
Je suis parti sur le fait que la date était une date sans heure (comme dans votre premier fichier). Or dans votre dernier fichier les dates sont des dates avec une partie horaire. Le programme considèrera donc que la date 01/12/2014 15:35:43 est différente de la date 01/12/2014 15:35:44.

Pour éviter cela j'ai modifié le code pour ôter la partie horaire des dates.
 

Pièces jointes

  • Tablo-tri v4.1.xlsm
    43 KB · Affichages: 38
  • Tablo-tri v4.1.xlsm
    43 KB · Affichages: 37
  • Tablo-tri v4.1.xlsm
    43 KB · Affichages: 34

goldenboy

XLDnaute Occasionnel
Re : Tableau et données - comptage

Bonsoir mapomme.

Un grand merci pour toutes ces explications que j'ai parfaitement intégrées. Je test dès demain au travail et vous tiens informé.

J'aurais certainement une demande pour pouvoir faire une recherche des mêmes objets mais sur une liste différente. Le problème qui va tout de suite se poser est celui des clés qui doivent être uniques.
Mais on abordera la chose dès que j'aurais tester de nouveau.

Très bonne soirée a vous.
 
Dernière édition:

goldenboy

XLDnaute Occasionnel
Re : Tableau et données - comptage

Bonjour mapomme.

Le fichier a très bien fonctionné ce matin.

Voici ce que j'ai fais pour l'histoire de la recherche d'objets identiques sur une liste différente et donc le problème de clé identique. J'ai créé un deuxième tableau "GED PERSO VIP" et une deuxième feuille de résultat.

Je rencontre un petit souci sur la partie des anomalies. Les dates s'inversent. Le 09/01/2014 devient le 01/09/2014.

J'ai bien saisi le principe du code. Est-il possible de le placer dans un module ?

Merci beaucoup pour ce travail qui correspond parfaitement à ce que j'imaginais.
 

Pièces jointes

  • Tablo-tri v4.1.xlsm
    104.4 KB · Affichages: 41
  • Tablo-tri v4.1.xlsm
    104.4 KB · Affichages: 44
  • Tablo-tri v4.1.xlsm
    104.4 KB · Affichages: 40

goldenboy

XLDnaute Occasionnel
Re : Tableau et données - comptage

Bonjour mapomme, bonjour le forum,

J'ai toujours le problème des dates qui s'inversent dans l'affichage des erreurs.

J'ai également un autre problème.
Je pense qu'il survient lorsqu'il n'y a pas de valeur dans le tableau d'erreur, et que la macro veux l'afficher. Un truc du genre "l'indice n'appartient pas à la sélection".

Est il possible de pallier à cette erreur en testant le contenu du tableau erreur avant de vouloir l'afficher ?

Par avance, je vous remercie de vos explications.
 

Discussions similaires

Réponses
16
Affichages
654

Statistiques des forums

Discussions
312 408
Messages
2 088 154
Membres
103 746
dernier inscrit
Arknofl