Explication

Fermé
john_dodo - 26 oct. 2017 à 16:09
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 27 oct. 2017 à 15:03
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

yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 Ambassadeur 1 557
26 oct. 2017 à 16:45
bonjour, peux-tu partager le code  VBA de michel_m?
0
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
yg_be Messages postés 23405 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 20 décembre 2024 1 557
26 oct. 2017 à 18:24
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 27 oct. 2017 à 09:13
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 27 oct. 2017 à 15:12
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