Macro dupliquant une ligne si une cellule contient tel caractère

Résolu
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -  
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je reviens vers vous pour un problème dont je ne maitrise pas du tout la résolution !

Il s'agit de créer un script VBA qui effectuerait l'action suivante sur la même feuille :

Partir de la ligne 2
Si en A2 figure le mot "MOT_1" ajouter au mot de B2 le suffixe "_A"
Puis copier toute la ligne et l'insérer en dessous
Et ajouter au mot de B3 de la ligne collée le suffixe "_B"
Puis rechercher ainsi de suite tous les mots "MOT_1" dans les lignes suivantes de la colonne A et répéter l'opération...

Pour les suffixes, je ne sais pas ce qui est le plus logique, ou simple
Copier la ligne avant de la dupliquer puis renommer B2
Ou remplacer le "_A" de B3 par "_B" ?

Merci
Lo.

17 réponses

Résumé de la discussion

Il s’agit de créer un script VBA qui, à partir de la ligne 2, détecte MOT_1 en colonne A, ajoute le suffixe _A à B2, puis copie et insère la ligne suivante. Des propositions portent sur la détection de la dernière ligne non vide et l’utilisation de Find, ou sur copier la ligne puis modifier les suffixes par ordre (A, B, etc.). Des ajustements techniques ont été discutés, comme exclure certaines colonnes lors de la copie, employer PasteSpecial pour les valeurs et ajuster Der_Ligne ou l’offset lorsque la colonne est vide. D'autres propositions envisagent d’adapter le code en fonction de la structure des données, par exemple en limitant les colonnes copiées et en générant automatiquement les suffixes successifs.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir dhaze,

    Essaie cette macro

    Sub ajout()
    Dim DernLigne As Long
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    For n = DernLigne To 2 Step -1
    If Range("A" & n) = "MOT_1" Then
        Rows(n & ":" & n).Select
        Application.CutCopyMode = False
        Selection.Copy
        Selection.Insert Shift:=xlDown
        Range("B" & n).Select
        ActiveCell.FormulaR1C1 = Range("B" & n).Value & "_A"
         Range("B" & n + 1).Select
        ActiveCell.FormulaR1C1 = Range("B" & n + 1).Value & "_B"
        End If
        Next
    End Sub


    Cdlmnt

    "L'imagination est plus importante que le savoir." A. Einstein
    0
    1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
       
      J'étais absente la semaine dernière, mais quelle bonne surprise pour mon retour, cela fonctionne parfaitement. Je te remercie. Je vais gagner un temps fou !

      Je sais pas si c'est abuser (pour ma culture générale), pourrais-je savoir en langage courant ce que fait chaque ligne ?

      Tu n'es pas obligé d'accepter ;-)

      Merci encore
      0