Excel e gli applicativi Microsoft Office Inserimento dati e formule

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

    Gret
    Partecipante

      Ciao a tutti,

      ho bisogno del vostro aiuto per risolvere questo problema fastidioso..

      Ho due file excel, da un file inserisco i dati tramite userform, clicco sul commandbutton e me li trasferisce nell'altro file.. L'altro file ha varie formule (in questo ne ho messa una (una sommatoria in colonna G), il problema lo fa lo stesso) che tiro giù, per esempio fino alla riga 15..e qui che il problema si presenta. Quando inserisco i dati, partendo da A1 le celle sono vuote fino a G dove è presente la formula, questi li inserisce in A15 lasciando vuote le precedenti..

      Praticamente li inserisce sempre all'ultima riga ove è presente la formula.. Io vorrei che se è presente la formula fino a G15, i dati li inserisca a partire dalla cella vuota cioè da A1, poi A2 ecc..

      Nel FileMaster è presente una function che serve ad inserire i dati sulla stessa riga.

      Condivido i file per farvi capire.. fate una prova senza modificare il secondo file (FileDestinazione) e capirete di cosa parlo. Nella userform nel FileMaster inserite solo numeri interi.

      Spero possiate aiutarmi e grazie mille per ogni aiuto.

       

       

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

      albatros54
      Moderatore
        81 pts

        Allora se la formula nella colonna g del Filedestinazione è sempre uguale , ho modificato il tuo codice, in modo che quando trasferisci i dati dalla userform al foglio, trova l'utima cella vuota della colonna"A" è nella colonna G dove tu metti la formula nti inserisci la formula da VBA, se ho capito.

        `Private Sub CommandButton1_Click()
            Dim destWB As Workbook
            Dim SH_Sheet1 As Worksheet
            Dim URiga As Long
            Const sCartella_Di_Destinazione As String = _
                  "FileDestinazione.xlsx"
            Const sFoglio_Di_Destinazione As String = "Sheet1"
            Set destWB = Workbooks(sCartella_Di_Destinazione)
            With destWB
                Set SH_Sheet1 = .Sheets(sFoglio_Di_Destinazione)
            End With
            With SH_Sheet1
                URiga = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                'findlastcell().Row + 0
                .Range("A" & URiga).Resize(1, 6).Value = _
                Array(Me.TextBox1.Value, Me.TextBox2.Value, _
                      Me.TextBox3.Value, Me.TextBox4.Value, _
                      Me.TextBox5.Value, Me.TextBox6.Value)
                .Range("g" & URiga).FormulaLocal = "=somma(a" & URiga & ":f" & URiga & " )"
            End With
            With SH_Sheet1
                If OptionButton1 Then
                    URiga = findlastcell().Row + 0
                    .Range("H" & URiga).Value = "X"
                End If
                If OptionButton3 Then
                    URiga = findlastcell().Row + 0
                    .Range("I" & URiga).Value = "X"
                End If
                If OptionButton2 Then
                    URiga = findlastcell().Row + 0
                    .Range("J" & URiga).Value = "X"
                End If
            End With
        End Sub
        `

        sostiuisci il codice che ti posto con il tuo, sempre se ho capito, naturalmente non ho tenuto conto degli optionbutton

         

        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
        Sempre il mare, uomo libero, amerai!
        ( Charles Baudelaire )
        #21082 Score: 0 | Risposta

        Gret
        Partecipante

          Ciao albatros54,

          ti ringrazio per il codice ma c'è qualcosa che non va. Ho sostituito il tuo codice con il mio ma i numeri non si vedono (fa lo stesso effetto di quando colori di bianco il testo, ma se vado sulla cella il numero viene visualizzato sulla barra) e di conseguenza non fa la somma.

          Vorrei chidere se esiste la possibilità di non riportare le formule in VBA in quanto, nel file originale, è pieno zeppo di formule e casistiche varie, ed io non saprei come riportarle  

          La cosa curiosa che ho notato è che se tiro giù uno ad uno le formule, funziona benissimo altrimenti se le tiro giù 5-10 alla volta, i dati vengono inseriti all'ultima riga contente formule..

          Grazie mille per l'intervento

          #21083 Score: 0 | Risposta

          albatros54
          Moderatore
            81 pts

            Ho provato ma non riscontro quello che tu dici, perchè tirando verso il basso tutte le celle con le formule , li riporta normalmente

             

            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
            Sempre il mare, uomo libero, amerai!
            ( Charles Baudelaire )
            #21086 Score: 0 | Risposta

            Gret
            Partecipante

              Non so che dirti se non un grazie per l'intervento.

              "Vorrei chidere se esiste la possibilità di non riportare le formule in VBA in quanto, nel file originale, è pieno zeppo di formule e casistiche varie, ed io non saprei come riportarle"

              Gentilmente c'è la possibilità?

              Grazie mille dell'aiuto comunque.

              #21088 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                238 pts

                Cioè cerchi un copia-e-incolla solo valori?

                #21089 Score: 0 | Risposta

                Gret
                Partecipante

                  Ciao vecchio frac,

                  credo di non aver spiegato bene, scusate.. praticamente mi succede questo: se tiro le formule giù una ad una, quando inserisco i dati da userform, me li inserisce giusti facendo i calcoli normalmente..

                  Se tiro giù le formule fino alla riga 15 (esempio), quando faccio l'inserimento dati, i dati li inserisce all'ultima riga (A15) con le formule presenti e non li inserisce a partire da A1, lasciando le righe precedenti (tranne la colonna G in cui è presente la formula) vuote.

                  Io vorrei che i dati da userform me li inserisca a partire dalla prima riga vuota, cioè A1, indipendentemente se ho tirato giù le formule fino alla riga 15. (vedi allegati)

                  Grazie per l'intervento

                  (chiedo venia perchè il titolo può trarre in inganno, la formula non la devo trasportare in VBA ma è già presente nel foglio)

                   

                  #21091 Score: 0 | Risposta

                  albatros54
                  Moderatore
                    81 pts

                    il problema sta nella funzione che cerca l'ultima riga libera, perche tu fai riferimento a cells, che comprende tutte le celle del foglio, quindi facendo riferimento a tutte le celle del foglio la funzione trova che l'ultima cella che contiene il dato si trova nella righa 15 e sti stampa a partire dalla riga 15. Credo che il problema stia proprio qui.

                     

                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                    Sempre il mare, uomo libero, amerai!
                    ( Charles Baudelaire )
                    #21092 Score: 0 | Risposta

                    Gret
                    Partecipante

                      Albatros54, grazie per avermi fatto capire il problema...  

                      Ma come posso risolverlo?

                      #21093 Score: 0 | Risposta

                      albatros54
                      Moderatore
                        81 pts

                        devi assolutamente fare uso di questa funzione? perchè se ti serve trovare l'tima riga libera dove andare a scrive , ci sono altre soluzioni

                         

                        Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                        Sempre il mare, uomo libero, amerai!
                        ( Charles Baudelaire )
                        #21094 Score: 0 | Risposta

                        Gret
                        Partecipante

                          Se la mia è una strada senza uscita e tu mi offri una scorciatoia ti seguo..

                          Più che altro, questa funzione, mi dava la possibilità di scrivere alla riga successiva anche se, nella riga, trovava una cella vuota..

                          Comunque ti ascolto.

                          #21098 Score: 0 | Risposta

                          albatros54
                          Moderatore
                            81 pts

                            prova ad apportare queste modifiche alla funzione

                            If InRng Is Nothing Then Set InRng = SH_Sheet1.Range("a1:f100")

                            If .Application.WorksheetFunction.CountA(Range("a1:f100")) <> 0 Then
                            SubLRowFind = .Find(What:=" ", _
                            After:=.Range("A1"), _
                            LookAt:=xlPart, _
                            LookIn:=xlFormulas, _

                             

                             

                             

                            Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                            Sempre il mare, uomo libero, amerai!
                            ( Charles Baudelaire )
                            #21099 Score: 0 | Risposta

                            Gret
                            Partecipante

                              Funziona! Ora me li inserisce alla prima riga  

                              Purtroppo però al successivo inserimento i dati me li sovrascrive, quando dovrebbe aggiungerli.  

                              Perchè si comporta così?  

                              #21115 Score: 1 | Risposta

                              albatros54
                              Moderatore
                                81 pts

                                Forse ci siamo, il codice sembra un poco incasinato , ma secondo me funziona.

                                Sostituisci il codice che ti posto, naturalmente si deve affinare,perchè non ho preso in considerazione quello riferito alla sounta degli Optionbutton

                                Private Sub CommandButton1_Click()
                                    Dim destWB As Workbook
                                    Dim SH_Sheet1 As Worksheet
                                    Dim URiga As Long
                                    Const sCartella_Di_Destinazione As String = _
                                          "FileDestinazione.xlsx"
                                    Const sFoglio_Di_Destinazione As String = "Sheet1"
                                    Set destWB = Workbooks(sCartella_Di_Destinazione)
                                    With destWB
                                        Set SH_Sheet1 = .Sheets(sFoglio_Di_Destinazione)
                                    End With
                                    With SH_Sheet1
                                        colonnaA = .Cells(Rows.Count, 1).End(xlUp).Row
                                        colonnaB = .Cells(Rows.Count, 2).End(xlUp).Row
                                        colonnaC = .Cells(Rows.Count, 3).End(xlUp).Row
                                        colonnaD = .Cells(Rows.Count, 4).End(xlUp).Row
                                        colonnaE = .Cells(Rows.Count, 5).End(xlUp).Row
                                        colonnaF = .Cells(Rows.Count, 6).End(xlUp).Row
                                        If colonnaA > colonnaB Then
                                            lastrow = colonnaA + 1
                                        ElseIf colonnaB > colonnaC Then
                                            lastrow = colonnaB + 1
                                        ElseIf colonnaC > colonnaD Then
                                            lastrow = colonnaC + 1
                                        ElseIf colonnaD > colonnaE Then
                                            lastrow = colonnaD + 1
                                        ElseIf colonnaE > colonnaF Then
                                            lastrow = colonnaE + 1
                                        Else
                                            lastrow = colonnaF + 1
                                        End If
                                        'URiga = findlastcell().Row + 0
                                        .Range("A" & lastrow).Resize(1, 6).Value = _
                                        Array(Me.TextBox1.Value, Me.TextBox2.Value, _
                                              Me.TextBox3.Value, Me.TextBox4.Value, _
                                              Me.TextBox5.Value, Me.TextBox6.Value)
                                    End With
                                    With SH_Sheet1
                                        If OptionButton1 Then
                                            URiga = findlastcell().Row + 0
                                            .Range("H" & URiga).Value = "X"
                                        End If
                                        If OptionButton3 Then
                                            URiga = findlastcell().Row + 0
                                            .Range("I" & URiga).Value = "X"
                                        End If
                                        If OptionButton2 Then
                                            URiga = findlastcell().Row + 0
                                            .Range("J" & URiga).Value = "X"
                                        End If
                                    End With
                                End Sub
                                

                                 

                                 

                                Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                Sempre il mare, uomo libero, amerai!
                                ( Charles Baudelaire )
                                #21129 Score: 0 | Risposta

                                Gret
                                Partecipante

                                  Buongiorno,

                                  albatros54 ti ringrazio tantissimo per l'aiuto! Il codice gira una meraviglia!  

                                  Io ho lasciato invariata la function, dopo le modifiche che mi hai fatto apportare, per poter includere gli optionbutton dovrei cambiare questo "SH_Sheet1.Range("a1:f100")" e "CountA(Range("a1:f100"))" in questo modo "SH_Sheet1.Range("a1:j100")" e "CountA(Range("a1:j100"))" giusto? Poi, successivamente devo inserire le colonne..

                                  O sbaglio qualcosa?

                                  Grazie per l'aiuto e buon inizio settimana 🙂

                                  #21132 Score: 1 | Risposta

                                  albatros54
                                  Moderatore
                                    81 pts

                                    Gret ha scritto:

                                    Io ho lasciato invariata la function

                                    la puoi abbandonare definivamente.

                                    Gret ha scritto:

                                    per poter includere gli optionbutton dovrei cambiare questo "SH_Sheet1.Range("a1:f100")" e "CountA(Range("a1:f100"))" in questo modo "SH_Sheet1.Range("a1:j100")" e "CountA(Range("a1:j100"))" giusto?

                                    perchè complicarsi la vita, se vedi il codice del "Private Sub CommandButton1_Click()" alla riga

                                    If OptionButton1 Then
                                    URiga = findlastcell().Row + 0
                                    .Range("H" & URiga).Value = "X"
                                    End If

                                    tua hai bisogno del numeri di riga, sostituendo  "URiga"col valore nella variabile

                                    "Lastrow" ed eliminando la riga

                                    URiga = findlastcell().Row + 0

                                    il tutto diventa

                                    If OptionButton1 Then
                                    .Range("H" & Lastrow).Value = "X"
                                    End If

                                    e il gioco è fatto  

                                     

                                    Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
                                    Sempre il mare, uomo libero, amerai!
                                    ( Charles Baudelaire )
                                    #21133 Score: 0 | Risposta

                                    Gret
                                    Partecipante

                                      Quindi, il codice definitivo è questo:

                                      Dim destWB As Workbook
                                          Dim SH_Sheet1 As Worksheet
                                          Dim lastrow As Long
                                          Const sCartella_Di_Destinazione As String = _
                                                "FileDestinazione.xlsx"
                                          Const sFoglio_Di_Destinazione As String = "Sheet1"
                                          Set destWB = Workbooks(sCartella_Di_Destinazione)
                                          With destWB
                                              Set SH_Sheet1 = .Sheets(sFoglio_Di_Destinazione)
                                          End With
                                          With SH_Sheet1
                                              colonnaA = .Cells(Rows.Count, 1).End(xlUp).Row
                                              colonnaB = .Cells(Rows.Count, 2).End(xlUp).Row
                                              colonnaC = .Cells(Rows.Count, 3).End(xlUp).Row
                                              colonnaD = .Cells(Rows.Count, 4).End(xlUp).Row
                                              colonnaE = .Cells(Rows.Count, 5).End(xlUp).Row
                                              colonnaF = .Cells(Rows.Count, 6).End(xlUp).Row
                                              If colonnaA > colonnaB Then
                                                  lastrow = colonnaA + 1
                                              ElseIf colonnaB > colonnaC Then
                                                  lastrow = colonnaB + 1
                                              ElseIf colonnaC > colonnaD Then
                                                  lastrow = colonnaC + 1
                                              ElseIf colonnaD > colonnaE Then
                                                  lastrow = colonnaD + 1
                                              ElseIf colonnaE > colonnaF Then
                                                  lastrow = colonnaE + 1
                                              Else
                                                  lastrow = colonnaF + 1
                                              End If
                                              .Range("A" & lastrow).Resize(1, 6).Value = _
                                              Array(Me.TextBox1.Value, Me.TextBox2.Value, _
                                                    Me.TextBox3.Value, Me.TextBox4.Value, _
                                                    Me.TextBox5.Value, Me.TextBox6.Value)
                                          End With
                                          With SH_Sheet1
                                              If OptionButton1 Then
                                                  .Range("H" & lastrow).Value = "X"
                                              End If
                                              If OptionButton3 Then
                                                  .Range("I" & lastrow).Value = "X"
                                              End If
                                              If OptionButton2 Then
                                                  .Range("J" & lastrow).Value = "X"
                                              End If
                                          End With

                                      giusto?

                                      Ora lo provo sul file originale..

                                      #21151 Score: 0 | Risposta

                                      Gret
                                      Partecipante

                                        Grazieeeeeee.....

                                        Funziona alla grande!

                                        Grazie Albatros54!  

                                         

                                      Login Registrati
                                      Stai vedendo 18 articoli - dal 1 a 18 (di 18 totali)
                                      Rispondi a: Inserimento dati e formule
                                      Gli allegati sono permessi solo ad utenti REGISTRATI
                                      Le tue informazioni: