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 :

Transformer la forme d'un tableur [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur en conception et projet
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en conception et projet

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut Transformer la forme d'un tableur
    Bonjour à vous,

    Pour simplifier la gestion de mes docs eXcel, j'aimerais faire une petite macro pour cette transformation (valable pour 50 000 lignes, quelque soit le nombre de produits rattachés à une pièce) :

    Tableau avant macro :

    Aj B Ci
    01764565 Pièce 1 Produit 1
    01765085 Pièce 2 Produit 2
    Produit 3
    01765266 Pièce 3 Produit 4
    Produit 5
    Produit 6


    Tableau après macro :

    Aj B Ci
    01764565 Pièce 1 Produit 1
    01765085 Pièce 2 Produit 2 Produit 3
    01765266 Pièce 3 Produit 4 Produit 5 Produit 6


    Si besoin j'ai détaillé en 'naturel perso' la façon dont je pensais procéder, mais n'étant pas informaticien, je pense que cela peut être imparfait...

    Motif global : (Somme pour j=1àN(somme pour i=1àn(Ci=Aj)) ; k défini après

    étape A Prendre les données de la ligne i+k à supprimer
    étape B Déplacer les données dans la ligne i à conserver (i=j)
    étape C Supprimer la ligne i+k

    étape A Sélectionner C(i+k)
    Sélectionner tout le contenu
    Copier le texte CTRL+C
    étape B Sélectionner Ci
    Cliquer gauche derrière le dernier caractère
    Cliquer sur la barre espace
    Coller CTRL V
    Cliquer sur Entrée
    étape C Sélectionner ligne l(i+k)
    Supprimer l(i+k)

    Condition d'application vis-à-vis de Aj
    Règle 1 Ci réfère à Aj pour i=j
    Règle 2 C(i+k) réfère Aj pour A(j+k)=0

    Merci en tout cas pour votre aide, j'espère que vous pourrez rapidement me répondre, je gagnerai beaucoup de temps dans mon travail

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Tu pourrais passer par une variable tableau, sur laquelle tu bouclerais en vérifiant les valeurs vides afin de remonter le nom du produit par concaténation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    VA = Range("A2:C50000").Value
       For i= 1 to Ubound(VA)
          If VA(i,1) > "" Then
              L = i
          Else
               VA(L,3) = VA(L,3) & " - " & VA(i,3)
               VA(i,3) = ""
          End If
       Next
       Cells(2, 1).Resize(Ubound(VA), 3).Value = VA
    Après utiliser l'enregistreur de macro pour supprimer les lignes vides pouvant se faire manuellement
    PS : fais de mon phone, donc j'ai pas vérifié et à tester (faire la déclaration des variables cf. Faq)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur en conception et projet
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en conception et projet

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Bonjour,

    Tu pourrais passer par une variable tableau, sur laquelle tu bouclerais en vérifiant les valeurs vides afin de remonter le nom du produit par concaténation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    VA = Range("A2:C50000").Value
       For i= 1 to Ubound(VA)
          If VA(i,1) > "" Then
              L = i
          Else
               VA(L,3) = VA(L,3) & " - " & VA(i,3)
               VA(i,3) = ""
          End If
       Next
       Cells(2, 1).Resize(Ubound(VA), 3).Value = VA
    Après utiliser l'enregistreur de macro pour supprimer les lignes vides pouvant se faire manuellement
    PS : fais de mon phone, donc j'ai pas vérifié et à tester (faire la déclaration des variables cf. Faq)

    Bonjour et merci pour votre retour rapide,

    Seulement étant néophyte j'ai sûrement du oublier qqch, message d'erreur d'argument non facultatif...
    Voilà ce que j'ai fait :
    J'ai créé ce module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub transformer_tableur(VA)
    Dim VA As Range
    Dim L As Long
    VA = Range("A2:C50000").Value
       For i = 1 To UBound(VA)
          If VA(i, 1) > "" Then
              L = i
          Else
               VA(L, 3) = VA(L, 3) & " - " & VA(i, 3)
               VA(i, 3) = ""
          End If
       Next
       Cells(2, 1).Resize(UBound(VA), 3).Value = VA
    End Sub
    Puis j'ai exécuté la macro dans mon eXcel.
    Je vous remercie encore pour votre aide

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Déclaration des variables :
    VA est un variant ici et non une Range

    Edit : il manquait aussi la déclaration de i :
    dans ton code
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur en conception et projet
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en conception et projet

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Déclaration des variables :
    VA est un variant ici et non une Range
    Même message en corrigeant les déclarations de variables... Est-ce qu'il faut redéfinir le UBound ? Je ne vois pas ou se trouve mon erreur.

    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 transformer_tableur(VA)
    Dim VA As Variant
    Dim L As Long
    Dim i As Long
    VA = Range("A2:C50000").Value
       For i = 1 To UBound(VA)
          If VA(i, 1) > "" Then
              L = i
          Else
               VA(L, 3) = VA(L, 3) & " - " & VA(i, 3)
               VA(i, 3) = ""
          End If
       Next
       Cells(2, 1).Resize(UBound(VA), 3).Value = VA
    End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Attention : bien connaitre les limites d'Excel : https://support.office.com/fr-fr/art...7-269d656771c3
    concernant la limitation dans une cellule
    sur l'exemple donné pas de souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim VA, i&, L&
        DL = Cells(Rows.Count, 3).End(xlUp).Row
        VA = Range("A2:C" & DL).Value
        For i = 1 To UBound(VA)
            If VA(i, 1) > "" Then
                L = i
            Else
                VA(L, 3) = VA(L, 3) & " - " & VA(i, 3)
                VA(i, 3) = ""
            End If
        Next
        Cells(2, 1).Resize(UBound(VA), 3).Value = VA
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Transformer Windows form en WPF ?
    Par juliensmarties dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 02/04/2010, 18h47
  2. Transformer un Form en XML
    Par mahdidadi1 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/11/2009, 00h31
  3. Transformer un Form en XML
    Par clavelski dans le forum Services Web
    Réponses: 0
    Dernier message: 24/02/2009, 13h41
  4. Transformer une Form principale en page web
    Par sondo dans le forum Composants VCL
    Réponses: 6
    Dernier message: 12/09/2008, 11h27
  5. mise en forme d'un tableur Excel
    Par bossLINDROS dans le forum VBA Access
    Réponses: 6
    Dernier message: 09/04/2008, 09h07

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