Sviluppare funzionalita su Microsoft Office con VBA CommandButton per salvataggio valori celle su altro foglio Excel

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

    Ciao a tutti!

    Avrei necessità per velocizzare il salvataggio di alcuni dati di creare un commandbutton che trasferisca i valori di determinate celle su un'altro foglio Excel.

    Mi spiego meglio:

    Ho un file Excel chiamato "Modello Ricevuta".

    All'interno ho un foglio chiamato "Fatture" diviso in tre colonne:

    Colonna A: Tipologia di fatture (esempio Nota di credito, ecc)

    Colonna B: Numeri delle fatture

    Colonna C: Importo

    Io dovrei trasferire i dati di queste celle tramite il click del commandbutton "btnCassa" su un'altro foglio Excel chiamato "Cassa".

    Come faccio a trasferire i dati da un foglio all'altro?

     

    Grazie mille!

     

    Allego i due file

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

    patel
    Moderatore
      50 pts

      Stai facendo confusione tra Foglio e File, dagli allegati si evince che Cassa è un altro file e non un foglio di Modello Ricevuta. Comunque potresti iniziare utilizzando il registratore di macro

      #19586 Score: 0 | Risposta

      Riflettendoci meglio credo che la soluzione migliore sia gestire il tutto da un file unico.

      A tal proposito la mia idea sarebbe questa.

      Vorrei che mentre compilo la ricevuta i dati vengano trascritti in automatico nelle celle apposite del foglio "Contanti".

      Dando un'occhio al file che vi allego aggiornato come mi consigliate di procedere?

      Qual'è la maniera più pratica e veloce?

      Ho provato tramite codice VBA applicato sul commandbutton di inserimento dati, il problema è che se dovessi inserire il numero di fattura errato verrebbe replicato anche nel foglio "contanti" e la correzzione sarebbe al quanto complessa.

      Con la macro invece sto avendo un pò di difficoltà per quanto riguarda il foglio "contanti" colonna "descrizione movimento".

      Come faccio ad inserire i vari numeri fatture dentro quella stessa cella?

       

      Grazie mille!

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

      Ok sono riuscito a creare una macro per l'inserimento dei dati nel foglio contanti.

      Sub Contanti()
      '
      ' Contanti Macro
      '
      
      '
          Sheets("Contanti").Select
          Range("A4").Select
          ActiveCell.FormulaR1C1 = Sheets("Ricevuta").Range("C15").Value
          
          Sheets("Contanti").Select
          Range("B4").Select
          ActiveCell.FormulaR1C1 = Sheets("Cliente").Range("B2").Value
          
          Sheets("Contanti").Select
          Range("C4").Select
          ActiveCell.FormulaR1C1 = Sheets("Cliente").Range("C2").Value
          
          Sheets("Contanti").Select
          Range("D4").Select
          ActiveCell.FormulaR1C1 = Sheets("Totale").Range("A2").Value
          
          Sheets("Contanti").Select
          Range("E4").Select
          ActiveCell.FormulaR1C1 = Sheets("Fatture").Range("A2").Value
                 
      End Sub

      Tuttavia ho tre problemi:

      1) Come faccio ad inserire nel foglio "Contanti" cella "E4" i valori del foglio "Fatture" celle "A2:B2"?

      Esempio: Prendiamo il foglio "Fatture". Nella cella "A2" c'è scritto "SALDO FT." e nella "B2" 201800...

      Vorrei che nella cella E4 (foglio "Contanti") apparisse assieme SALDO FT. 201800....

       

      2) Dovrei anche inserire quelli seguenti (in tutto sono 10 fatture) e separarle con una virgola.

      Esempio: SALDO FT. 201800000000, SALDO FT. 201820000000.. e così via...

       

      3) Avviata la macro poi aggiungerei la funzione di salvataggio automatico del file. L'unico problema è come passare alla riga seguente del foglio "Contanti" ogni volta che inserisco una nuova ricevuta.

       

      Grazie mille!

       

       

      #19590 Score: 0 | Risposta

      patel
      Moderatore
        50 pts

        La tua macro può essere semplificata così

        `Sub Contanti()
            Sheets("Contanti").Range("A4").Value = Sheets("Ricevuta").Range("C15").Value
            Sheets("Contanti").Range("B4") = Sheets("Cliente").Range("B2").Value
            Sheets("Contanti").Range("C4") = Sheets("Cliente").Range("C2").Value
            Sheets("Contanti").Range("D4") = Sheets("Totale").Range("A2").Value
            Sheets("Contanti").Range("E4") = Sheets("Fatture").Range("A2").Value & "," & Sheets("Fatture").Range("B2").Value
                   
        End Sub`
        #19648 Score: 0 | Risposta

        Grazie mille!

        Il codice funziona perfettamente, ora ho inserito anche le altre celle in quanto possono essere inserite fino a 10 fatture diverse.

        Ora però mi servirebbe fare in modo che salti le righe occupate in automatico in modo che non si sovrascriva.

        Come posso fare?

        Al momento il codice è questo:

        Sub Contanti()
        '
        ' Contanti Macro
        '
        
        '
            Sheets("Contanti").Range("A4").Value = Sheets("Ricevuta").Range("C15").Value
            Sheets("Contanti").Range("B4") = Sheets("Cliente").Range("B2").Value
            Sheets("Contanti").Range("C4") = Sheets("Cliente").Range("C2").Value
            Sheets("Contanti").Range("D4") = Sheets("Totale").Range("A2").Value
            Sheets("Contanti").Range("E4") = Sheets("Fatture").Range("A2").Value & " " & Sheets("Fatture").Range("B2").Value & "," & Sheets("Fatture").Range("A3").Value & " " & Sheets("Fatture").Range("B3").Value & "," & Sheets("Fatture").Range("A4").Value & " " & Sheets("Fatture").Range("B4").Value & "," & Sheets("Fatture").Range("A5").Value & " " & Sheets("Fatture").Range("B5").Value & "," & Sheets("Fatture").Range("A6").Value & " " & Sheets("Fatture").Range("B6").Value & "," & Sheets("Fatture").Range("A7").Value & " " & Sheets("Fatture").Range("B7").Value & "," & Sheets("Fatture").Range("A8").Value & " " & Sheets("Fatture").Range("B8").Value & "," & Sheets("Fatture").Range("A9").Value & " " & Sheets("Fatture").Range("B9").Value & "," & Sheets("Fatture").Range("A10").Value & " " & Sheets("Fatture").Range("B10").Value & "," & Sheets("Fatture").Range("A11").Value & " " & Sheets("Fatture").Range("B11").Value & "."
                 
        End Sub

        Così facendo però se inserisco solo una fattura mi rimangono le varie virgole e il punto finale con lo spazio vuoto in mezzo.

        Esiste un modo per fare inserire le virgole solo una volta inserito il numero fattura?

        Grazie

        #19674 Score: 0 | Risposta

        patel
        Moderatore
          50 pts

          devi usare un ciclo for che ti concatena le celle solo se piene, se non riesci allega un file di esempio semplificato senza userform

          #19729 Score: 0 | Risposta

          Allego il file semplificato senza Userform con presente solo la Macro per il trasferimento dei dati nel foglio "Contanti".

          Avrei bisogno anche che non mi appaiono le virgole dove non è presente il numero fattura nella colonna descrizione movimento.

           

          Grazie mille!

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

          Io ho provato in diversi modi ma non riesco a fare in ciclo for con condizionale "solo se celle sono vuote"..

          Cosa devo inserire? 🙁

           

          Grazie mille!

          #19870 Score: 0 | Risposta

          patel
          Moderatore
            50 pts

            hai allegato un file praticamente senza dati, per capire occorre un esempio realistico con anche il risultato desiderato

            #19871 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              238 pts

              Una cosa così?

                  s = ""
                  With Worksheets("fatture")
                      For Each ce In .Range("A2..A11")
                          If ce.Offset(, 1) <> "" Then
                              s = s & ce & ce.Offset(, 1) & ", "
                          End If
                      Next
                  End With
                  s = Left(s, Len(s) - 2)
                  Worksheets("Contanti").Range("E4") = s

              Però manca Option Explicit nel file di esempio e dubito che tu lo abbia nel file reale. Consiglio di inserirlo.

              #19885 Score: 0 | Risposta

              Allego il file con tutti i dati come esempio 🙂

              Vecchio frac, intanto grazie come sempre per il tuo aiuto.

              Tuttavia non me ne intendo di Option Explicit.. cosa dovrei aggiungere al codice?

              Il file che ho allegato nuovo può esserti utile eventualmente?

               

              Grazie ancora

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

              alfrimpa
              Partecipante
                24 pts

                Option Explicit è solo un’istruzione che rende obbligatoria la dichiarazione delle variabili e si mette in cima ad ogni modulo.

                Si può anche impostare l’editor di VBA in modo che lo faccia lui automaticamente (fai qualche ricerca con Google)

                Alfredo

                #19892 Score: 0 | Risposta

                Il codice così funziona:

                Sub Contanti()
                '
                ' Contanti Macro
                '
                
                '
                Dim Rng As Range
                s = ""
                    With Worksheets("Fatture")
                        For Each ce In .Range("A2..A11")
                            If ce.Offset(, 1) <> "" Then
                                s = s & ce & ce.Offset(, 1) & ", "
                            End If
                        Next
                    End With
                    s = Left(s, Len(s) - 2)
                    Worksheets("Contanti").Range("E4") = s
                         
                End Sub

                però non mi salta la riga e non capisco il motivo..

                Inoltre vorrei aggiungere anche i campi delle colonne: data, cliente, nome, importo e saldo.

                Ho provato replicando il codice e cambiando i parametri ma non mi funziona.

                 

                #19895 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  238 pts

                  Dandelion1987 ha scritto:

                  però non mi salta la riga e non capisco il motivo

                  Io invece trovo che funziona (ho preso a modello l'ultimo file che hai allegato). Se cancello un numero fattura, nella cella E4 del foglio "contanti" quel numero fattura non viene riportato. Probabilmente quindi non ho capito cosa intendi.

                  Dandelion1987 ha scritto:

                  vorrei aggiungere anche i campi delle colonne

                  Bè ragiona su questo: il codice così com'è costruito funziona solo inserendo nella cella E4 del foglio "Contanti" le informazioni che hai scelto. Io presumo che tu vorrai avere queste informazioni su righe diverse, al cambiare del cliente o al cambiare della data (questo non lo so, non ho letto tutto il thread e potrei sbagliare). Perciò devi prima stabilire quale sarà la riga di "Contanti" che dovrà contenere le informazioni, e poi prelevare (dalla medesima riga in cui, in colonna E, metti la descrizione dei movimenti) i dati rimanenti.

                   

                  #19896 Score: 0 | Risposta

                  Mi spiego meglio.

                  Io dovrei trasferire oltre alla descrizione dei movimenti con i dati delle fatture (che con il tuo codice funziona perfettamente), anche le seguenti celle:

                  Foglio "Ricevute" Cella "C15" deve essere trascitta nel foglio "Contanti" cella "A4"

                  Foglio "Cliente" Cella "B2" deve essere trascitta nel foglio "Contanti" cella "B4"

                  Foglio "Cliente" Cella "C2" deve essere trascitta nel foglio "Contanti" cella "C4"

                  Foglio "Totale" Cella "A2" deve essere trascitta nel foglio "Contanti" cella "D4"

                  Questo sempre saltando la riga assieme alla descrizione dei movimenti 🙂

                  Ho provato a modificare il codice, ma non so come fare..

                   

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

                  vecchio frac
                  Senior Moderator
                    238 pts

                    Dandelion1987 ha scritto:

                    Ho provato a modificare il codice, ma non so come fare

                    Non capisco. A me sembra troppo semplice.

                    Option Explicit
                    
                    Sub Contanti()
                    Dim s As String
                    Dim ce As Range
                    
                        s = ""
                        With Worksheets("Fatture")
                            For Each ce In .Range("A2..A11")
                                If ce.Offset(, 1) <> "" Then
                                    s = s & ce & ce.Offset(, 1) & ", "
                                End If
                            Next
                        End With
                        s = Left(s, Len(s) - 2)
                        
                        With Worksheets("Contanti")
                            .Range("A4") = Worksheets("Ricevuta").Range("C15")
                            .Range("B4") = Worksheets("Cliente").Range("B2")
                            .Range("C4") = Worksheets("Cliente").Range("C2")
                            .Range("D4") = Worksheets("Totale").Range("D4")
                            .Range("E4") = s
                        End With
                        
                    End Sub
                    

                    Cosa intendi quando dici questo?

                    Dandelion1987 ha scritto:

                    Questo sempre saltando la riga assieme alla descrizione dei movimenti

                    #19986 Score: 0 | Risposta

                    Grazie infinite vecchio frac 🙂

                    Il codice va benissimo.

                    L'unica cosa che manca è che ogni volta che avvio la macro passi alla riga successiva del foglio contanti.

                    In pratica io avvierò la macro una volta completa la ricevuta e potrebbe essere che finita una ne inserisca una nuova

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

                    vecchio frac
                    Senior Moderator
                      238 pts

                      Dandelion1987 ha scritto:

                      passi alla riga successiva

                      Quindi naturalmente invece che A4, B4, C4 e così via, deve esserci un riferimento alla prima riga vuota: A..., B..., C...

                      Non ti resta che calcolarla prima del With e utilizzare tale riferimento di riga nel range.

                      Option Explicit
                      
                      Sub Contanti()
                      Dim s As String
                      Dim ce As Range
                      Dim ultimariga As Long
                      
                          s = ""
                          With Worksheets("Fatture")
                              For Each ce In .Range("A2..A11")
                                  If ce.Offset(, 1) <> "" Then
                                      s = s & ce & ce.Offset(, 1) & ", "
                                  End If
                              Next
                          End With
                          s = Left(s, Len(s) - 2)
                          
                          With Worksheets("Contanti")
                              ultimariga = .Range("A" & .Range("A:A").Rows.Count).End(xlUp).Row + 1
                      
                              .Range("A" & ultimariga) = Worksheets("Ricevuta").Range("C15")
                              .Range("B" & ultimariga) = Worksheets("Cliente").Range("B2")
                              .Range("C" & ultimariga) = Worksheets("Cliente").Range("C2")
                              .Range("D" & ultimariga) = Worksheets("Totale").Range("A2")
                              .Range("E" & ultimariga) = s
                          End With
                          
                      End Sub

                      Ricordati sempre Option Explicit in testa ai tuoi moduli.

                      #20043 Score: 0 | Risposta

                      Ti adoro!

                      Funziona esattamente come desideravo!

                      Grazie, grazie e grazie! 🙂

                       

                      Posso chiederti un'ultima cosa?

                      Se ad esempio ho una Combox con due possibili selezioni "Contanti" e "Bancomat" è possibile con questo tuo codice scrivere i dati in un foglio diverso a seconda di quello che metto nella Combobox?

                      La mia idea è aggiungere oltre al foglio "Contanti" anche uno chiamato "Bancomat" perché in azienda li tieniamo divisi.

                       

                      Grazie mille!

                      #20046 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        238 pts

                        Dandelion1987 ha scritto:

                        Se ad esempio ho una Combox con due possibili selezioni

                        Il controllo Combobox è dentro un Userform o direttamente sul foglio Excel?

                        In questo secondo caso, è un controllo modulo o un controllo ActiveX?

                        Il codice da scrivere differisce un po' a seconda dei casi, ma una volta stabilito con esattezza di cosa stiamo parlando, potrai adattare la riga 

                        With Worksheets("Contanti")

                        per adeguarla alla nuova esigenza e diventerà simile a questa:

                        With Worksheets(valore_restituito_dal_combobox)
                        #20066 Score: 0 | Risposta

                        Grazie! Ora provo 🙂

                        Ora però ho un problema nuovo con la Useform con multipage.

                        In pratica mi viene fuori questo errore quando l'avvio e non capisco da cosa dipende..

                        Allego il file..

                        L'errore si è presentato dopo che nello Sviluppo della Useform ho semplicemente selezionato una page di apertura diversa.

                        Come risolvo?

                        Grazie mille!

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

                        patel
                        Moderatore
                          50 pts

                          txtUtenza fa parte del Frame1, quindi

                          Frame1.txtUtenza.SetFocus

                          #20309 Score: 0 | Risposta

                          Grazie mille! Ora funziona 🙂

                           

                          #20409 Score: 0 | Risposta

                          Domanda, se volessi che il valore numerico della cella C11 del foglio "Versamento" fosse tramutata in negativo con questa macro, cosa dovrei cambiare?

                          Option Explicit
                          
                          Sub Registra()
                          
                          Dim answer As Integer
                          answer = MsgBox("Registrare il versamento cassa?", vbYesNo + vbQuestion, "Microsoft Excel")
                          If answer = vbYes Then
                          Dim s As String
                          Dim ce As Range
                          Dim ultimariga As Long
                          
                              s = "VERSAMENTO CASSA"
                              With Worksheets("Versamento")
                                  For Each ce In .Range("A1")
                                      If ce.Offset(, 1) <> "" Then
                                          s = s & ce & ce.Offset(, 1) & ""
                                      End If
                                  Next
                              End With
                              s = Left(s, Len(s) - 0)
                              
                              With Worksheets("Prima nota cassa")
                                  ultimariga = .Range("A" & .Range("A:A").Rows.count).End(xlUp).Row + 1
                          
                                  .Range("A" & ultimariga) = Worksheets("Ricevuta").Range("C15")
                                  .Range("D" & ultimariga) = Worksheets("Versamento").Range("C11")
                                  .Range("E" & ultimariga) = s
                              End With
                              
                              Application.Wait Now + TimeValue("0:00:01")
                              MsgBox "Registrazione del versamento effettuata."
                              
                                  Else
                              'do nothing
                          End If
                          
                          End Sub
                          

                           

                          Grazie mille!

                        Login Registrati
                        Stai vedendo 25 articoli - dal 1 a 25 (di 44 totali)
                        Rispondi a: CommandButton per salvataggio valori celle su altro foglio Excel
                        Gli allegati sono permessi solo ad utenti REGISTRATI
                        Le tue informazioni: