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

    Frasubb
    Partecipante
      1 pt

      Ciao a tutti e ben ritrovati.

      Sempre nell'intento di migliorare il mio file di lavoro, chiedo se sia possibile fare questo, ovvero riuscire a diminuire di 1 il numero di rate riportato nella colonna J quando però  nella medesima  sia presente un numero maggiore di 1 e allo stesso momento, quando scrivo "Si" nella colonna L.

      Faccio doverosamente presente che la stessa colonna J è sempre valorizzata con un numero cioè non è MAI vuota, quindi questa macro che chiedo deve prevedere ciò.

      E' possibile tutto questo ?

      Grazie in anticipo al genio che vorrà aiutarmi !!!!!

      Allego il mio file esempio su cui lavorare

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

      Raffaele53
      Partecipante
        23 pts

        Prova, premi ALT+F11 ed incolla sulla destra
        Ho scritto pure se cancelli SI aumenta +1

        Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Cells.Count > 1 Then Exit Sub
            If Not Intersect(Target, Range("L:L")) Is Nothing Then
                If Target.Offset(0, 0) = "Si" Then
                    Application.EnableEvents = False
                    Target.Offset(0, -2) = Target.Offset(0, -2) - 1
                    Application.EnableEvents = True
                Else
                    Application.EnableEvents = False
                    Target.Offset(0, -2) = Target.Offset(0, -2) + 1
                    Application.EnableEvents = True
                End If
            End If
        End Sub
        #50216 Score: 0 | Risposta

        Frasubb
        Partecipante
          1 pt

          Buongiorno Raffaele,

           grazie mille per il tuo aiuto e tua soluzione, la provo nel pomeriggio perché al momento non ho il pc con me.

           Ti faccio sapere sulla funzionalità della cosa ma sono certo che sarà perfetta e sulla base delle mie indicazioni !

          #50220 Score: 0 | Risposta

          maxpit
          Partecipante
            7 pts

            Buongiorno Frasubb,

            contribuisco con la mia soluzione:

            Private Sub Worksheet_Change(ByVal Target As Range)
            
                ' by maxpit
                If Target.Cells.Count = 1 Then
                    If Target.Column = 12 Then
                        With Target(1)
                            If .Value = "Si" And .Offset(0, -2) > 1 Then
                                Application.EnableEvents = False
                                .Offset(0, -2) = .Offset(0, -2) - 1
                                Application.EnableEvents = True
                            End If
                        End With
                    End If
                End If
                
            End Sub
            

            Con sequenza di compilazione prima la colonna J poi la colonna L

            Verifica e fai sapere.

            P.S.: la macro va inserita nel foglio del "Mese" e per l'esempio posto Ottobre ... altrimenti bisognerà modificarla affinché funzioni da "Questa_cartella_di_lavoro"

            #50223 Score: 1 | Risposta

            scossa
            Partecipante
              37 pts

              maxpit ha scritto:
              contribuisco con la mia soluzione:

              volendo puoi semplificare:

                With Target
                  If .Cells.Count = 1 And .Column = 12 Then
                    If .Value = "Si" And .Offset(0, -2) > 1 Then
                        Application.EnableEvents = False
                        .Offset(0, -2) = .Offset(0, -2) - 1
                        Application.EnableEvents = True
                    End If
                  End If
                End With

              P.S.: Target(1) non serve visto che nel primo If hai già messo la condizione che Target deve essere di una sola cella.

              #50229 Score: 0 | Risposta

              maxpit
              Partecipante
                7 pts

                Buonasera a tutti,

                grazie @scossa hai ragione è un refuso rimasto per un test che avevo fatto e mi sono scordato di eliminarlo in fase di pubblicazione del post.

                A presto

                #50230 Score: 0 | Risposta

                Frasubb
                Partecipante
                  1 pt

                  Ciao Raffaele,

                  ho provato la tua soluzione e funziona, solo che invece di incollare a destra, dopo aver digitato ALT+F11, ho dovuto incollare il tutto nei singoli fogli dei mesi. Nessun problema e nessuna fatica, era solo per dirtelo.

                  Ti ringrazio e faccio i complimenti, hai dato un grande valore aggiunto al mio foglio di lavoro.

                  Se pensi, infine, che devo fare qualcosa di diverso rispetto a ciò che ora ti ho scritto, ovviamente è ben accetto !

                  #50246 Score: 0 | Risposta

                  scossa
                  Partecipante
                    37 pts

                    Raffaele53 ha scritto:

                    If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Or Target.Cells.Count > 1 Then Exit Sub
                     

                    è ridondante in quanto già la condizione Target.Cells.Count > 1  da sola implica che almeno una tra Rows o Columns sia > 1.

                    #50252 Score: 0 | Risposta

                    Raffaele53
                    Partecipante
                      23 pts

                      Hai ragione, mi sono accorto subito dopo aver spostato, questa l'ho imparata poco tempa fà e mi sembra più funzionale.

                      Private Sub Worksheet_Change(ByVal Target As Range)
                      If Target.Cells.Count = 1 Then
                          If Not Intersect(Target, Range("L:L")) Is Nothing Then
                              If Target.Offset(0, 0) = "Si" Then
                                  Application.EnableEvents = False
                                  Target.Offset(0, -2) = Target.Offset(0, -2) - 1
                                  Application.EnableEvents = True
                              Else
                                  Application.EnableEvents = False
                                  Target.Offset(0, -2) = Target.Offset(0, -2) + 1
                                  Application.EnableEvents = True
                              End If
                          End If
                      Else
                          MsgBox "Devi modificare solo una cella, ripristino i dati"
                          With Application
                              .EnableEvents = False
                              .Undo
                              .EnableEvents = True
                          End With
                      End If
                      End Sub
                      #50256 Score: 0 | Risposta

                      scossa
                      Partecipante
                        37 pts

                        Raffaele53 ha scritto:

                        questa l'ho imparata poco tempa fà e mi sembra più funzionale  If Target.Offset(0, 0) = "Si" Then

                         .Offset(0,0) pensaci bene: non ha senso.

                        #50261 Score: 0 | Risposta

                        Raffaele53
                        Partecipante
                          23 pts

                          Solo vecchie-brutte abbitudini >>>If Target = "Si" Then

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