Insertion de plusieurs lignes suivant certaines conditions

Chtitefanny

XLDnaute Junior
Bonjour à tous,

Je suis toujours sur la même macro. Oui. Mais j'aimerais l'améliorer.
Je voudrais pouvoir inserrer un nombre de ligne, que j'aurais indiqué et que les lignes d'inserrés ai un nom différent.
Je rappelle la macro et j'esplique :
Code:
Sub Nv_Demande()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
    Dim NvDde As String    

    'Désactive les lignes filtrées éventuelles
    If ActiveSheet.FilterMode Then
        ActiveSheet.ShowAllData
    End If

    'Insertion d'une nouvelle ligne puis recopie de la ligne initiale vers la nouvelle ligne
    Rows("3:3").Insert Shift:=xlDown
    Rows("4:4").Copy
    Rows("3:3").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("P3:Y3").Select
    Selection.ClearContents    

    'nommer la ligne
    NvDde = InputBox("N°", "Demande", "14")
    If NvDde = "" Then    

    'ne pas créer
    Rows("3:3").Delete
    MsgBox "Demande annulée ...", vbExclamation, "Création de la Demande": Exit Sub
    End If
    Range("A3").Value = NvDde    

    'Mise en forme par centrage vertical de la ligne
    Rows("2:2").Select
    Selection.VerticalAlignment = xlCenter
    Range("A2").Select    

    'Récupération de la mise en forme conditionnelle sur une ligne close
    Rows("10:10").Select
    Selection.Copy
    Rows("3:3").Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Rows("3:3").EntireRow.AutoFit    
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True

    End With

End Sub

Il faudrais que pour un nombre de ligne donnée, leurs noms soient différent. Sous la forme : "14xxx.y". Avec "xxx" qui ne change pas et "y" qui est A, B, C ... suivant le nombre de ligne d'indiqué.

Exemple :
5 lignes d'inserrées :
14004.A
14004.B
14004.C
14004.D
14004.E

C'est juste que je ne vois pas quoi rajouter à la macro.

Merci d'avance si vous avez des sollutions à proposer.

Fanny
 

Zon

XLDnaute Impliqué
Re : Insertion de plusieurs lignes suivant certaines conditions

Bonjour,

Si je comprends bien tu inséres une ligne vierge en ligne 3 dans laquelle tu mets juste en colonne A la valeur de la demande par ton inputbox puis ton récupéres les formats d'une autre ligne pour les autres colonnes de cette ligne 3.


Maintenant, l'utlisateur désire pouvoir inserer n lignes comme dans ton exemple,
on peut lui demander par une inputbox un peu différente où la saisie (type=1) doit être obligatoirement un nombre en utlisant application.inputbox :

Nblignes = application.InputBox("Nb à inserer", "Demande 1", "1",type:=1)

if 0< clng(nblignes)<27 then ' + de il n' ya que 26 lettres , si plus il faut savoir comment tu veux faire.
NvDde = InputBox("N°", "Demande", "14")

for i=nblignes to 1 step-1
rows(3).insert shift:=xldown
range("A3")=nvde & "." & chr(64 + i)
next i


chr(65) donne A , chr(66) donne B , etc ...

pour copier les formats je te laisse voir comment faire, si t 'y arrives pas mets un extrait de ton fichier ....

A+++
 

Chtitefanny

XLDnaute Junior
Re : Insertion de plusieurs lignes suivant certaines conditions

Bonjour Zon,

Merci pour la réponse.
Mais je n'arrive pas à rajouter la macro convenablement.
J'ai pas la ligne ".A" qui ce créait et j'ai l'indication de la demande est annulé.

Voici : Regarde la pièce jointe Test.1.xls

Fanny
 

Pièces jointes

  • Test.1.xls
    46 KB · Affichages: 60
  • Test.1.xls
    46 KB · Affichages: 59
Dernière édition:

Chtitefanny

XLDnaute Junior
Re : Insertion de plusieurs lignes suivant certaines conditions

Bonjour Zon et à tous,

J'ai réussi à mettre la macro pour avoir les lignes
Code:
Sub Nv_Demande()
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
    Dim NvDde As String

    'Désactive les lignes filtrées éventuelles
    If ActiveSheet.FilterMode Then
        ActiveSheet.ShowAllData
    End If

    'nommer la ligne
    NvDde = InputBox("N°", "Demande", "14-")
    nblignes = Application.InputBox("Nb à inserer", "Demande 1", "1", Type:=1)

    If 1 < CLng(nblignes) < 27 Then ' + de il n' ya que 26 lettres , si plus il faut savoir comment tu veux faire.

    For i = nblignes To 1 Step -1
    Rows(3).Insert shift:=xlDown
    Range("A3") = NvDde & "." & Chr(64 + i)
    Next i
    End If

    If NvDde = "" Then

    'ne pas créer
    Rows("3:3").Delete
    MsgBox "Demande annulée ...", vbExclamation, "Création de la Demande": Exit Sub
    End If

    'Mise en forme par centrage vertical de la ligne
    Rows("2:2").Select
    Selection.VerticalAlignment = xlCenter
    Range("A2").Select

    'Récupération de la mise en forme conditionnelle sur une ligne close
    Rows("10:10").Select
    Selection.Copy
    Rows("3:3").Select
    Selection.PasteSpecial Paste:=xlPasteFormats
    Rows("3:3").EntireRow.AutoFit
    With Application
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True

    End With

End Sub

Mais j'ai toujours des soucis qui sont :
lorsqu'il y a une insertion d'une seule ligne, il n'y a pas de rajout de ".A"
Il faudrait aussi la copie de la mise en forme sur toute les lignes de rajouté.

Merci d'avance pour les propositions de solution. ;-)
 

Zon

XLDnaute Impliqué
Re : Insertion de plusieurs lignes suivant certaines conditions

Bonjour,



désolé mais il y a des ratés sur les notifications de réponses,

penses à m'envoyer un petit message via le tableau de bord afin que je sois averti de ta réponse.


tu as une variable NvDde qui récupère la saisie du inputbox, or j'ai écrit nvde dans la boucle c'est vide, nvde à remplacer par NvDde.


pour le .A il manque un else

Code:
If 0 < CLng(nblignes) < 27 Then ' + de il n' ya que 26 lettres , si plus il faut savoir comment tu veux faire.
      NvDde = InputBox("N°", "Demande", "14")
    
      For i = nblignes To 1 Step -1
      Rows(3).Insert shift:=xlDown
      Range("A3") = nvde & "." & Chr(64 + i)
    Next i

    'NvDde = InputBox("N°", "Demande", "14")
    'If NvDde = "" Then

    'ne pas créer
    Else 'il manquait le else
      Rows("3:3").Delete
      MsgBox "Demande annulée ...", vbExclamation, "Création de la Demande": Exit Sub
    End If

A+++
 

Chtitefanny

XLDnaute Junior
Re : Insertion de plusieurs lignes suivant certaines conditions

Bonjour,

dsl du temps de réponse et merci de la tienne ;-)

Oui, pour que le ".A" n'apparesse on peut rajouter :

Code:
'Si ajout que d'une ligne
    If NbLignes = "1" Then
    Range("A3").Select
    ActiveCell.FormulaR1C1 = NvDde
    End If

Merci encore ;-)
à plus tard

Fanny
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo