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
A voir également:

3 réponses

gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
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
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
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
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
corse_94
 
Salut,

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

Ciao
0