Creation et copie de lignes

naiik - 9 avril 2013 à 13:55
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 avril 2013 à 15:05
Bonjour,

J'ai fais un code permettant de creer des lignes selon les criteres d'une autre feuilles du meme classeur.

le probleme etant que les lignes créer sur cette nouvelle feuille dispose de ligne vide :


j'aimerais que les differentes lignes sois copié comme ceci :

Utiliser ce code pour plus de comprehension :
Sub way3()
    Dim Sh As Worksheet, x As Long 'Declaration des variables "Sh" de type Feuille et "x" de type long
    
    Application.ScreenUpdating = False 'Permet d'eviter le scintillement des lignes et ammeliorer le temps d'execution du code
    
    Set Sh = Sheets("Analyse de risques") 'Donne la valeur a la variable "Sh"
    With Sheets("Analyse de risques") 'Avec la feuille "Cartographie"
        Ligne = .Cells(.Rows.Count, 2).End(xlUp).Row 'Attribut la valeur de la cellule puis incremente dans la colonne jusqu'a fin cellule
        .[D2:D2000].ClearContents 'Efface les lignes 2 à 2000 de la colonne D
        For i = .Cells(.Rows.Count, 2).End(xlUp).Row To 2 Step -1 'au bout de 2 pas faire un pas en arriere
            If .Cells(i, 2) = "" Then .Cells(i, 2).EntireRow.Delete 'si la cellule est vide alors la supprimée
        Next i 'Valeur suivante
    End With 'Fin de la feuille "Cartographie"
    With Sheets("Menaces") 'Avec la feuille "Cartographie"
        For x = Ligne To 2 Step -1 'faire varier x depuis la valeur de Ligne jusqu'à la valeur 2 en retirant 1 à chaque fois
 
            For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row 'Pour i etant egale a 2 jusqu'a fin cellule incrementer de 1
                var2 = .Cells(i, 1)
                If .Cells(i, 1) Left(Sh.Cells(x, 2), 3) And Sh.Cells(x, 2).Offset(, 2) "" Then
                    Sh.Cells(x, 2).Offset(, 2) = .Cells(i, 2)
                ElseIf .Cells(i, 1) = Left(Sh.Cells(x, 2), 3) And Sh.Cells(x, 2).Offset(, 2) <> "" Then
                    Rows(x + 1).Insert
                    Sh.Cells(x + 1, 2).Offset(, 2) = .Cells(i, 2)
                End If
            Next i
        Next x
    End With
End Sub



Merci

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 avril 2013 à 14:33
Bonjour,
Mama mia ! ce code à lui seul "dénonce" le travail d'un apprenti.
Ces deux lignes, déjà, montre l'"esprit" :
Set Sh = Sheets("Analyse de risques") 'Donne la valeur a la variable "Sh"
    With Sheets("Analyse de risques")

Ces deux autres :
Ligne = .Cells(.Rows.Count, 2).End(xlUp).Row
.......
 For i = .Cells(.Rows.Count, 2).End(xlUp).Row To 2 Step -1 

confirment la "tendance"
Je ne dis pas que cela est faux, mais que cela montre l'"amour" des répétitions inutiles.
Il est dès lors fort probable que tout est "ainsi".
Je crois qu'il vaudra mille fois mieux que tout ce code soit écrit autrement. Que la démarche elle-même soit autre.
Tu nous as montré deux images : celle de ce que tu obtiens et celle de ce que tu voudrais obtenir.
Montre-nous maintenant celle de la feuille "Analyse de risques", s'il te plait. Et tu verras...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Les feuilles que j'ai publier sont celle de la feuilles analyse de risque
l'autres feuille est "Cartographie" :
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 avril 2013 à 15:05
Les feuilles que j'ai publier sont celle de la feuilles analyse de risque
l'autres feuille est "Cartographie" :

1) La feuille "cartographie" n'a rien à voir avec ce que tu as montré plus haut !
2)à ce que tu dis maintenant ne correspond pas à ce que tu as exposé dans ton premier message !
Pour mémoire :
avec l'image 1 :
le probleme etant que les lignes créer sur cette nouvelle feuille dispose de ligne vide

et avec l'image 2 :
j'aimerais que les differentes lignes sois copié comme ceci :

on a donc là, dans les deux images :
1) ce que tu as sur feuille "Menaces"
2) ce que tu voudrais avoir à la place, sur feuille "Menaces"
Tout, maintenant, donne à penser que tu es à ce point perdu que tu ne sais même plus ce que tu traites.
Il est fort vraisemblable, alors, que même le code montré a été écrit par un autre développeur et que ce code t'échappe complètement.
Moi, je fuis à toutes jambes, dans de telles conditions. Désolé.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous