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 :

Macro classement complexe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut Macro classement complexe
    Bonjour,
    Je n'ai d'autre choix que de me tourner vers vous aujourd'hui car je suis confronté à un pb complexe que je n'arrive pas à solutionner.

    J'aimerais créer une macro permettant au tableau en pj de trier les lignes en fonction de leur "IDENTIFIANT" et Technologie.

    Contexte :

    Dans la colonne "technologie" on retrouve
    - EPP
    - PPP
    - PSP
    etc ..

    "E" symbolisant la début et la fin d'une liaison
    "P" et "S" symbolisant le type de liaison que c'est
    Exemple avec le code "EPS":
    La lettre du milieu "P" définit le type de la liaison étudié et les deux autres lettres "E" et "S" définissent ce qu'on retrouve avant et après cette liaison.
    donc nous ici nous somme sur une liaison qui commence "E" de type "P" et qui est suivie d'une liaison type "S". (j’espère que je ne vous ai pas perdu ^^ ...)

    De plus dans la colonne "IDENTIFIANT"
    On retrouve un ID composé de 2 paquet de 10 chiffres et lettre ex : "68224E0033 68224E0031" le paquet a gauche "68224E0033" est l'ID de la liaison précédente et le paquet à droite celui de la liaison suivante.

    ex:
    LUTTEC4008 CA 5757,2 711715249 68218P0002 68218E0027 444 EPP LUTTE
    LUTTEC4008 CA 5757,2 711715259 68218E0027 68218P0003 96 PPE LUTTE

    Sur les deux lignes précédentes, j'ai le code EPP (1ere ligne) donc je sais que la liaison type "P" commence et que la liaison suivante est de type "P". Il faut donc chercher une ligne commençant par le code "PP" puis comparer le paquet "68218E0027" de droite de la 1ere ligne avec le paquet de gauche de la ligne que l'on cherche (ici ligne 2).

    Ma question est : Est-il possible de faire une macro permettant de faire la recherche automatique et l'association de ses lignes ?

    J’espère avoir été clair au minimum ...
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Matthieu.boillon Voir le message
    Bonjour,

    Voir avec le BERE Normandie d'ENEDIS s'il travaille toujours avec le tableur "Segment" ou son équivalent. Cet outil permet à partir d'une extraction PRAO de calculer la résistance et la réactance d'un circuit depuis un noeud du réseau HTA jusqu'à sa cellule départ du poste source. Il possède donc l'algorithme pour trouver les liaisons de noeud à noeud.
    Ce logiciel avait été réalisé pour modéliser les productions décentralisées dans le logiciel Harmoniques. Le besoin doit donc toujours être d'actualité.

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Un peu de gymnastique basique

    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
    Sub Correspondances()
    Dim LastLig As Long, i As Long, Cpt As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    'On copie la feuille initiale
    Feuil1.Copy After:=Feuil1
    With ActiveSheet
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
     
        Application.DisplayAlerts = False
        'on scinde la colonne Identifiant en 25
        .Columns("F:F").Insert
        .Range("E2:E" & LastLig).TextToColumns Destination:=.Range("E2"), DataType:=xlDelimited, Space:=True, FieldInfo:=Array(Array(1, 2), Array(2, 2))
        .Columns("I:J").Insert
        'et la colonne Technologie en 3
        .Range("H2:H" & LastLig).TextToColumns Destination:=.Range("H2"), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(1, 1))
        .Range("I2:I" & LastLig).TextToColumns Destination:=.Range("I2"), DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(1, 1))
        Application.DisplayAlerts = True
     
        'on concatène en L le suivant,le type et l'id suivant
        'et en M le précédent, le type et l'id précédent
        With .Range("L2:L" & LastLig)
            .Formula = "=J2&I2&F2"
            .Value = .Value
        End With
        With .Range("M2:M" & LastLig)
            .Formula = "=H2&I2&E2"
            .Value = .Value
        End With
     
        'on parcoure les colonnes L et I pour indiquer en N les correspondances
        For i = 2 To LastLig
            Set c = .Range("M2:M" & LastLig).Find(.Range("L" & i), LookAt:=xlWhole)
            If Not c Is Nothing Then
                Cpt = Cpt + 1
                c.Offset(, 1) = Cpt & "A"
                .Range("N" & i) = Cpt & "B"
                Set c = Nothing
            End If
        Next i
    End With
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    Merci mercatog, mais j'ai peur que ta proposition ne fonctionne pas .. (ou alors je ne comprend pas comment apparaissent les correspondances)

    Peux-tu m'en dire plus ?

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    J'ai aussi peur que la proposition ne fonctionne pas tant que tu n'as pas testé et que les maigres commentaires ne t'ont pas aidé:

    1. je copie la feuille (pour garder l'initiale)
    2. je sépare Identifiant en 2 colonnes
    3. je sépare Technologie en 3 colonnes (chacune comporte une lettre)
    4. en L je concatène Suivant/Type/Identifiant Suivant
    5. en M je concatène Précédent/Type/Identifiant Précédent
    6. je compare la colonne L avec M et j’inscris le résultat en N

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Septembre 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2015
    Messages : 10
    Par défaut
    mercatog
    6. je compare la colonne L avec M et j’inscris le résultat en N
    L'idée serait de pouvoir classer les lignes contenants un bout ID identique ensemble.

    En ce qui concerne les valeurs 1A, 1B etc je n'arrive pas a comprendre comment les exploiter à la fin ..

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    1A et 1B sont des lignes correspondant au critère imposé. j'ai ajouté le A pour départ et B pour suivant

    Il suffit de trier les données selon la colonne N. (tu peux enlever les lettres A et B dans le code)

Discussions similaires

  1. [WD-2007] [Résolu] Macro VBA complexe avec regex et tags à modifier dans tableau
    Par nicoladastra2 dans le forum VBA Word
    Réponses: 7
    Dernier message: 19/03/2014, 12h50
  2. Macro Comparaison complexe
    Par obie78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/08/2010, 21h34
  3. [OL-2007] macro classement mail en fonction du contact
    Par joetitia dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 22/07/2010, 18h25
  4. Macro un peu complexe
    Par noisat dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/06/2008, 10h27
  5. Macro complexe sous excel
    Par FreddyNB dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 26/09/2007, 17h41

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