Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je cherche à interdire le remplissage des cellules en colonne D, si les cellules de la ligne considérée en B et C sont vides:
If IsEmpty(Range("B4:B").Value) And IsEmpty(Range("C4:C").Value) Then
MsgBox "Veuillez renseigner les cellules de la ligne en colonne B et C"
Else
'mon code
End If
Il faut que la variable lig (n° de ligne) ait été définie, alors vous pourrez tester ainsi :
Code:
If Range("B" & lig) & Range("C" & lig) = "" Then
MsgBox "Veuillez renseigner les cellules de la ligne en colonne B et C"
Else
'mon code
End If
Mais peut-être voulez-vous plutôt :
Code:
If Range("B" & lig) = "" [COLOR="Red"]Or[/COLOR] Range("C" & lig) = "" Then
MsgBox "Veuillez renseigner les cellules de la ligne en colonne B et C"
Else
'mon code
End If
Sub Macro1()
For i = 1 To 10
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
'mon code
End If
Next i
End Sub
pour effectuer le test sur les 10 premières lignes
Sub Macro1()
For i = 1 To 10
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
'mon code
End If
Next i
End Sub
pour effectuer le test sur les 10 premières lignes
J'ai réussi à incorporer ton code dans ma macro (issue du forum, merci).
Je ne voudrais tester que la ligne en cours.
Quelles modifications de code apporter ?
Sub Macro1()
i = ActiveCell.Row
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
'mon code
End If
End Sub
Sub Macro1()
i = ActiveCell.Row
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
'mon code
End If
End Sub
Bonjour, merci de ta réponse ultra-rapide,
Ta proposition fonctionne, mais lorsque je double-clique une cellule de la colonne D, comme cela est prévu pour copier la ligne sur une autre feuille, j'ai bien le message, mais la copie de la ligne se fait quand même.
Peut-on ajouter de quitter la procédure avant l'exécution de la macro.
Voici le code complet (quel fouillis!!!):
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans une cellule
Dim dest As Range 'déclare la variable dest (DESTination)
Dim l As Integer 'déclare la variable l (Ligne)
Dim vr1 As String, vr2 As String, vr3 As String, vr4 As String, vr5 As String, vr6 As String 'déclare les variables vr1 et vr2 et vr3 (Valeur Recherchée 1 et Valeur Recherchée 2 et Valeur Recherchée 2)
Dim r As Range 'déclare la variable r (Recherche)
Dim test As Boolean, curSheet As Worksheet
Dim i As Integer
If Target.Column <> 4 Then Exit Sub 'si le double-clic ne se fait pas dans la colonne D, sort de la procédure
'doucle-clic sur un "x" = suppression de la ligne
If Target.Value = "x" Then 'condition : si le double-clic se fait sur une cellule contenant déjà "x"
Cancel = True 'annule le mode édition lié au double clic
Target.Value = "" 'supprime le "x" dans la cellule
vr1 = Cells(Target.row, 1).Value
vr2 = Cells(Target.row, 2).Value
vr3 = Cells(Target.row, 3).Value
vr4 = Cells(Target.row, 4).Value
vr5 = Cells(Target.row, 5).Value
vr6 = Cells(Target.row, 6).Value
With Sheets("Validé").Range("D2😀" & Sheets("Validé").Range("D65536").End(xlUp).row) 'prend en compte la plage éditée de la colonne A dans l'onglet "Cde"
Set r = .Find(vr1) 'définit la variable r
If Not r Is Nothing And r.Offset(0, 1).Value = vr2 Then r.EntireRow.Delete 'si il existe au moins une occurrence trouvée du nom et si le prénom correspond, supprime la ligne
End With 'fin de la prise en compte
Exit Sub 'sort de la procédure
End If 'fin de la condition
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name = "Validé" Then test = True
Sheets("Cde").Select
'si la feuille n'a pas encore été créée, la créer
If Not test Then ThisWorkbook.Sheets.Add.Name = "Validé"
Sheets("Validé").Range("A1").Value = "DEM01900"
Sheets("Cde").Select
Next
'doucle-clic sur une cellule vide ajout des données
Set dest = Sheets("Validé").Range("A65536").End(xlUp).Offset(1, 0) 'définit la variable dest
l = Target.row 'définit la variable l
Cancel = True 'annule le mode édition lié au double clic
i = ActiveCell.row
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
Cancel = True
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
Target.Value = "x" 'place "x" dans la cellule double-cliquée
End If
dest.Offset(0, 0).Value = "100" 'dans la colonne a
dest.Offset(0, 1).Value = "1000000" 'dans la colonne b
dest.Offset(0, 2).Value = "1900" 'dans la colonne c
dest.Offset(0, 3).Value = Cells(l, 1).Value 'copie le libellé en colonne d
dest.Offset(0, 4).Value = Cells(l, 2).Value 'copie le code en colonne e
dest.Offset(0, 5).Value = Cells(l, 3).Value * 100 'copie la qté x100 en colonne f
dest.Offset(0, 6).Value = Format(Now, "yyyymmdd") 'en colonne g
End Sub
J'ai déjà vu plus bordélique que cela................ surtout dans mes codes 😡
L'important c'est de s'y retrouver 😀
Vois ci-dessous, le bout de code (en bleu)à ajouter
Voir plus bas dans le code, supprimer ce qui est en rouge
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans une cellule
Dim dest As Range 'déclare la variable dest (DESTination)
Dim l As Integer 'déclare la variable l (Ligne)
Dim vr1 As String, vr2 As String, vr3 As String, vr4 As String, vr5 As String, vr6 As String 'déclare les variables vr1 et vr2 et vr3 (Valeur Recherchée 1 et Valeur Recherchée 2 et Valeur Recherchée 2)
Dim r As Range 'déclare la variable r (Recherche)
Dim test As Boolean, curSheet As Worksheet
Dim i As Integer
If Target.Column <> 4 Then Exit Sub 'si le double-clic ne se fait pas dans la colonne D, sort de la procédure
[COLOR="Blue"]i = ActiveCell.row
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
Cancel = True
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Exit sub
Else
Target.Value = "x" 'place "x" dans la cellule double-cliquée
End If[/COLOR]
'doucle-clic sur un "x" = suppression de la ligne
If Target.Value = "x" Then 'condition : si le double-clic se fait sur une cellule contenant déjà "x"
Cancel = True 'annule le mode édition lié au double clic
Target.Value = "" 'supprime le "x" dans la cellule
vr1 = Cells(Target.row, 1).Value
vr2 = Cells(Target.row, 2).Value
vr3 = Cells(Target.row, 3).Value
vr4 = Cells(Target.row, 4).Value
vr5 = Cells(Target.row, 5).Value
vr6 = Cells(Target.row, 6).Value
With Sheets("Validé").Range("D2" & Sheets("Validé").Range("D65536").End(xlUp).row) 'prend en compte la plage éditée de la colonne A dans l'onglet "Cde"
Set r = .Find(vr1) 'définit la variable r
If Not r Is Nothing And r.Offset(0, 1).Value = vr2 Then r.EntireRow.Delete 'si il existe au moins une occurrence trouvée du nom et si le prénom correspond, supprime la ligne
End With 'fin de la prise en compte
Exit Sub 'sort de la procédure
End If 'fin de la condition
For Each curSheet In ThisWorkbook.Sheets
If curSheet.Name = "Validé" Then test = True
Sheets("Cde").Select
'si la feuille n'a pas encore été créée, la créer
If Not test Then ThisWorkbook.Sheets.Add.Name = "Validé"
Sheets("Validé").Range("A1").Value = "DEM01900"
Sheets("Cde").Select
Next
'doucle-clic sur une cellule vide ajout des données
Set dest = Sheets("Validé").Range("A65536").End(xlUp).Offset( 1, 0) 'définit la variable dest
l = Target.row 'définit la variable l
Cancel = True 'annule le mode édition lié au double clic
[COLOR="Red"]i = ActiveCell.row
If IsEmpty(Range("B" & i).Value) And IsEmpty(Range("C" & i).Value) Then
Cancel = True
MsgBox "Veuillez renseigner les cellules de la ligne " & i & " en colonne B et C"
Else
Target.Value = "x" 'place "x" dans la cellule double-cliquée
End If[/COLOR]
dest.Offset(0, 0).Value = "100" 'dans la colonne a
dest.Offset(0, 1).Value = "1000000" 'dans la colonne b
dest.Offset(0, 2).Value = "1900" 'dans la colonne c
dest.Offset(0, 3).Value = Cells(l, 1).Value 'copie le libellé en colonne d
dest.Offset(0, 4).Value = Cells(l, 2).Value 'copie le code en colonne e
dest.Offset(0, 5).Value = Cells(l, 3).Value * 100 'copie la qté x100 en colonne f
dest.Offset(0, 6).Value = Format(Now, "yyyymmdd") 'en colonne g
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD