Gros problème VBA / EXCEL

Bonjour,

J'ai une macro sous VBA qui m'ouvre un classeur. Intègre des données d'un texte et me fait une série de calculs pour trouver 4 statistiques...

Dans ces données j'ai entre autre 2 colonnes qui sont les colonnes référence de l'opération qui est de type TXXXXXX et une référence client de type CXXXXXXX

Attention c'est parti :

Je peux avoir plusieurs réf C pour une seule ref T par exemple je peux avoir ceci dans mon tableau :

ref T ref C Date de réception Date statut 1100 Date statut 1650 Instruction correcte

T1000001 C130001 10/01/2010 10/01/2010 10/01/2010 OUI
T1000001 C130002 10/01/2010 10/01/2010 10/01/2010 OUI
T1000001 C130003 10/01/2010 10/01/2010 11/01/2020 OUI
T1000002 C140001 15/01/2010 15/01/2010 15/01/2010 OUI
T1000003 C150001 17/01/2010 17/01/2010 17/01/2010 NON

A partir d'un tableau de ce type qui peut comporter jusqu'à 4000 lignes, je calcule 4 stats

Un délai moyen de passage entre le statut 1100 et le statut 1650
Le nombre d’instructions correctes
Le nombre d'opération réalisées en retard ( si le nombre de jours entre réception et statuts 1100 dépasse 2 jours)
Une dernière stat qui n'a pas d'intérêt ici :-)

Voici mon problème.
Pour le calcul de la dernière stat et le délai moyen je n'ai pas de soucis je prends toutes les données.

Par contre pour le nombre d'instruction et le nombre d'opération en retard je ne dois faire mes calculs qu'en fonction des réf T. Il faut donc que lorsque je calcul mes 2 stats concernées, je demande à ma macro d'exclure les doublons en réf T. L'exemple est simple J'ai 3 ref T1000001 il faut qu'une seule soit prise en compte... sinon j'ai des doublons.

Merci d'avance pour votre aide !!
Configuration: Windows XP Internet Explorer 6.0

30 réponses

Résumé de la discussion

Problème posé : une macro VBA lit un tableau jusqu’à 4000 lignes avec des références T (TXXXXXX) et C (CXXXXXXX) et calcule quatre statistiques. Le cœur du souci est de ne compter que les T uniques pour deux statistiques : le nombre d’instructions correctes et les opérations réalisées en retard, car plusieurs C peuvent être associées à un T. Pour les autres mesures (délai moyen et dernière statistique), toutes les données peuvent être utilisées, mais il faut exclure les doublons par T lors des calculs concernés. D’autres pistes évoquées incluent l’usage de dictionnaires ou collections pour enregistrer les T rencontrés et éviter les doublons, ainsi que des questions sur l’importation de fichiers texte et la compatibilité IE8.

Bobot (l’IA à votre service)
  1. J'ai retrouvé celui qui m'avait donné le code.
    Je pense qu'il y a une petite erreur au niveau de la reconnaissance de table je lui ai demandé.
    1. ça me dit que la plage de destination n'est pas dans la même feuille de calcul que celle dans laquelle la table de requette a été créee
      1. essaye:
        With sheets("ton nom de feuille ou écrire")
        .QueryTables.Add(Connection:= _
        "TEXT;C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".TXT", Destination:=Range( _
        "A" & nbligne & ""))
        .Name = "Extraction SIGMA"  < - - ICI
        .TextFileSemicolonDelimiter = True
        .Refresh
        End With 


        mais bon je ne suis vraiment pas sur de ca, il faudrai que quelqu'un qui utilise cette methode vienne t'aider
        1. Je comprends pas le fichier s'ouvre automatiquement sur la 1ere feuille de mon classeur et ne fais pas de reconnaissance
          1. il faut changer le .name
            With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;C:\Documents and Settings\troncan1\Desktop\KPI." & djnwemp & ".TXT", Destination:=Range( _
            "A" & nbligne & ""))
            .Name = "Extraction SIGMA"  < - - ICI
            .TextFileSemicolonDelimiter = True
            .Refresh
            End With 
            1. J'ai essayé de recopier le code mais je comprends pas pourquoi ça m'ouvre une 2eme fois dans la même feuille...
              1. d'accord, donc ma méthode n'est pas utilisable

                tu peu peut etre recopier le même code, mais s'il y a beaucoup de ligne ca doublera le temps de travail du pc
                1. Mon fichier TXT est préconfiguré pour que quand tu l'ouvres dans excel il se range direct en colonnes.
                  (j'ai les titres dans le document puis les données)
                  1. avec le lien que je tes fourni tu peu écrire la valeur lu dans le fichier txt dans toutes les feuilles que tu veu
                    dans quel formes sont tes données dans ton fichier txt ?
                    1. Ouf c'est pas moi qui ai trouvé la méthode.
                      Je suis vraiment novice en VBA.
                      On m'a demandé de faire quelque chose j'essaie de me débrouiller :-)

                      T'aurais une méthode pour ouvrir un TXT dans 2 feuilles en simultané ?
                      1. arf un léger écart dans un mot et ca change tout.
                        je parlai de la fonction getopenfilename qui renvoi un objet contenant le fichier et qui peu ainsi etre traité facilement (selon moi)

                        le filename dont tu parle s'applique pour le fichier xls et par pour le texte. je ne connais pas du tout la méthode que tu as utilisé pour le fichier texte mais voici un lien qui m'as aidé:
                        http://www.info-3000.com/vbvba/fichiertexte.php
                        1. Pas de soucis :-)

                          Ouai je suis en open file. C'est au début de mon code. Il faudrait qu'il s'intègre dans la 1ere feuille Extraction SIGMA mais aussi dans la 2ème Extraction SIGMA2.
                          1. désolé, je me suis soudainement mis a bosser durant 2 heures pour faire mon projet de stage xD
                            tu utilise un truc genre openfilename pour traiter ton fichier texte ? j'ai bien une solution toute bête mais ca dépend de ce que tu a fait pour copier ton fichier texte, tu pourrai mettre le code de ton importation du fichier texte ?
                            1. Très bien.

                              Dernière questions.

                              Lors de l'execution de ma macro, j'ouvre automatiquement un fichier texte dans ma feuille extraction SIGMA. J'aimerai que ce fichier s'ouvre 2 fois.
                              Une fois dans 'Extraction SIGMA' et une autre dans 'Extraction SIGMA2'
                              1. je vien de voir qu'il n'acceptai pas d'utiliser le "tab" en variable, du coup en remplacant tab par untab ou tableau si tu veu, ca marche
                                1. Erreur de syntaxe sur le dim tab

                                  Sub test()

                                  dim tab() as string
                                  Dim lig As Long
                                  Dim t As Long
                                  Dim vu As Boolean
                                  Dim a As Long

                                  lig = 2
                                  a = 0

                                  With Sheets("Extraction SIGMA")
                                  'on redimenssionne le tableau
                                  While .Range("A" & lig).Value <> ""
                                  lig = lig +
                                  Wend
                                  redim preserve tab(lig)

                                  'on compare chaque ligne de la feuille avec le contenu du tableau
                                  For i = 2 To lig
                                  t = 0
                                  vu = False
                                  while tab(t)<>"" or vu=false
                                  if tab(t)=.range("A" & i).value then vu=true
                                  t = t + 1
                                  Wend
                                  if vu=false then tab(a)=.range("A" & i).value: a=a+1
                                  Next i
                                  End With

                                  End Sub
                                  • 1
                                  • 2