Si cellule vide alors ligne suivante
Bonjour à tous
J'ai eu sur le forum par Optimix ce code pour ne rien écrire dans la colonne D si C est vide
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub
Dim nL As Long, nC As Integer
nL = Target.Row
nC = Target.Column
If Trim(Cells(nL, nC - 1)) = "" Then
Target.Value = ""
Cells(nL + 1, nC).Select
End If
End SubPuis j'ai modifié ce code comme cela
'PROCEDURE SI COLONNE C VIDE ALORS D VIDE
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nL As Long, nC As Integer
If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub 'SI colonne et Ligne hors cible sort procedure
Application.EnableEvents = False 'Mise au repos de la Gestion de l'événement--> Eviter que la macro se boucle à l'infini
nL = Target.Row 'ligne
nC = Target.Column ' Colonne
If Trim(Cells(nL, nC - 1)) = vbNullString Then 'Regarde à gauche si vide
Target.Value = vbNullString 'Si vide -> ne rien mettre
Cells(nL + 1, nC).Activate 'Active Ligne suivante
End If
Application.EnableEvents = True
End Submaintenant, j'aimerai que :
Si Colonne C3 jusqu'à dernière ligne vide alors D3 à I3 vide
Sachant aussi que mon projet à pris des nouveaux onglets (1 tableau structuré par onglet) , serait-il possible de mettre cela dans une boucle de type:
Dim i As Integer:
For i = 3 To Sheets.Count
With Sheets(i)
.Range("b3").AutoFilter Field:=3 'Réinitialiser le filtre des Tableaux
End With
Next
End SubEt donc ce nouveau code serait-il à placé dans ThisWorkbook ?
Merci de vos retour
Bonne journée à tous
Bonjour Ledzep, bonjour le forum,
Je ne vois pas le rapport entre les deux premiers codes et le dernier !?...
Bonjour le forum
Bonjour ThauThème
Oui en me relisant je t'avoue que tu ne peux pas comprendre et je m'en excuse
Donc ce code est dans chaque onglet de mon classeur actuel.
'PROCEDURE SI COLONNE C VIDE ALORS D VIDE
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nL As Long, nC As Integer
If Target.Column <> 4 Or Target.Row < 3 Then Exit Sub 'SI colonne et Ligne hors cible sort procedure
Application.EnableEvents = False 'Mise au repos de la Gestion de l'événement--> Eviter que la macro se boucle à l'infini
nL = Target.Row 'ligne
nC = Target.Column ' Colonne
If Trim(Cells(nL, nC - 1)) = vbNullString Then 'Regarde à gauche si vide
Target.Value = vbNullString 'Si vide -> ne rien mettre
Cells(nL + 1, nC).Activate 'Active Ligne suivante
End If
Application.EnableEvents = True
End Subj'aimerai maintenant que : Si C est vide alors (D:I) vide
Au sujet de ce code
Dim i As Integer:
For i = 3 To Sheets.Count
With Sheets(i)
'Nouveau code pour PROCEDURE SI COLONNE C VIDE ALORS (D:I) VIDE
End With
Next
End SubMa question était:
Peut on travailler avec cette boucle dans ThisWorkbook afin de ne pas mettre dans chaque onglet la même:
'PROCEDURE SI COLONNE C VIDE ALORS (D:I) VIDEJ’espère que c'est que c'est plus clair
Merci de m'avoir répondu
A bientôt
Bonne année à tous ,
Voir une piste avec le code ci-dessous à placer dans le module associé à ThisWorkbook:
nota: pour savoir descendre d'une ligne, on refuse les modif. de plus d'une cellule dans la colonne C (ça peut se modifier) en fonction de ce qu'on désire:
- autoriser une plage unique de cellules dans la colonne C (là on sait descendre d'une ligne)
- autoriser plusieurs plages disjointes (il faut préciser, quelle cellule sélectionner)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Index < 3 Then Exit Sub
If Target.Row >= 3 And Target.Column = 3 Then
If Target.Count <> 1 Then
Application.EnableEvents = False: Application.Undo: Beep: Application.EnableEvents = True: Exit Sub
Else
Application.EnableEvents = False: Target.Offset(, 1).Resize(, 6).ClearContents
Application.EnableEvents = True: Target.Offset(1).Select
End If
End If
End Sub
Re,
Une version qui doit accepter l'effacement d'une cellule ou d'une plage contigüe ou bien de plusieurs plage disjointes au sein de la colonne C (multi-sélection).
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Static sortir As Boolean
Dim xrg As Range, xunion As Range, x
If Sh.Index < 3 Then Exit Sub
If Target.Columns.Count > 1 Or Target.Column <> 3 Then Exit Sub
On Error Resume Next: Set xrg = Nothing
Set xrg = Intersect(Sh.Columns(3).SpecialCells(xlCellTypeBlanks), Sh.Range("c3:c" & Rows.Count))
If xrg Is Nothing Then Exit Sub
On Error GoTo 0: Set xunion = xrg.Areas(1).Offset(, 1).Resize(, 6)
For Each x In xrg.Areas: Set xunion = Union(xunion, x.Offset(, 1).Resize(, 6)): Next
Application.EnableEvents = False: xunion.ClearContents: Application.EnableEvents = True
xrg.Areas(xrg.Areas.Count).Offset(xrg.Areas(xrg.Areas.Count).Rows.Count)(1).Select
End Sub
Bonjour à tous
Merci mafraise pour ta réponse.
Je vais tester ta proposition et aussi la comprendre. ça c'est pas gagné, mais étant autodidacte, je progresse doucement.
Par contre je ne te promet pas une réponse rapide par manque de tps
Non travail ne me le permet pas en ce moment.
Mais j'espère que tu suivras ce post
Merci
Bonne fin de journée
Re,
Dès que j'aurai un peu de temps, je commenterai mes deux codes. Par principe, lors de mes premières réponses, je ne commente presque jamais.
Si par la suite, on me le demande ou bien si je m'aperçois que le demandeur est désireux de comprendre alors je m'attelle aux commentaires.
A+
Re,
J'ai commenté le code de la version v2.
nota: en relisant le code, j'ai modifié une instruction. Il vaut donc mieux prendre le code de la version v2b du fichier joint.
Bonjour le forum
Bonjour mafraise
j'ai essayé ton code, mais je ne suis pas certain que je m'y retrouve
Je te prépare mon fichier simplifié dès que possible, ainsi beaucoup plus simple pour toi y travailler
Merci déjà d'avoir consacrer du tps pour ta solution
A bientôt
Bonjour Ledzep,
Avec les lignes de code ci-dessous. A placer dans le ThisWorkbook.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Columns("D:I")) Is Nothing And Sh.Index > 2 Then
If Cells(Target.Row, "C") = vbNullString And Target.Row > 2 Then _
MsgBox "Impossible, la cellule C" & Target.Row & " est vide. Retour sur celle-ci ou aller à C" & Target.Row + 1: Cells(Target.Row, "C").Select
End If
End SubPour toutes les feuilles sauf les 2 premières, les cellules des colonnes D à I ne peuvent être inscrites si celle de la colonne C même ligne est vide.
Bonsoir le Forum
Merci X Cellus de ta proposition.
Je vais vérifier cela avec mon ancien fichier, cela peux me servir dans le futur
J'ai quasiment terminé le développement de mon projet qui à bien évolué depuis le début de sa création.
Par contre je ne peux le mettre sur le forum, je pense que ce fichier est trop spécifique, (Prog de suivi , de vérification de matériel avec correctif maintenance et tps réel ou maxi en 1 jour)
Dommage car j'aurais bien voulu savoir si l'assemblage de plusieurs codes était correct, Mais il fonctionne correctement.
Pas de latence pas de bug , même si 3 PC sont sur le même fichier . (Support sur serveur)
Merci à vous de m'avoir répondu sur ce post.
A bientôt sur le forum