Macro excel et ajout / suppression de ligne

Corse_94 -  
 corse_94 -
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. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. corse_94
     
    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
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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. corse_94
       
      Salut,

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

      Ciao
      0