Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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
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.
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.
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.
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.
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 ?
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.