[Macro] Supprimer des mots dans une sélection

Résolu
Altays Messages postés 9 Statut Membre -  
Altays Messages postés 9 Statut Membre -
Bonjour,

Je suis en train de m'arracher les cheveux sur une macro Excel, et j'en viens à demander votre aide.

J'ai une énorme liste de produits et je souhaite supprimer dans les cellules sélectionnées le texte figurant dans une cellule précise.
Par exemple :


J'aimerais sélectionner manuellement la plage A5 : A8 et ensuite utiliser une macro qui supprime dans la sélection les valeurs présente dans A4 et de rajouter dans la collonne B une commentaire, afin d'obtenir quelque chose comme ça :


Et ainsi de suite, sachant que la cellule de référence sera toujours celle juste en-dessus de la plage sélectionnée.

Merci d'avance,

Altays

Edit : Voici le lien vers l'exemple :
https://www.cjoint.com/c/FHEiUc4nrZU

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

    Pour faciliter notre travail merci de mettre un extrait de ton classeur
    pour cela
    Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
    et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

    Dans l’attente

    0
    1. Altays Messages postés 9 Statut Membre
       
      https://www.cjoint.com/c/FHEiUc4nrZU

      J'espère que ça marche.
      0
      1. Utilisateur anonyme > Altays Messages postés 9 Statut Membre
         
         
        Bonjour Altays,

        J'ai fait ton exercice uniquement par rapport à ton 1er message ; je n'ai pas
        téléchargé tes 2 fichiers car j'ai trouvé que ton énoncé initial est très clair.

        Je te propose ce fichier Excel 2007 : c'est une solution qui fait ce que tu veux
        sans avoir à faire de sélection préalable. Ouvre le fichier et fais juste Ctrl e.

        Dis-moi ce que tu en penses, et si ça te convient ; mais si tu veux absolument
        faire une sélection préalable, ma solution n'ira pas. Tu verras que ça parcourt
        les lignes de la dernière ligne du tableau à la ligne n° 3 (ordre impératif !).

        Si ton problème est réglé, merci d'aller en haut de page, juste sous le titre
        de ton 1er message, pour cliquer sur « Marquer comme résolu ».

        Cordialement.  😊
         
        0
      2. Altays Messages postés 9 Statut Membre > Utilisateur anonyme
         
        Je te remercie beaucoup mais j'ai un soucis.
        Je n'arrive pas à ouvrir le lien que tu as mis, je tombe sur un message d'erreur "Not found".
        Pour la sélection manuelle, je pars du principe que c'est impératif, car il y a quelques "subtilités". Certaines lignes correspondent aux critères indiqués mais il ne faut pas que la macro les prennent en compte.
        0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    merci pour ton classeur qui m'a aidé les "subtilités" sans précisions m'inquiètent :-)
    si tu le désires on pourrait vérifier une sélection valable de cellules

    ci dessous code écrit rapidement valable jusqu'à 255 lignes à modifier
    Option Explicit
    '---------------------------------------------
    Sub supprimer_mots()
    Dim plage As Range, cptr As Byte, T_in, T_out
    'choix de la plage à modifier
    Set plage = Application.InputBox(prompt:="sélectionnez la plage à modifier", Type:=8)
    'mémorisation des données dans la plage sélectionnée
    T_in = plage
    ReDim T_out(1 To UBound(T_in), 1 To 2)
    'modification de la plage mémorisée
    For cptr = 1 To UBound(T_in)
    T_out(cptr, 1) = Split(T_in(cptr, 1))(2) & " " & Split(plage(cptr, 1))(3)
    T_out(cptr, 2) = "sous-catégorie"
    Next
    'restitution
    plage.Resize(UBound(T_in), 2) = T_out
    Set plage = Nothing
    End Sub

    0
    1. Altays Messages postés 9 Statut Membre
       
      Merci, mais ça marche qu'à moitié. Dans quelques cas, le code fonctionne parfaitement bien, mais dans d'autres il me supprime des mots qu'il ne devrait pas (car pas présent dans la cellule supérieure) ou n'en supprime pas.

      http://www.cjoint.com/c/FHFiEQ0oDqU

      (J'ai oublié de mettre "sous-catégorie" dans la colonne Commentaires du second tableau pour les produits concernés. Et j'ai déjà la macro pour changer le fond.)

      Voici un exemple concret de ma liste avec ce que je désire obtenir.
      Les "subtilités" dont je parle, c'est par exemple le "Chewing-gum, toutes sortes sans sucre" juste après les autres chewing-gum, des produits différents mais avec un nom très proche. J'ai peur qu'avec une automatisation complète de la macro, elle ne fasse pas la distinction, c'est pour cette raison que je souhaite sélectionner manuellement la plage de données à modifier.
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > Altays Messages postés 9 Statut Membre
         
        Désolé, mais je me suis basé sur ton exemple; ton dernier envoi ne lui correspond pas...
        quand je disais que tes "subtilités" m'inquiétait...

        dans tous les forums d'entraide, il est vital de donner un reflet exact de la réalité en mettant de noms bidons si besoin de confidentialité...
        0
      2. Altays Messages postés 9 Statut Membre > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Je m'excuse mille fois. C'est la première fois que j'utilise un forum d'aide et je pensais que mon exemple était suffisamment précis...
        0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    OK, comme c'est nouveau pour toi...

    lorsque tu réalises ce genre de tableau, il est indispensable de garder la structure de tes désignations
    dans "Chewing-gum sans sucre" la séparation se fait par virgule
    dans "Fruchtpastillen" , les lignes 13 et 14 n'ont pas de virgule...

    Dans mon code ci dessous , Vba séparant les différents mots suivant les virgules, il note aucune séparation dans ces 2 lignes et ne fait rien (ou plante)

    je sais, c'est pointilleux et casse-pied!

    Option Explicit
    '---------------------------------------------
    Sub selectionner_mots()
    Dim plage As Range, cptr As Byte, T_in, T_out
    'choix de la plage à modifier
    Set plage = Application.InputBox(prompt:="Avec la souris, sélectionnez la plage à modifier", Type:=8)
    'mémorisation des données dans la plage sélectionnée
    T_in = plage
    ReDim T_out(1 To UBound(T_in), 1 To 2)
    'modification de la plage mémorisée
    For cptr = 1 To UBound(T_in)
    T_out(cptr, 1) = Split(T_in(cptr, 1), ",")(1)
    T_out(cptr, 2) = "sous-catégorie"
    Next
    'restitution
    plage.Resize(UBound(T_in), 2) = T_out
    Set plage = Nothing
    End Sub


    En espèrant que... ;-)

    0
    1. Altays Messages postés 9 Statut Membre
       
      Arf, je me suis réjouit trop vite. Elle fonctionnait sur les premières lignes que j'ai essayé, mais maintenant je rencontre des problèmes.
      Si j'ai bien compris le code, la macro sépare les mots en fonction des virgules et non pas de la cellule référence. Ce n'est pas possible de lui faire effacer dans les cellules sélectionnées uniquement les termes présents dans la cellule du dessus?
      0
    2. Altays Messages postés 9 Statut Membre
       
      Voila, avec une bonne dose d'huile de coude, j'ai réussi à faire ce que je désirais.
      Bon un pro en macro me crucifierait sur place car c'est du vrai bricolage, mais ça fonctionne.

      En tout cas, merci pour votre aide.
      0