Améliorer une macro super compliquée

Résolu
Bonjour,

voilà, j'ai les deux macro suivantes :

Sub Séparer()
'
' découper Macro
' Macro enregistrée le 15/07/2008 par
'
Application.ScreenUpdating = False

Dim i As Integer, NbLigne As Integer, Contenu

Range("B2").Select 'point de départ
While ActiveCell.Value <> Empty
Contenu = Split(ActiveCell.Value, Chr(10))
NbLigne = UBound(Contenu)
If NbLigne > 0 Then
With ActiveCell
Range(.Offset(1, 0), .Offset(NbLigne, 0)).EntireRow.Insert
For i = 0 To NbLigne
.Offset(i, 0).Value = Contenu(i)
.Offset(i, -1).Value = .Offset(0, -1).Value
.Offset(i, 1).Value = .Offset(0, 1).Value
Next i
End With
End If
ActiveCell.Offset(NbLigne + 1, 0).Activate
Wend
Application.ScreenUpdating = True
End Sub

Sub Rassembler()
'
' Macro9 Macro
' Macro enregistrée le 01/10/2008 par
'

Dim lig As Long
Const col1 = 1 ' colonne A
Const col2 = 2 ' colonne B
For lig = 1 To ActiveSheet.UsedRange.Rows.Count
If Cells(lig, col1) = Cells(lig + 1, col1) Then
Cells(lig, col2) = Cells(lig, col2) & Chr(10) & Cells(lig + 1, col2)
Rows(lig + 1).Delete
If Cells(lig + 1, col1) = "" Then Exit For
lig = lig - 1
End If
Next lig
End Sub

Sub CreateTransMenu()
Dim TransMenu As CommandBarPopup

On Error Resume Next
With Application.CommandBars(1)
Set TransMenu = .Controls.Add _
(Type:=msoControlPopup, before:=.Controls.Count)
End With

TransMenu.Caption = "Johanna"

'Creation des sous-menus

With TransMenu.Controls.Add(msoControlButton)
.Caption = "Séparer"

.OnAction = "Séparer"
End With

With TransMenu.Controls.Add(msoControlButton)
.Caption = "Rassembler"

.OnAction = "Rassembler"
End With

With TransMenu.Controls.Add(msoControlButton)
.Caption = "Test 1"

.OnAction = "test1"
End With
End Sub

j'en suis suis vraiment ravie mais le "ik" (eh oui il y à toujours un "ik"... elle ne prend en compte que les 2 première colonnes et j'adorerais pouvoir lui dire bah écoute tu vois cette action? bah tu le fait sur les colonne E et F et tu copie tout ce qui est dans A, B, C, D a chaque fois que tu cré un ligne...

Vous croyez que c'est possible?

Merci d'avance

Je peux peux vous laisser un exemple d'application si nécéssaire.

Merci d'avance
Johanna

12 réponses

Résumé de la discussion

Problématique centrale : une macro Excel VBA ne traite que les deux premières colonnes et l’auteur souhaite étendre l’opération aux colonnes E et F tout en dupliquant A à D sur chaque nouvelle ligne. Des solutions évoquées incluent une macro paramétrable pour traiter successivement B, C, puis D, ou une extension générale permettant d’appliquer la séparation et la fusion sur plusieurs colonnes. Des échanges proposent des exemples ou liens vers des fichiers à tester et discutent de l’intégration dans la barre d’outils et de la gestion des erreurs.

Bobot (l’IA à votre service)
  1. Tu pourrais serieusement faire ça?
    0
    1. Bonsoir,
      Ben oui, je suis génial ;-)
      Mais je ne pense pas pouvoir le faire cette année. Dans ton ancienne macro, visiblement, tu avais des menus, veux-tu que je les remette ?
      @+
      0
    2. tu pense toujours a tout comme ça?

      c'est super gentil mais j'ai réussi a l'integré dans un nouveau menu :)
      trop forte la fille!!!
      mdrrrr (surtout au gros coup de bol lol)

      :)
      mais merci d'y avoir pensé

      sinon c'est pas grave si tu ne peux pas le "rassembler" tout de suite le plus important c'était le "séparer" chose que tu as brillament réussi :)

      le rassembler pourrais aussi m'etre tres util mais je voudrais pas avoir l'aire d'en demander trop mdrrr
      0
  2. Je vais essayer de la faire fonctionner aujourdhui sur 2007 je te dirais...

    mais pour le moment elle est juste géniale!!!
    tu es génial!!

    Merci du fond du coeur!!!
    tu ne te rend pas compte tu service que tu me rend, vraiment ça fait des années que je le fait à la mano tu va me faire gagner un temps considérable!!!
    Je t'aurais invité à boire un verre si je te connaissais ou si je n'avais pas autant peur des rencontre internet mdrrrr

    Merci Gord21
    0
    1. Bonjour,
      Génial ? Il faudra que je pense à le dire à mon chef au moment des augmentations ;-)
      Sinon, je n'ai pas terminé le code, il y a juste la fonction séparer : je peux faire une adaptation du code pour la fonction rassembler. Ca t'intéresse ?
      0
    2. ca marche tiptop sur 2007!!
      merci encore c'est vraiment super

      je vais essayer de l'intégrer à mon menu complémentaire et ca sera le top :)
      rien de cela n'aurait été possible sans ton aide merci Gord21!!

      Si jamais un jour tu as du temps a tuer en bravant de nouveau les code vba pour adapter le rassembler je suis prenneuse :)
      Mais c vraiment que si tu as du temps a tuer sinon c pas grave tu ma rendu vraiment un sacré service la!!!!
      merci bcp bcp
      c génial :)
      0
    3. Bonsoir,
      Oui, je pourrais trouver du temps a tuer. Peut-être demain
      @+
      0
    4. Merci :)
      mais ce n'est pas préssé et c'est vraiment que si tu as le temps.
      0
    5. par contre j'ai essayer de l'intégrer à mon sous menu mais ca ne marche pas
      "impossible d'exécuter la macri 'onglet.xla!séparer'. il est possible qu'elle ne soit pas disponible dans ce classeur.

      :/
      0
  3. Bonjour,

    Merci de prendre le temps de t'occuper de mon problème c'est vraiment très gentil :)

    Le curseur ne me donne pas de message d'erreur mais ne fait pas les modif en colonne C

    le curceur est en fin de course dans la célule B1138 de la feuille "données qui posent problème"
    0
    1. Bonsoir,
      Et avec ce code ?
      Tu cliques sur le bouton dans la feuil4
      https://www.cjoint.com/?ALgsx5eqXFu

      Au fait, tu utilises quelle version de Excel ?
      @+
      0
    2. Si tu était a coté de moi je crois que je t'aurais sauté au coup lol

      bon restons calme lol
      pour le moment je l'ai juste fait pour le fichier de ci-joint
      je vais essayer sur d'autre fichiers
      mais avant j'ai été tellement contente de voir que ca marchais au moins sur celui ci que je voulais te remercier :)

      donc merci merci merci bcp !!!!!! :P

      (je suis sous 2007)
      0
    3. De rien. Si tu as des questions, n'hésite pas. Je ne l'ai testé que sur 2003 donc il y a peut-être des adaptations à faire.
      @+
      0
  4. euh... depuis il y a eu les vacances... et puis la rentrée avec son lot de retard et puis d'autres déplacement avec leur lot de taf en plus...
    et avec tout ça j'avais carrement oublié que je m'étais enfin décider a demande de l'aide concernant ce sujet...

    dans le genre franchement à la masse je postule pour la médaille d'or...
    Gord21?? Serais tu encore là? et surtout serais tu ok pour te souvenir de moi et des mes soucis de macro???

    :(
    je suis désolée....
    -1
    1. Bonsoir,
      Pas de problème, peux-tu répondre à ma question (#18)
      @+
      0
  5. Bonjour,

    Je suis désolé de t'embéter avec mes questions à 2 balles...
    en tout car merci beaucoup pour ta patiente...

    oui, j'ai le meme message d'erreur :
    Erreur de compilation
    Membre de méthode ou de données introuvable
    0
    1. Bonjour,
      D'accord, et avec ce fichier, lorsque tu l'ouvres, est-ce qu'il se passe quelque chose ?
      http://www.cijoint.fr/cjlink.php?file=cj201107/cij2bWk2YZ.xls

      @+
      0
    2. bonjour,
      avec ce fichier jai le meme message qui s'affiche...
      0
    3. Bonjour,
      Voici une autre version. Si tu as toujours le message d'erreur, peux-tu me dire à quel niveau se met le curseur lorsque tu choisis débogage ?
      http://www.cijoint.fr/cjlink.php?file=cj201107/cijPgnX9U0.xls

      @+
      0
  6. oups... je viens de comprendre la question posée dans le cadre... oups...

    et bien comme tu veux ou peux...

    Question posée : on sépare B puis C puis ... ou une fonction sépare B une seconde sépare C, ...

    réponse : c'est toi qui voit lol
    les 2 me vont l'essentiel c'est qu'a la fin tout soit séparée lol

    :D
    0
    1. Bonsoir,
      D'après ce que je comprends dans tes messages, tu n'as pas essayé ma macro : tu te mets dans l'onglet données qui posent problème et tu lances la macro séparer.

      @+
      0
    2. euh... je crois bien que si... j'ai fait "complément", "johanna", "séparer"...
      a moins qu'elle se trouve ailleurs?

      il me dit : "erreur de complitaion" "membre de méthode ou données introuvable" et surligne "UF1_première_cecclule.Value)"
      0
    3. en relisant ta question, je pensque que ce qui serait le plus utilie ici serait une meme macro qui sépare B, puis C, puis D, etc...
      enfin c'est toi qui voit, si pour toi l'autre solution est plus facile moi ca me va aussi :)
      0
    4. mais ta macro as t elle remplacer la mienne?
      car ma macro est carrement dans le menu de la barre de tache excel...

      c'est peut etre pour ca que je ne la met pas en route...
      0
    5. Bonsoir,
      Pour tester, tu ouvres juste mon fichier, puis Outils/Macros/Macro... et tu lances la macro Separer.
      As-tu un message d'erreur ?
      @+
      0
  7. bonjour,
    je suis désolé de ne répondre que maintenant, j'étais en déplacement et en revenant j'avais pas mal de retard...

    je viens tout juste de pouvoir me mettre sur ce dossier...

    dans tous les cas merci pour ce que tu as fait sur ce fichier c'est génial et oui il y avait un erreur que je ne savais pas réparer donc j'effacais tout les lignes avec "NA"...

    Par contre dans le fichier joint, il y a un truc que j'ai pas bien compris...
    dans la feuille "données qui pose pb" les colone A et B sont bien unie données mais la colonne C elle est pas divisée.

    est ce possible de lui demander de diviser toutes les colonne a chaque retour à la ligne?
    0
    1. WAAHOOO!!! serais-tu un géni??? :)

      je ne t'en demande pas tant mais c vraiment tres gentil comme proposition
      Je ne prend pas toujours les données au meme endroit donc ca va etre difficle de tout mettre dans une macro lol

      mais si déja tu peux faire comme tu dis c'est a dire une macro qui me demande ou je veux travailler c déjà fantastique :) :) vraiment fantastique :)

      par contre si elle me demande sur quelle colonne je veux qu'elle bosse faut quand meme qu'elle copie tout ce qui a dans les colonne précédente a chaque fois qu'elle crée une ligne :)
      0
      1. Bonsoir,
        Non, au risque de te décevoir, je n'ai rien d'un géni :-)
        Voici un premier exemple pour que tu me donnes ton avis. Je n'ai traité que la fonction séparer. Si ça te convient, je fait la fonction rassembler dans la foulée.
        http://www.cijoint.fr/cjlink.php?file=cj201106/cij1vWPoaC.xls

        NB : avec ton ancienne macro, il y avait un problème au niveau de la gestion des erreurs. Si par exemple, en B100 tu avais #N/A, elle ne traitait pas les lignes suivantes.

        @+
        0
    2. bonjour

      oh oui, j'ai toujours besoin de l'amélioré lol
      je l'ai depuis bientot 3ans et a chaque fois que je m'en sert 2 à 3 fois par mois je me prend la tete lol

      en fait dans les 2 cas j'aimerais une macro qui opère sur la colonne B puis une autre sur la colonne C et une autre sur la D et ainsi de suite
      Ou bien une macro qui me demande sur quelle colonne je veux faire l'opération...

      En fait pour t'expliquer le déroulé de la manip :
      1 - je mets des codes articles dans la colonne A
      2 - Avec une formule rechercheV je vais chercher la composition de chaque article et l'indique dans la colonne B (c'est pour cette raison que j'ai plusieurs info dans la meme cellule) (je me suis en temps servi de la macro rassemblé pour avoir plusieurs infos dans une cellule).
      3 - je découpe les cellule de la colonne B avec la macro afin d'obtenir une info par cellule
      4 - avec la formule recherchV je reitère l'opération en mettant dans la colonne C les composition des sous article trouvé en colonne B précédemment
      5 - je me débrouille pour couper la colonne C et je recommance

      au final je fait ça pour les colonnes B, C, D, E, F, G, H et peut etre I

      Par contre en y refelchissant je ne pense pas pour le moment avoir besoin de modifier la macro "rassembler"...
      Donc si c trop compliquer pas la peine de se rendre la tete de ce coté là...

      Je te rappelerais au secour à ce moment là :)

      Merci d'avance
      Johanna
      0
      1. Bonsoir,
        Je vais commencer par une macro qui te demande sur quelle colone tu veux travailler mais en lisant le détail de ta manip, je pense qu'il est possible d'intégrer la fonction RECHERCHEV dans la macro.
        Si tu veux que je regarde dans cette direction, je pense qu'il serait plus facile de mettre un exemple de fichier avec les données brutes sur quelques lignes

        @+
        0
    3. bonjour,

      pour que ce soit plus claire, voici un fichier qui traite du problème en question :)

      http://www.cijoint.fr/cjlink.php?file=cj201105/cij9atnEfr.xlsx

      merci d'avance
      0
      1. Bonjour Qhes,
        Désolé, j'ai un peu tardé à traiter ton post, as-tu toujours besoin d'améliorer ta macro ?

        J'ai compris ce que tu souhaites faire mais j'ai besoin d'informations complémentaires :
        - Pour la fonction séparer, souhaites-tu séparer la colonne B puis la colonne C, puis D ... jusqu'à ce que les cellules soient vides avec la même macro ou veux-tu une macro qui sépare la colonne B et une autre qui sépare la colonne C (ce serait la même fonction paramétrable)
        - Même question pour la fonction rassembler

        @+
        0
    4. Bonsoir,
      Je pense que c'est possible...mais je n'ai pas bien compris ce que tu souhaites faire.
      Pourrais-tu donner un exemple de ce que tu as et du résultat que tu souhaites ?

      @+
      0