› Excel e gli applicativi Microsoft Office › Inserimento dati e formule
-
AutoreArticoli
-
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.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 )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
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 )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.
Cioè cerchi un copia-e-incolla solo valori?
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)
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 )Albatros54, grazie per avermi fatto capire il problema...
Ma come posso risolverlo?
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 )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.
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 )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ì?
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 )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 🙂
Io ho lasciato invariata la function
la puoi abbandonare definivamente.
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 )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..
-
AutoreArticoli