Macro excel et ajout / suppression de ligne

Bonjour,

Je suis novice sous VB et n'arrive pas a mettre cette macro en place. Voici mon problème :

J'ai un tableau avec 4 colonnes :

- N° Serie
- Recette
- Qualification
- Production

Du type :
Num Serie       Recette         Qualif              Production
E1234X           XX               01/02/2008	     08/02/2008
E4568Z	         06/02/2008       XX	             21/02/2008
E1234P	         XX	          XX	             23/02/2008
E7852S	         XX	          06/02/2008	     XX
E6547M	         01/02/2008       08/02/2008	     23/02/2008


La macro que je souhaite mettre en place est la suivante :

- J'aimerais avoir plus qu'une seul date par ligne, sans perdre aucune données.

Je pensais donc faire une macro pour copier les lignes qui ont plusieurs dates (ex : E1234X) et remplacer une des dates par des "XX".

Le résultat souhaité est celui d'en dessous :

Num Serie	Recette	       Qualif	          Production
E1234X	         XX	          01/02/2008	        XX
E1234X	         XX	          XX	             08/02/2008
E4568Z	         06/02/2008       XX	                XX
E4568Z	         XX	          XX	             21/02/2008
E1234P	         XX	          XX	             23/02/2008
E7852S	         XX	          06/02/2008	        XX
E6547M	         01/02/2008       XX	                XX
E6547M	         XX	          08/02/2008	        XX
E6547M	         XX	          XX	             23/02/2008


Merci d'avance pour votre aide, car je ne sais plus comment faire !

Je ne sais pas si je suis très clair, si vous avez besoin de plus de renseignements, je vous en donnerai volontiers.

Olivier
Configuration: Windows XP
Firefox 2.0.0.12

3 réponses

  1. Contributeur
    bonjour

    J'aimerais avoir plus qu'une seul date par ligne, sans perdre aucune données... et remplacer une des dates par des "XX".

    Avec cette petite macro tu devrais faire ce que tu veux
    Public Sub une_date()
    Dim l As Long
    Dim c As Integer
    Dim d As Integer
    For l = Cells(65536, 1).End(xlUp).Row To 2 Step -1
        For c = 4 To 2 Step -1
            For d = 2 To c - 1
                If IsDate(Cells(l, c).Value) _
                    And IsDate(Cells(l, d).Value) Then
                        Cells(l + 1, c).EntireRow.Insert
                        Cells(l + 1, 1).Value = Cells(l, 1).Value
                        Cells(l + 1, 2).Resize(1, 3).Value = "XX"
                        Cells(l + 1, c).Value = Cells(l, c).Value
                        Cells(l, c).Value = "XX"
                End If
            Next d
        Next c
    Next l
    End Sub
    
    0
    1. Bonjour,

      Merci c'est exactement ce que je souhaite ...

      Est-ce que tu peux me donner des details sur la macro pour la comprendre stp ?

      Ciao

      Olivier
      0
      1. Contributeur
        bonjour

        on part de la fin du fichier puisque tu vas rajouter des lignes
        For l = Cells(65536, 1).End(xlUp).Row To 2 Step -1
        on part de la fin de la ligne en cours
        For c = 4 To 2 Step -1
        on regardes s'il y a une autre date
        For d = 2 To c - 1
        If IsDate(Cells(l, c).Value) _
        And IsDate(Cells(l, d).Value) Then

        2 dates trouvées sur la ligne, on insère une ligne devant la suivante (+1)
        Cells(l + 1, c).EntireRow.Insert
        on récupère la colonne A et on initialise les autres à "XX"
        Cells(l + 1, 1).Value = Cells(l, 1).Value
        Cells(l + 1, 2).Resize(1, 3).Value = "XX"

        On descend la date de droite et on la remplace par "XX"
        Cells(l + 1, c).Value = Cells(l, c).Value
        Cells(l, c).Value = "XX"

        on boucle sur la recherche dates
        Next d
        on boucle sur la colonne suivante
        Next c
        on boucle sur la ligne suivante
        Next l

        Est-ce suffisamment clair ou bien as-tu des questions à poser ?
        0
        1. Salut,

          Non c'est assez clair ainsi ... merci encore.

          Ciao
          0