IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Modification de code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Par défaut Modification de code
    Bonjour à tous,

    Ça fait quelques jours que je bloque sur une formule, je vous explique:
    Je reçois un tableau Excel de taille différente (je ne connais pas le nombre de lignes), dont j'ai besoin d'extraire le nombre de "TPE" différents par semaine.

    Parce que ce serait trop facile, la colonne où figure les numéros de TPE (type "TPE1501IBS00013", "TPE1501IBS00019" etc.) comprend d'autres références que je ne veux pas prendre en compte.

    J'ai commencé par rédiger une formule avec SOMMEPROD qui compte le nombre de TPE dans les bornes de dates correspondantes avec les conditions de sommeprod et la fonction GAUCHE, mais ma formule ne fait que de me compter le nombre de TPE au total or il peut y en avoir une vingtaine avec la même référence, et je souhaiterai ne pas avoir de doublon dans mon résultat final...



    Colonne I : dates des références
    Colonne B et C : bornes de mes semaines (du 01/01/15 au 07/01/15 par exemple)
    Colonne K : références

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Il me semble que tu t'es trompé de forum à moins que tu ne veuilles créer une macro pour ton tri, tu devrais clore le sujet et poster ici:
    http://www.developpez.net/forums/f54...-office/excel/
    Par contre si tu as besoin d'aide pour le Vba tu es le bien venu
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Par défaut
    Mince en effet ! Je me disais aussi il n'y a pas beaucoup de questions sur Excel-Excel !!

    Bon puisque tu me proposes ton aide Eric je me suis mis en tête de résoudre mon problème via VBA

    Une âme charitable m'a proposé le code suivant (qui marche nickel, un peu long à se lancer mais je ne vais pas faire la fine bouche)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub NbreDeTPE()
     
        Set plage = Range("K2:K" & Range("K" & 65536).End(xlUp).Row)
        For ln = 2 To Range("B" & 65536).End(xlUp).Row
            Set dico = CreateObject("Scripting.dictionary")
            For Each c In plage
                If c.Offset(0, -2) >= Cells(ln, "B") And c.Offset(0, -2) <= Cells(ln, "C") _
                        And Left(c.Value, 3) = "TPE" Then
                    dico(c.Value) = ""
                End If
            Next c
            Cells(ln, "D").Value = dico.Count
        Next ln
     
    End Sub
    Maintenant je me demandais comment est-ce que je pourrais rajouter une autre référence que "TPE", du genre "RE1". C'est à dire compter le nombre de références TPE et RE1 différentes dans une borne de temps. J'ai essayé comme un newbie de rajouter le code suivant mais les résultats n'ont pas été concluants...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If c.Offset(0, -2) >= Cells(ln, "B") And c.Offset(0, -2) <= Cells(ln, "C") _
                        And Left(c.Value, 3) = "RE1" Then
                    dico(c.Value) = ""
                End If

  4. #4
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Admdg,
    On va voir ce que l'on peut-faire, mais avant tout quand tu veux poster du code, utilises les balises

    Nom : Balise Code.jpg
Affichages : 191
Taille : 25,6 Ko

    et tu va voir c'est magique !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub NbreDeTPE()
     
    Set plage = Range("K2:K" & Range("K" & 65536).End(xlUp).Row)
    For ln = 2 To Range("B" & 65536).End(xlUp).Row
    Set dico = CreateObject("Scripting.dictionary")
    For Each c In plage
    If c.Offset(0, -2) >= Cells(ln, "B") And c.Offset(0, -2) <= Cells(ln, "C") _
    And Left(c.Value, 3) = "TPE" Then
    dico(c.Value) = ""
    End If
    Next c
    Cells(ln, "D").Value = dico.Count
    Next ln
     
    End Sub
    JE vais regarder ton code et te recontacte
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2014
    Messages : 27
    Par défaut
    Merci Eric (je viens de baliser mon post précédent

    Je te joins un fichier avec un exemple de ce que je voudrais, j'ai rajouté une petite difficulté qui n'est pas prise en compte dans le code présent: la colonne de référence et de date de référence ne sont pas sur la même feuille (feuil2) que celle où je souhaiterais les résultats (feuil1) :/

    https://mon-partage.fr/f/65scyKC0/

  6. #6
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Rebonjour,
    Voici un code qui a l'air de fonctionner, dis-moi si cela te convient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Option Explicit
     
    Sub Tri_TPE()
    Dim TPE As Worksheet
    Dim RSLT As Worksheet
    Dim NbLigne As Integer
    Dim i As Integer
    Dim j As Integer
    Dim Rng1 As Range
    Dim Rng2 As Range
    Set RSLT = ThisWorkbook.Sheets("Feuil1")
    Set TPE = ThisWorkbook.Sheets("Feuil2")
    Set Rng1 = RSLT.Range("A1")
    Set Rng1 = Rng1.Offset(0)
    Set Rng2 = TPE.Range("K1")
    Set Rng2 = Rng2.Offset(0)
     
    With TPE
     
          NbLigne = .Cells(.Rows.Count, 11).End(xlUp).Row   ' On compte le nombre de lignes de l'onglet
     
    End With
     
     TPE.Range("$I$1:$K$" & NbLigne).RemoveDuplicates Columns:=Array(1, 3) 'on enlève les doublons
     
    With TPE
     
          NbLigne = .Cells(.Rows.Count, 11).End(xlUp).Row   ' On compte le nombre de lignes de l'onglet après suppression des doublons
     
    End With
     
     
    For i = 0 To NbLigne
            If Rng2.Offset(i, 0) Like "*TPE*" Or Rng2.Offset(i, 0) Like "*RE1*" Then ' on recherche les lignes qui contiennent RE1 ou TPE
                For j = 0 To NbLigne
                    If Rng2.Offset(i, -2) > Rng1.Offset(j, 1) And Rng2.Offset(i, -2) < Rng1.Offset(j, 2) Then 'Quand la ligne est trouvée on vérifie que la date correspondante ( Rng2.Offset(1, -2) ) est comprise dans
                    Rng1.Offset(j, 3) = Rng1.Offset(j, 3) + 1                                                 'la période définie par les colonnes B et C de la feuille 1
                    End If                                                                                    ' et on ajoute 1 au compteur colonne D feuille 1
                Next j
            End If
    Next i
     
    End Sub
    Voici ton fichier modifié

    Classeur1 v2 Eric.xlsm

    Eric
    Fichiers attachés Fichiers attachés
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. modification dynamique code html
    Par xtendance dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/10/2006, 11h09
  2. Réponses: 4
    Dernier message: 29/09/2006, 16h38
  3. Réponses: 1
    Dernier message: 03/05/2006, 10h17
  4. [Couleur] Modification du code couleur de l'interface
    Par Therich dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 31/01/2006, 20h00
  5. Modification de code
    Par HADES62 dans le forum Autres langages
    Réponses: 5
    Dernier message: 25/01/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo