Ajout de lignes sans bouton et selon cellules
Bonjour, je suis nouveau sur ce forum, je viens de faire mes premiers pas niveau VBA jusqu'ici les fonctions me satisfaisaient entièrement.
J'explique mon problème :
J'ai une feuille de calcul qui nécessite l'ajout d'une ligne supplémentaire a chaque fois que le terme "RHRJ" apparait seulement je ne veux pas utiliser de bouton ou autre j'aimerais si possible que ça se fasse automatiquement par exemple je suis en colonne B je tape RHRJ et hop une ligne apparait juste en dessous mais ça n'est pas fini l'idéal serait que toutes les fonctions suivent histoire que cette ligne ne m'apporte pas que des cellules vides ..
Alors je me suis renseigné j'ai bien remarqué" (si je ne me trompe pas) qu'il fallait s'intéressé à ça : Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Seulement j'a cru comprendre que ça nécessitait la maitrise des variables ce qui n'est pas mon cas et étant donné qu'il me faut uniquement ce codage je vous avouerai que tout apprendre du début à la fin pour ça et bien je ne peux pas vraiment ...
Voila j'espère avoir été "assez clair" quant à mes attentes.
Dans l'attente de vous lire.
Bonjour,
Une piste déjà pour une seule feuille et non toutes celles du classeur comme tu montre
A mettre dans le module de la feuille concernée. Pour l'exemple, dans ce code, la valeur est entrée en colonne B (elle est la seule cible, ça ne fonctionnera pas pour les autres) et les formules copiées vont de la colonne C à la colonne H si il y a d'autres groupes de formules, il faut adapter :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub 'colonne B
'la plage de cellule tirée vers le bas vas :
'de la colonne C "Cells(Target.Row, 3)"
'à la colonne H "Cells(Target.Row, 8)"
'pour déplacer les colonnes, modifier les valeurs 3 et 8
If Target.Value = "RHRJ" Then
Application.EnableEvents = False
Target.Offset(1).EntireRow.Insert xlShiftDown
Range(Cells(Target.Row, 3), Cells(Target.Row, 8)).AutoFill _
Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 8))
End If
Application.EnableEvents = True
End SubBonjour désolé du retard je me suis accordé une petite pause sur ce projet, des fois il faut mieux prendre du recule plutôt que de s'acharner ! C'est exactement ce qu'il me fallait merci, franchement merci !
Petite question au passage, quand j'indique RHRJ c'est ok, tout ce note bien en revanche si j'enlève RHRJ de cette cellule la fonction ne fait pas de retour en arrière, connaissez vous une solution à ce problème ?
Merci encore
Bonjour,
Dans ce cas, il faut mémoriser la cellule au moment de la sélection afin de savoir si elle contient "RHRJ", si c'est le cas, mémorise et si on supprime sa valeur (donc "RHRJ" dans "Worksheet_Change()") la ligne située au dessous sera supprimer :
Dim Cel As Range
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub 'colonne B
Application.EnableEvents = False
If Target.Value = "RHRJ" Then
Target.Offset(1).EntireRow.Insert xlShiftDown
Range(Cells(Target.Row, 3), Cells(Target.Row, 8)).AutoFill _
Range(Cells(Target.Row, 3), Cells(Target.Row + 1, 8))
ElseIf Target.Value = "" Then
If Not Cel Is Nothing Then
Target.Offset(1).EntireRow.Delete
End If
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column <> 2 Then Exit Sub 'colonne B
If Target.Value = "RHRJ" Then Set Cel = Target
End Sub