Insertion de ligne quand détection d'une phrase

Erakmur -  
 Erakmur -
Bonjour,

Je souhaitrai avoir une macro excel qui m'insère 20 lignes quand il détecte le terme "Consigne de sécurité et Environnement:" dans une cellule.

Quelqu'un peut-il m'aider ?

Cordialement

3 réponses

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

    Option Explicit
    Const Col As Byte = 1 'colonne de travail
    Const Cle As String = "Consigne de sécurité et Environnement:"

    Sub insere_lignes()
    Dim Derlig As Integer, Lig As Integer

    Application.ScreenUpdating = False
    Derlig = Columns(1).Find("*", , , , , xlPrevious).Row
    For Lig = Derlig To 1 Step -1
    If Cells(Lig, Col) Like "*" & Cle & "*" Then
    Rows(Lig + 1 & ":" & Lig + 20).Insert
    End If
    Next
    End Sub

    sans précision de ta part, j'ai considéré que "Consigne de sécurité et Environnement:" pouvait être inclus dans d'autres mots
    sinon, remplace
    Cells(Lig, Col) Like "*" & Cle & "*"
    par
    Cells(Lig,Col)=Cle

    0
  2. Erakmur
     
    Bonjour Michel,

    http://cjoint.com/?CLxmT7comDD

    Voici le fichier. Je n'ai pas réussi à faire fonctionner la macro. Cela se passe en colonne O. Je souhaiterai que 20 lignes soient insérées quand la phrase est détectée.

    Cordialement
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      La macro a été essayée avec succès avant de l'envoyer...

      Pour la colonne O , O est la quinzième lettre de l'alphabet, donc...
      0
    2. Erakmur
       
      J'ai appliqué ta macro mais rien ne se passe. Mes lignes ne sont pas insérées. Je parle bien de ligne insérées et pas de cellules insérées. Pour le problème de la colonne O, tu veux dire que je dois rentrer le nombre de la colonne et pas la lettre ?
      0
    3. Erakmur
       
      http://cjoint.com/?CLxoG5NTUZl

      Voilà le résultat que je souhaites obtenir. J'ai fais les 3 premiers Consigne de sécurité et Environnement: pour explication
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      hé oui colonne "O" <===> colonne 15

      D'autre part, il faut enregistrer ton classeur en classeur supportant les macros (.xlsm)
      le déclenchement de la macro peut se faire par un bouton

      Comme tu n'avais pas précisé le nombre de lignes >2000 :-(
      j"ai utilisé une méthode plus rapide en bouclant que sur les cellules comportant le texte recherché dans la colonne
      Mais je n'ai rien pigé à tes couleurs grises ou jaune: non précisé également, soit au total 3 imprécisions dans ta demande


      Option Explicit
      Const Col As String * 1 = "O" 'colonne de travail
      Const Cle As String = "Consigne de sécurité et Environnement:"

      Sub insere_lignes()
      Dim Nbre As Integer, Lig As Integer

      'fige le défilement de l'écran
      Application.ScreenUpdating = False
      ' nombre de "cle" dans la colonne
      Nbre = Application.CountIf(Columns(Col), Cle) ' nombre de "cle" dans la colonne
      For Lig = 1 To Nbre
      'recherche de la prochaine ligne contenant la clé
      Lig = Columns("O").Find(Cle, Cells(Lig, Col), xlValues).Row
      'insertion de 20 lignes
      Rows(Lig + 1 & ":" & Lig + 20).Insert
      Next
      End Sub

      A l'avenir Merci d'^tre précis dans tes demandes :o)
      0
    5. Erakmur
       
      Bonjour,

      Le code couleur c'est juste pour moi. Tu peux mettre tous en blanc si cela t'arrange. Ta macro fonctionne partiellement, elle s'arrête à la ligne 306. De plus, le décalage des lignes se fait dans le mauvais sens. je souhaitrai un décalage vers le Haut et pas vers le bas. Désolé pour les imprésisions.

      Peux tu m'aider ?

      Cordialement
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour à tous,

    excusez cette intrusion, mais la curiosité me pique... ;-)

    Salut michel
    dans :
    Const Col As String * 1 = "O" 'colonne de travail
    pourquoi le * 1 ?
    Je ne connais pas son rôle.
    Merci et bonnes fêtes de fin d'années à tous.

    eric

    PS: ne zappe pas le message précédent
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Salut Eriic

      le *1 définit un string de longueur fixe ici 1
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Ah, ok.
      Tu es économes toi ;-) Sans doute des restes du temps ou la mémoire était rare et où il fallait optimiser à fond. J'aimais bien :-)
      Merci, A+

      eric
      0