Explication

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

4 réponses

  1. 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
    1. Contributeur
      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/
  2. Contributeur
    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
    1. 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
      1. Contributeur
        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?