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 :

Fusionner 2 lignes suivant une variable commune


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 36
    Par défaut Fusionner 2 lignes suivant une variable commune
    Bonjour,
    Je souhaiterais récupérer une ligne commençant par "OP" contenant une variable identique à la ligne commençant par "OC"pour permettre de fusionner les 2 lignes
    Sachant que cette variable ne se situe pas au même endroit sur les 2 lignes à fusionner.
    Le code ci dessous fonctionne uniquement quand la variable rechercher se situe au même endroit "X = Int(TReport(i, 2)) & (TReport(i, 3))"


    exemple :
         A      B       C
    1  OP	     C	     1036
    2  OC	  1036     AMR20170
    3  GF    3256    KF2017
    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
    44
    45
     
    Private Sub CommandButton1_Click()
    Dim i&, J&, K&
    Dim DicoA As Object, DicoD As Object
    Dim TReport As Variant, X As Variant
    Dim Y As Variant
     
    Set DicoA = CreateObject("Scripting.dictionary")
    Set DicoD = CreateObject("Scripting.dictionary")
     
    With Sheets("Requête5")
        TReport = .Range(.Cells(2, 1), .Cells(.Rows.Count, 12).End(3))
        ReDim Preserve TReport(1 To UBound(TReport, 1), 1 To UBound(TReport, 2) * 2)
        For i = LBound(TReport, 1) To UBound(TReport, 1)
             X = Int(TReport(i, 2)) & (TReport(i, 3))
     
            Select Case TReport(i, 1)
                Case "OP"
                    DicoA(X) = i
                Case "OC"
                    DicoD(Y) = i
            End Select
        Next i
     
        For i = LBound(TReport, 1) To UBound(TReport, 1)
            X = Int(TReport(i, 2)) & (TReport(i, 3))
            If TReport(i, 1) = "OP" And DicoA.exists(X) And DicoD.exists(X) Then
     
                L = 0
                J = J + 1
                For K = 1 To 16
                    TReport(J, K) = TReport(i, K)
                Next K
     
                For K = K To 32
                    L = L + 1
                    TReport(J, K) = TReport(DicoD(X), L)
                Next K
            End If
        Next i
     
        Sheets("Feuil1").Select
        .Cells(2, 1).Resize(J, UBound(TReport, 2)).FormulaLocal = TReport
    End With
    End Sub

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    merci d'expliquer clairement le(s) critère(s) de décision et avec un exemple avant / après …

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 36
    Par défaut
    Marc, voici le traitement avant

      A        B        C
    1 OP	 C	  1036
    2 OC	1036   AMR20170
    3 GF  3256   KF2017
    voici le traitement après fusion des 2 lignes "OP" et "OC"

       A    B        C       D      E         F
    1 OP	 C	  1036   OC     1036   AMR20170

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 36
    Par défaut
    voici le traitement avant

    Ligne 1 : OP/C/1036
    Ligne 2 : OC/1036/AMR20170
    Ligne 3 : GF/3256/KF2017
    Ligne 4 : OP/C/1037
    Ligne 5 : OC/1037/AMR20170
    La valeur commune de la ligne 1 (OP) et ligne 2 (OC) est 1036
    cette donnée étant commune on crée une ligne fusionné des 2 occurrences soit :

    voici le traitement après
    ligne 1 : OP/C/1036/OC/1036/AMR20170
    ligne 2 : OP/C/1037/OC/1037/AMR20170

    Actuellement j’ai une variable qui concatène 2 champs (le champ 2 et le champ 3)
    X = Int(TReport(i, 2)) & (TReport(i, 3))"
    si ce champ est commun, il crée la concaténation des 2 lignes.

    Ce que je veux faire c’est lorsque :
    Lorsque la ligne commence par OP et donnée de la 3e colonne de la ligne = la ligne commence par OC et donnée de la 2e occurrence de la ligne
    alors on concatène la ligne.

    J'ai essayé d'être le plus clair possible mais c'est évident à expliquer.

    Merci par avance de votre aide

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Les lignes à concaténer se suivent-elles forcément comme dans "l'exemple" ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 36
    Par défaut
    désolé du retard dans ma réponse
    oui Marc les lignes OP sont toujours suivi d'une ligne OC.
    en revanche comme dans l'exemple tu peux avoir une autre ligne GF à ne pas restituer.

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

Discussions similaires

  1. [MySQL] fusionner deux tableaux par une variable commune pour faire un tuple unique
    Par mickeynad dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/04/2010, 11h28
  2. [PC] Comment incrémenter la ligne d'une variable ?
    Par SinXJon dans le forum Cobol
    Réponses: 4
    Dernier message: 15/02/2007, 19h51
  3. probleme pour faire gotoandplay suivant une variable
    Par logone dans le forum ActionScript 1 & ActionScript 2
    Réponses: 26
    Dernier message: 09/05/2006, 11h18
  4. supprimer lignes d'une variable session tableau sauf 1
    Par epeichette dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2006, 18h41
  5. Réponses: 5
    Dernier message: 20/09/2005, 23h48

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