Compter valeurs uniques + Condition

MsVixene

XLDnaute Nouveau
Bonjour,

j'ai un fichier de suivi pour réaliser des inventaires.

Les biens sont identifiés par des N°d'inventaire, eux mêmes composés de plusieurs lignes, localisés dans des N° de locaux.
On retrouve tout genre de numéros d'inventaire (Chiffres, lettres, chiffres+lettres)

J'ai donc besoin d'aide sur 3 points :

Dans un autre sujet, on vient de créer une maccro qui permet de dire si les N° d'inventaire de l'onglet EXTRACTION sont inventoriables ou non, en fonction de la liste de l'onglet A ENLEVER. (On dit NON si le N° d'inventaire est dans les deux listes, sinon OUI).

Dans le module 4 :
La colonne 10 de longlet EXTRACTION n'existant pas quand on fait l'extraction SAP, j'aimerais copier/coller la mise en forme seulement de la colonne d'avant. J'ai donc fait un petit code avec l'assistant vu que je ne sais pas faire grand chose. Mais la sélection copier ne s'en va pas pour autant, alors que j'ai bien mis un range select après.
Je renomme également la colonne.

J'aimerais rajouter une textBox pendant que la maccro s'exécute car il y a 17000 lignes, donc j'aimerais qu'on patiente pendant ces quelques secondes. J'ai mis une ligne de code mais comment faire pour que la textbox reste ?

Dans le module 2 :
Cette maccro permet de compter le nombre unique N° de locaux des onglets EXTRACTION et RESULTAT, et le nombre unique de N° d'inventaire, puis de le renseigner dans l'onglet POINT A DATE. Seulement, j'aimerais maintenant prendre en compte que l'on sait si le N° d'inventaire doit être inventorié. Donc clairement:
Si pour une ligne, la colonne 10 = OUI, alors compter.
Si pour une ligne, la colonne 10 = NON, alors ne pas compter.

Merci bicoup.
 
Dernière édition:

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Ok j'ai bien compris par contre, peut on éviter de cocher cette case ? Je veux dire que les personnes qui vont utiliser ce fichier ne l'auront pas cochée......

Le post #13 doit remplacer le début de mon module du post #12 c'est ça ? J'ai un peu de mal. Si c'est ça, j'ai un message Incompatibilité de type ici : TSuj = RgSuj.Value

Ne pouvez vous rien faire avec le code du post 14 plutot ? Même s'il n'est pas très propre lol j'aimerais juste à ne pas indiquer de changer des truc dans les paramètres... je suis désolée mais je dois résonner (mal) mais selon les futurs utilisateurs.... :(
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

Lorsque la référence est ajoutée au projet VBA du classeur, elle y reste, les utilisateurs n'ont plus à la cocher à leur tour. C'est comme un complément de programmation sauf qu'il vient d'un fichier genre dll au lieu d'être dans des modules.

Traitez donc tout avec des tableaux, comme j'ai fait, ce sera plus rapide, voire plus simple.
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

Le type Dictionary est défini par la bibliothèque Scripting. L'erreur ne persistera que tant que cette bibliothèque ne sera pas mise à la disposition du projet VBA. Ou alors remettez votre CréateObject, mais alors je ne vous aiderai plus, car j'y suis foncièrement hostile !
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

Ah oui j'avais sauté ça. Je ne vois pas pourquoi. Qu'est ce que vous avez transmis à la procédure en guise de paramètre RgSuj ?
De toute façon je ne vois pas ce qu'il pourrait y avoir comme incompatibilité de type: il y est bien annoncé As Range dans les paramètres. C'était l'ancien Rg, je l'ai renommé Rg sujet en somme pour le distinguer de second optionnel Rg à inventorier (les "Oui"/"Non")…
Joignez peut être le classeur que je jette un œil.
 
Dernière édition:

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Voici le fichier : bon je ne comprends pas, je n'ai plus de message d'erreur mais le compte est toujours le même qu'avant, c'est à dire qu'il ne prend pas en compte la condition.
Cf. Module 2
 

Pièces jointes

  • Test 2 XLDL.xlsm
    71.3 KB · Affichages: 46
  • Test 2 XLDL.xlsm
    71.3 KB · Affichages: 47
  • Test 2 XLDL.xlsm
    71.3 KB · Affichages: 52

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

Bonjour.
Normal vous n'avez pas spécifié la colonne J comme second paramètre pour ceux qui le nécessitent.
Pourquoi cette procédure CountUniqueItem est si compliquée ? La function NbUnique est déjà équipée d'un dispositif qui étend jusqu'à la dernière cellule renseignée dans la colonne si on ne spécifie qu'une seule cellule. Moi je ne me sert jamais des noms de feuilles Excel, je préfère donner des noms mnémoniques aux objets Worksheet, rubrique Microsoft Excel Objets. c'est la première propriété Name entre parenthèses dans la fenêtre de propriétés. Ils peuvent alors directement être utilisés comme expressions Worksheet sans que cela ne demande à Excel une recherche dans sa collection Workheets. Accès direct.
En attendant avec ces deux faits, et les noms de Worksheet actuels ça pourrait devenir :
VB:
Feuil3.[G14].Value = NbUnique(Feuil1.[B2], Feuil1.[J2])
 
Dernière édition:

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Ce n'est pas moi qui ai fait ces procédures.... Je n'en suis absolument pas capable. Mais si vous estimez que ce n'est pas correcte, n'hésitez pas à modifier une bonne fois pour toute le fichier ! Ce serait beaucoup mieux et plus rapide !

Le module 2 ne sert qu'à compter et donne 4 résultats, tant qu'ils arrivent bien aux endroits indiqués actuellement, faites ce qui vous semble le plus judicieux... Je suis désolée mais je ne suis pas opérationnelle pour suivre vos indications. :(
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

Qu'est-ce que vous ne savez pas faire ?
Par ailleurs il y a des localisations vides. Je suppose qu'il ne faudrait pas les comptabiliser ?…

Ce n'est pas moi qui ai fait ces procédures.... Je n'en suis absolument pas capable.
À quoi bon m'informer de cet ancien état de fait qui va obligatoirement devoir cesser, puisqu'on est là pour vous aider bénévolement à le faire vous même et pas payé pour le faire à votre place ?
 
Dernière édition:

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Oui il ne faudrait pas les comptabiliser (j'ai vu qu'actuellement elles le sont)

Oui c'est bien là le but des Forums. Et puis je m'exprime mal je sais, alors je n'ai pas TOUT fait ;) J'essaie d'adapter comme je peux et comme je comprends surtout... Mais j'estime que vous me parler trop technique, c'est encore compliqué pour moi. Je ne dis pas que ce n'est pas clair car ça doit l'être quand on connait du vocabulaire. Ca prend du temps!
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

C'est le coup de renommer en mnémonique les Feuilx qui ne veulent rien dire de Microsoft Excel Objets qui vous pose problème ?
Touches Ctrl+R s'il y a lieu, cliquez deux fois sur "Feuil1 (RESULTAT)" par exemple, touche F4 s'il y a lieu, à droite de la 1ère propriété "(Name)" tapez "FRésu" à la place de "Feuil1".
 
Dernière édition:

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Tous les coups me posent problème lol. Non mais je n'avais pas compris que je devais faire ça.
Je dois renommer toutes les feuilles donc ? Mais ça change quoi précisément pour la macro du module 2
 

Dranreb

XLDnaute Barbatruc
Re : Compter valeurs uniques + Condition

On peut alors écrire tout ça comme ça :
VB:
Sub CountUniqueItem()
FPoint.[E9].Value = NbUnique(FRésu.[B2])
FPoint.[G9].Value = NbUnique(FRésu.[C2])
FPoint.[E14].Value = NbUnique(FExtrac.[A2], FExtrac.[J2])
FPoint.[G14].Value = NbUnique(FExtrac.[B2], FExtrac.[J2])
End Sub

Function NbUnique&(ByVal RgSuj As Range, Optional ByVal RgÀInv As Range)
Dim LDéb&, TSuj(), TÀInv(), L&
With RgSuj.Worksheet.UsedRange
   Set RgSuj = RgSuj.Resize(.Row + .Rows.Count - RgSuj.Row): End With
TSuj = RgSuj.Value
With New Scripting.Dictionary ' Implique référence "Microsoft Scripting Runtime"
   If RgÀInv Is Nothing Then
      For L = 1 To UBound(TSuj)
         If Not IsEmpty(TSuj(L, 1)) Then .Item(TSuj(L, 1)) = Empty
         Next L
   Else
      TÀInv = Intersect(RgÀInv.EntireColumn, RgSuj.EntireRow).Value
      For L = 1 To UBound(TSuj)
         If Not IsEmpty(TSuj(L, 1)) And TÀInv(L, 1) = "Oui" Then .Item(TSuj(L, 1)) = Empty
         Next L: End If
   NbUnique = .Count: End With
End Function
 

MsVixene

XLDnaute Nouveau
Re : Compter valeurs uniques + Condition

Ok je comprends mieux et ça a l'air moins compliqué.

EDIT : Oh mais ça m'a l'air bon dans ma grande extraction de 17000lignes !!

EDIT 2 : J'ai trouvé un HIC avec les renommages mnémoniques. Je fais des extractions régulières de SAP et je dois à chaque fois renommer dans les propriétés de la feuille donc si je comprends bien ?
 
Dernière édition:

Discussions similaires