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. Contributeur
    bonjour, peux-tu partager le code  VBA de michel_m?
    0
    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
      0
      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?
        0
    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
      0
      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
        0
        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/
          0