VBA / Copie insertion de ligne sous condition

Résolu
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009 - 2 déc. 2008 à 17:32
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009 - 2 déc. 2008 à 22:53
Bonjour a tous,

J'ai un fichier excel avec 2 onglets,
-pour toute valeur = VALEUR dans la colonne C de la feuille 1, je souhaite inserer une ligne determine au dessus de cette valeur qu'Excel  irait chercher dans la feuille 2. J'ai tente ca sans succes :

Sub test()

Dim MyCell As Range

For Each MyCell In Range("C1:C100")
If MyCell = "VALEUR" Then sheets("sheet2").rows("2:2").Insert Shift:=xlDown

Next MyCell

End Sub

Je pense ne pas etre trop loin mais la je seche.

Merci d'avance a ceux qui pourront m'aider

4 réponses

whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
2 déc. 2008 à 21:27
Oldevi,

Cadeau.... désolé pour les vrai progrommeur qui s'arracheront les cheveux en voyant ce style de progroammation de noob bouseux  mais j'ai fait ca très rapidement et je suis loin d'être un pro

En tous cas ca a le mérite de fonctionner

Attention les valeur que tu veux insérer sont considérées comme stockées dans la colonne "C" de la feuille2 et les unes sous les autres. On viens chercher la suivante au coup d'après quand on en prends une.
A toi d'adapter si ce n'est pas le cas avec ton fichier mais tu donnes trop peu d'infos ...

Sub test()

Dim MyCell As Range, Insert As String, Incr As Boolean

'Initialise les variables
i = 1
Incr = False

For Each MyCell In Range("C1:C100")
    If Not Incr Then 'Si True saute la routine pour incrémenter mycell de +1
        If MyCell = "VALEUR" Then
            Incr = True 'Au prochain passage de For il ne faut pas faire la routine If
            Sheets("Feuil2").Activate
            Insert = Range("C" & i).Value 'Mémorise la valeur à insérer
            If Range("C" & i + 1).Value <> "" Then i = i + 1
            Sheets("Feuil1").Activate
            Rows(MyCell.Row).Insert Shift:=xlDown
            Range("C" & MyCell.Row - 1).Value = Insert 'Colle la valeur à insérer
        End If
    Else
        Incr = False 'Mycell incrémenter de +1 donc on repasse à False pour  faire la routine If
    End If
Next MyCell

End Sub

LC

Noto: je ne sais pas comment sortira mon post mais tout est en italique pour moi ne l'écrivant ... bizarre tous ca ...
3
whitelegend Messages postés 156 Date d'inscription vendredi 13 janvier 2006 Statut Membre Dernière intervention 2 mars 2009
2 déc. 2008 à 18:10
Oldevi,

J'ai testé et ca marche comme ci-dessous ;)

Sub test()

Dim MyCell As Range

For Each MyCell In Range("C1:C100")
    If MyCell = "VALEUR" Then
        Rows(MyCell.Row).Insert Shift:=xlDown
        '
        'si tu veux insérer cette ligne sur une autre feuille...
        'Sheets("Ta feuille").Rows(MyCell.Row).Insert Shift:=xlDown
        '
        Exit For
    End If
Next MyCell

End Sub

LC
0
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009
2 déc. 2008 à 19:55
Bonjour White Legend,

Merci bcp pour ta reponse, ca m'aide vraiment. Cependant, je rencontre encore quelques pbs.

En effet, je veux inserer une ligne particuliere avec des donnees (qui se trouve en feuille 2) et non une ligne vierge.

->  Sheets(sheet2).Rows("1:1")

D'autre part l'insertion ne se produit que pour la premiere occurence de "valeur". J'ai pense que le exit for pouvait en etre la cause. Mais en le supprimant la macro ajoute indefiniment des lignes au dessus de celle contenant la valeur. Je pense donc qu'il faut indiquer a excel de decaler MyCell d'une cellule vers le bas.

Voila j'espere ne pas avoir ete trop confus. Dsl pour les accents je suis sur clavier US.

Merci !! 
0
Oldevi Messages postés 10 Date d'inscription mardi 2 décembre 2008 Statut Membre Dernière intervention 28 janvier 2009
2 déc. 2008 à 22:53
Super, ca marche impec, merci bcp !
0
Rejoignez-nous