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 Sub

Puis 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 Sub

maintenant, 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 Sub

Et 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 Sub

j'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 Sub

Ma 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) VIDE

J’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 Sub

Pour 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

Rechercher des sujets similaires à "vide ligne suivante"