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 :

VBA complexe issu d'un tableau de données a transformer [XL-2013]


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
    Responsable d'exploitation informatique
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Par défaut VBA complexe issu d'un tableau de données a transformer
    Bonjour à tous,
    J'essaie d'aider ma fille sur un boulot qu'elle doit faire. Cette tache demande énormément de temps et le risque d'erreur est grand. Son besoin n'est pas simple à expliquer. j'ai fait une feuille XL dans laquelle j'explique son besoin. l’objectif est de pouvoir automatiser cette tache.
    Merci d'avance,
    Salutations
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Si j'ai bien compris, je commencerais par un tri et j'irais comme suit en spécifiant le nom des feuilles (et classeurs si nécessaire):

    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
     
        Dim I As Long, J As Long, nbLignes As Long, LigneDest As Long
        Dim Cas As String
     
        'Tri des données par CAS et Ordre
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A" & nbLignes) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C2:C" & nbLignes) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:C" & nbLignes)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        'Copie dans la feuille Feuil2
        LigneDest = 1
        For I = 2 To nbLignes - 1       'on laisse tomber la dernière ligne
            Cas = Range("A" & I)
            For J = I + 1 To nbLignes   'ici on conserve la dernière
                If Range("A" & J) = Cas Then
                    LigneDest = LigneDest + 1
                    Sheets("Feuil2").Range("A" & LigneDest) = Cas
                    Sheets("Feuil2").Range("B" & LigneDest) = Range("B" & I) & " " & Range("B" & J)
                Else
                    Exit For
                End If
            Next
        Next

  3. #3
    Membre averti
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Mai 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Mai 2014
    Messages : 41
    Par défaut Déja résolu
    Un grand MERCI à "parmi " qui à résolu mon problème en une trentaine de lignes..... j'en reste sur le ...
    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    J'ai besoin d'une variante. En gros j'ai besoin aussi d'avoir les doublon. Dans mon exemple XL dans la cas 1, j'ai le duo Rouge Vert (suite a votre programme) mais maintenant je souhaite aussi avoir le duo Vert Rouge. Pour faire plus simple par CAS avoir l'ensemble des combinaison possible. Est ce possible?
    Merci d'avance.
    Essaie comme ceci pour voir...

    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
    Sub Commencer()
        Dim I As Long, J As Long, nbLignes As Long, LigneDest As Long
        Dim Cas As String
     
        'Tri des données par CAS et Ordre
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A" & nbLignes) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C2:C" & nbLignes) _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").Sort
            .SetRange Range("A1:C" & nbLignes)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        'Copie dans la feuille Feuil2
        LigneDest = 1
        For I = 2 To nbLignes
            Cas = Range("A" & I)
            For J = 2 To nbLignes
                If Range("A" & J) = Cas And I <> J Then
                    LigneDest = LigneDest + 1
                    Sheets("Feuil2").Range("A" & LigneDest) = Cas
                    Sheets("Feuil2").Range("B" & LigneDest) = Range("B" & I) & " " & Range("B" & J)
                End If
            Next
        Next
     
    End Sub

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

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. Réponses: 0
    Dernier message: 27/02/2013, 13h01
  3. Integrer un tableau de donnée au code VBA
    Par awa123 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/12/2012, 22h15
  4. [VBA Excel] Tableau avec données du userform et de formules
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2006, 13h29
  5. [VBA-E] Tableau de données <=> Fichier Texte
    Par P50 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2005, 16h02

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