Login Registrati
Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
  • Autore
    Articoli
  • #53992 Score: 0 | Risposta

    frank_ciccio
    Partecipante
      3 pts

      Ciao a tutti.

      Nel workbook allegato:

      quando scrivo in colonna D aggiungere zero in celle E/F/G
      che poi possano essere sovrascritte da altri numeri

      Grazie

       

      Allegati:
      You must be logged in to view attached files.
      #53995 Score: 0 | Risposta

      gianfranco55
      Partecipante
        90 pts

        ciao

        nel foglio1

        Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo e
        If Not Intersect(Target, Range("D8:D1000")) Is Nothing Then
            Target.Offset(0, 1) = 0
             Target.Offset(0, 2) = 0
                 Target.Offset(0, 3) = 0
        End If
        e: Exit Sub
        End Sub
        #53996 Score: 0 | Risposta

        maxpit
        Partecipante
          7 pts

          Buongiorno frank_ciccio,

          ti lascio 2 opzioni la formula in E8: =SE($D8="";"";0) da trascinare a destra e in basso

          o la macro da inserire nel Foglio1:

          `Private Sub Worksheet_Change(ByVal Target As Range)
          
              Dim bBlock As Boolean
              If Target.Column = 4 And Target.Cells.Count = 1 And Not bBlock Then
                  bBlock = True
                  Range(Cells(Target.Row, 5), Cells(Target.Row, 7)).Value = 0
                  bBlock = False
              End If
          
          End Sub`
          #53997 Score: 0 | Risposta

          LukeReds
          Partecipante
            15 pts

            ciao,

            altra soluzone, selezioni D8:G23 (o fino alla riga di interesse) poi nella barra delle formule scrivi 

            =SE(D8:D23<>"";0;"")

            e confermi la formula con ctrl shift enter

            Con vba

            Private Sub Worksheet_Change(ByVal Target As Range)
            If Target.Column = 4 Then
               Application.EnableEvents = False
               Range("E" & Target.Row & ":G" & Target.Row) = 0
               Application.EnableEvents = True
            End If
            End Sub

            #53998 Score: 1 | Risposta

            frank_ciccio
            Partecipante
              3 pts

              Grazie a tutti gianfranco 55 , maxpit, lukereds le vostre macro funzionano tutte.

              Grazie ancora

              #54026 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                Un'alternativa che consente il copia-incolla di più celle in colonna D:

                Private Sub Worksheet_Change(ByVal Target As Range)
                  Dim rCell As Range
                  
                  If Target.Column = 4 Then
                    Application.EnableEvents = False
                    For Each rCell In Target.Cells
                      rCell.Offset(0, 1).Resize(, 3) = 0
                    Next rCell
                    Application.EnableEvents = True
                  End If
                
                End Sub

                @maxpit: la variabile bBlock, così come utilizzata è inutile per due motivi; se esamini bene il tuo codice sono sicuro che lo capirai da solo.

                #54029 Score: 0 | Risposta

                alexps81
                Moderatore
                  56 pts

                  Ciao caro @scossa come mai anche il ciclo FOR EACH/NEXT?

                  Non può bastare così?

                  Option Explicit
                  
                  Private Sub Worksheet_Change(ByVal Target As Range)
                      'se è interessata l'intervallo "D8:D23" allora...
                      If Target.Column = 4 And (Target.Row >= 8 And Target.Row <= 23) Then
                          Application.EnableEvents = False
                          Target.Offset(, 1).Resize(1, 3).Value = 0
                          Application.EnableEvents = True
                      End If
                  End Sub
                  #54030 Score: 0 | Risposta

                  scossa
                  Partecipante
                    37 pts

                    alexps81 ha scritto:

                    Ciao caro @scossa come mai anche il ciclo FOR EACH/NEXT?

                    In effetti, visto che va scritto il valore 0 per tutte le celle il ciclo non serve:

                    Private Sub Worksheet_Change(ByVal Target As Range)
                    
                      If Target.Column = 4 Then
                        Application.EnableEvents = False
                        Target.Offset(0, 1).Resize(, 3) = 0
                        Application.EnableEvents = True
                      End If
                    
                    End Sub
                    

                    non ho capito perché limiti il range ad un determinato numero di righe.

                    P.S.: forse ho capito: è il range nel file dell'OP (che non ho scaricato). 

                    P.P.S: Target.Offset(, 1).Resize(1, 3).Value = 0 così però valorizzi solo la prima riga di E:G

                    #54035 Score: 0 | Risposta

                    maxpit
                    Partecipante
                      7 pts

                      @scossa : hai ragione è stata una mia svista in quanto l'azione è prevista solo con modifiche sulla colonna D e la variabile tutte le volte che accede alla Sub è sempre False. Ho comunque scelto di limitare l'esecuzione alla selezione di una sola cella.

                      Il codice si può quindi semplificare in

                      Private Sub Worksheet_Change(ByVal Target As Range) Dim bBlock As Boolean
                          If Target.Column = 4 And Target.Cells.Count = 1 
                              Range(Cells(Target.Row, 5), Cells(Target.Row, 7)).Value = 0 
                          End If 
                      End Sub

                      Grazie per l'appunto.

                       

                      #54036 Score: 0 | Risposta

                      scossa
                      Partecipante
                        37 pts

                        maxpit ha scritto:

                        e la variabile tutte le volte che accede alla Sub è sempre False

                        perché per mantenere il valore avresti dovuto dichiararla come Static.

                        #54039 Score: 0 | Risposta

                        maxpit
                        Partecipante
                          7 pts

                          Ho deciso di non utilizzare Static in quanto considero la variazione possibile solo per una cella (Target.Cells.Count = 1) escludendo quindi la possibilità della ripetizione a seguito nuovo evento di variazione rilevato sul foglio innescata dalla valorizzazione di 3 celle contigue.

                          Mi sono accorto solo ora che ho lasciato la dichiarazione di variabile inserita che ora elimino, purtroppo ho qualche problema a gestire le correzioni sui messaggi:

                          Private Sub Worksheet_Change(ByVal Target As Range)
                              If Target.Column = 4 And Target.Cells.Count = 1 
                                  Range(Cells(Target.Row, 5), Cells(Target.Row, 7)).Value = 0 
                              End If 
                          End Sub

                          Grazie ancora e alla prossima.

                        Login Registrati
                        Stai vedendo 11 articoli - dal 1 a 11 (di 11 totali)
                        Rispondi a: aggiungere zero
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: