Explication
john_dodo
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Novice en VBA je viens de tester le code de michel_m qui marche a merveille(merci beaucoup),mais que je ne comprend absolument pas le moins du monde ...serait'il d'avoir une petite explication.
D'avance merci
Novice en VBA je viens de tester le code de michel_m qui marche a merveille(merci beaucoup),mais que je ne comprend absolument pas le moins du monde ...serait'il d'avoir une petite explication.
D'avance merci
4 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, peux-tu partager le code VBA de michel_m? -
macro à installer dans le module feuille "vacances"
dans la feuille "resume" B9 ne doit pas être vide (un espace suffit)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nom As String, Lig As Byte
If Not Intersect(Target, Range("B7:B47")) Is Nothing Then
Nom = Target.Offset(0, -1)
With Sheets("resume")
'suppression d'un X
If Target = "" Then
On Error GoTo fin
Lig = .Columns("B").Find(Nom, .Range("B9")).Row
.Rows(Lig).Delete
End If
'ajout d'un X
If Target = "X" Then
Lig = .Columns("B").Find("", .Range("B9")).Row
.Cells(Lig, "B") = Nom
End If
End With
End If
fin:
End Sub-
Private Sub Worksheet_Change(ByVal Target As Range) Dim Nom As String, Lig As Byte If Not Intersect(Target, Range("B7:B47")) Is Nothing Then Nom = Target.Offset(0, -1) With Sheets("resume") 'suppression d'un X If Target = "" Then On Error GoTo fin Lig = .Columns("B").Find(Nom, .Range("B9")).Row .Rows(Lig).Delete End If 'ajout d'un X If Target = "X" Then Lig = .Columns("B").Find("", .Range("B9")).Row .Cells(Lig, "B") = Nom End If End With End If fin: End Sub
il faudrait un paragraphe pour décrire chaque ligne de code. y-a-t'il un élément précis que tu ne comprends pas? souhaites-tu adapter le code?
-
-
Bonjour john_dodo
Option Explicit
'-----------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nom As String, Lig As Byte
'la cellule "déclencheuse" (target) doit se trouver dans la zone B2;B47
If Not Intersect(Target, Range("B7:B47")) Is Nothing Then
'affectation de la nouvelle valeur de travail dans la colonne A
Nom = Target.Offset(0, -1)
'on travaille AVEC la feuille "resume"
'(les objets lignes, colonnes, cellule doivent ^tre alors précédés d'un point)
With Sheets("resume")
'si la cible est vide
If Target = "" Then
'on sort de la procédure
On Error GoTo fin
'sinon on supprime la ligne où se trouve "nom" après B9
Lig = .Columns("B").Find(Nom, .Range("B9")).Row
.Rows(Lig).Delete
End If
'si la cible est égale à "X"
If Target = "X" Then
'on cherche la première ligne vide dans la colonne B après B9
Lig = .Columns("B").Find("", .Range("B9")).Row
'on y ajoute la valeur de "nom"
.Cells(Lig, "B") = Nom
End If
End With
End If
'gestionnaire d'erreurs
'(règle d'algorithmique: toutes les sorties de procédure regroupées en fin de code)
fin:
End Sub
en espèrant que...
Michel -
Bonjour a vous,
Tout d’abord merci bcp pour l'explication mais si je peut me permettre d'abuser de votre temps ...serait t'il possible d'etre un peut plus precis sur :
Lig = .Columns("B").Find(Nom, .Range("B9")).Row
.Rows(Lig).Delete
et
Lig = .Columns("B").Find("", .Range("B9")).Row
.Cells(Lig, "B") = Nom
Je comprend pas bien le .row et .rows
D'avance merci-
re,
Row est une propriété qui donne le numero de ligne où se trouve la valeur cherchée ; âr la fonction "find" (dans ce cas valeur vide)
Rows désigne l'objet "ligne"
une feuille (c'est un objet) a en autres 2 sous -objet colonne (columns) et ligne (rows)
comme tu débutes avec VBA
http://www.info-3000.com/vbvba/ ca date mais très pédagogique
puis ensuite plus "hard" mais très complet
https://bidou.developpez.com/article/VBA/
-