Explication

john_dodo -  
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

4 réponses

  1. 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?
    0
  2. john_dodo
     
    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. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. john_dodo
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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