Condividi:        

[Excel] problema con copia-incolla

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] problema con copia-incolla

Postdi ixa » 19/10/06 07:48

Un saluto a tutti!....Domanda: per prelevare, da un foglio, dei dati ed archiviarli in un altro pensavo di utilizzare una macro come questa:
Sub copiariga()
Rows("7:7").Select
Selection.Copy
Sheets("PHTEM007").Select
Rows("2:2").Select
ActiveSheet.Paste
End Sub
il problema è che il punto di prelievo,fatto dal foglio principale,
(Rows("7:7").Select) non è mai lo stesso!
La scelta del foglio,di destinazione,(Sheets("PHTEM007").Select) va fatta in funzione del contenuto scritto in una TextBox.
Infine la riga,da incollare, deve essere la prima,libera,che trova.
Come posso rendere variabili i contenuti fissi di ("7:7")-("PHTEM007")-("2:2")?.........
Grazie!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Sponsor
 

Postdi Anthony47 » 19/10/06 13:36

Ciao ixa,
la risposta semplificata e’: devi usare delle variabili in sostituzione delle costanti, che vanno settate sul valore che ti serve.
Ad esempio, invece di Sheets("PHTEM007").Select potresti usare
Codice: Seleziona tutto
FoglioTarget = Range("A1").Value    'Si assume che A1 contenga il nome foglio!!
Sheets(FoglioTarget).Select


Per quanto riguarda la ricerca della prima riga libera, io in genere faccio affidamento su una colonna che certamente contiene un dato e poi uso:
Codice: Seleziona tutto
Range("A65536").End(xlUp).Offset(1,0).Select

Se invece della colonna A fai affidamento su altra colonna, in Offset userai (1,-n) dove n sono le colonne che mancano per spostarsi nella colonna A; infatti per poter incollare una riga completa non puoi che selezionare la colonna A della riga (altrimenti genera errore).

E’ sufficiente?
Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi ixa » 19/10/06 14:22

un grande ringrazziamento anche per la tempestività nel rispondere.

un'ultima cosa: per quanto riguarda il prelievo della riga (Rows("7:7").Select) non è mai lo stesso! ...in questo caso come posso inserire la variabile?
ciao!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi Anthony47 » 19/10/06 18:06

Ovviamente devi sapere quale riga andare a copiare... se no io ti posso solo fare un generatore randomico, che pero' "l' azzecca" una volta ogni tanto.

Assodato cio' potrai usare combinazioni quali:
-se conosci la riga:
Cells(RigaDaCopiare,1).EntireRow.Copy
-se conosci l' indirizzo:
Range(AdrDaCopiare).EntireRow.Copy

Se sei piu' esplicito nel chiarire come vuoi/puoi calcolare o dedurre quale riga va copiata potrei fare di piu'...

Facci sapere, ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi ixa » 19/10/06 19:17

di nuovo un rigraziamento (questa volta scritto con una "z" ...ah! ah!)
domani ci ritorno sopra poi ti aggiorno!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi ixa » 20/10/06 07:22

Buona giornata!
Approfitto ancora della tua disponibilità e competenza.
Vediamo se riesco a spiegarti meglio quello che voglio fare: le celle del foglio1 contengono i dati relativi a una serie di articoli.
Per ogni articolo i dati vengono inseriti e memorizzati,richiamando una UserForm, con il seguente criterio:
(es…: A1=data;B1=codice;C1=descrizione;…………;DI1=ultima revisione) e per questa parte di lavoro tutto bene!
Detti articoli devono essere, periodicamente, revisionati e per farlo il criterio è questo:
dalla UserForm apro una ComboBox che mi permette di vedere tutti i codici della colonna B, seleziono il codice (es..:PM012 che si trova nella cella B12) e automaticamente riporto nella Form tutti i dati relativi all’articolo selezionato.
Modifico i valori,a seguito della revisione, e avvio, con un Bottone, la registrazione.
È qui che nasce la necessità di copiare gli stessi dati in un altro foglio per avere uno storico da poter consultare, magari selezionando tutta la riga, copiarla, passare al foglio “storico” e incollare.
ciao!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi Anthony47 » 20/10/06 19:47

Ciao,
ma allora, perche' completata la scrittura delle modifiche sul Foglio1 (immaagini da una serie di textbox) non vai sul Foglio2, ti posizioni in coda (adesso sai come fare, vero?) e scrivi anche li gli stessi dati?

Oppure: scrivimi in una cella libera la selezione fatta tramite combobox e da questo risaliamo alla sua riga da ricopiare in Foglio2; ma questo presuppone che i codici della colonna B siano unici (una sola occorrenza).

Fammi sapere se puoi realizzare la 1 o sei costretto alla 2..

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi ixa » 21/10/06 13:33

Spero possano servire a capire quello che voglio fare:

Queste, in sintesi le istruzioni per la selezione del codice:

Private Sub CommandButton1_Click()
If ComboBox1 = "" Then
MsgBox " FUNZIONE CERCA SCHEDA INATTIVA DEVI PRIMA SELEZIONARE O SCRIVERE IL CODICE "
Exit Sub
End If
With ActiveSheet.Range("B3:B3500")
Dim X As String
X = ComboBox1.Value
Set c = .Find(X, LookIn:=xlValues) ', LookAt:=xlWhole
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, -1).Select
ISO_9002.TextBox2 = c.Offset(0, -1).Value
ISO_9002.TextBox3 = c.Offset(0, 0).Value
ISO_9002.TextBox4 = c.Offset(0, 1).Value

‘ho cancellato per recuperare spazio

ISO_9002.TextBox80 = c.Offset(0, 71).Value
Y = c.Value
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
Else
MsgBox "Nome non Trovato"
End If
End With
End Sub

Queste, in sintesi le istruzioni per modificare:
Sub modifica()
messaggio = MsgBox("sono state fatte modifiche, vuoi salvare?", vbYesNo)
If messaggio = vbNo Then GoTo 1

STORICO = qui dovrei salvare in un foglio che chiamerò storico tutti i dati antecedenti la modifica

ActiveCell.Offset(0, 1).Value = TextBox4
ActiveCell.Offset(0, 2).Value = TextBox5
ActiveCell.Offset(0, 3).Value = TextBox6

‘ho cancellato per recuperare spazio

ActiveCell.Offset(0, 71).Value = TextBox80

messaggio = MsgBox("AGGIORNO ANCHE LA DATA DI SCADENZA?", vbYesNo)
If messaggio = vbNo Then GoTo 1
aggiorna_scadenza
ActiveCell.Offset(0, 0).FormulaR1C1 = CDate(TextBox2)
1:
End Sub


GRAZIE!!!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi Alexsandra » 21/10/06 14:19

(es…: A1=data;B1=codice;C1=descrizione;…………;DI1=ultima revisione)
ISO_9002
Per caso ha a che fare con la revisione dei moduli relativi alla certificazione Vision 2000?
Secondo mè dal codice che hai postato e se è attinente al quote ti stai complicando la vita.

Esponi il problema (non la procedura per copiare dei dati) ma intendo quello che vorresti fare con Excel relativo al tuo problema.
- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale.

Win7 + Office 2003 Ita
Avatar utente
Alexsandra
Utente Senior
 
Post: 2358
Iscritto il: 09/01/06 20:31

Postdi Anthony47 » 21/10/06 18:47

Ciao ixa,
da una parte ti suggerisco di approfondire l’ osservazione di Alexsandra, dall’ altra ti do’ la mi interpretazione del problema.
Riporto qui sotto porzioni del tuo codice su cui ho aggiunto le istruzioni che marco come codice:

. . . . (parte 1) . .
Private Sub CommandButton1_Click()
Codice: Seleziona tutto
Storico = "Foglio2"      '<<<-- Modificare ????!!!!

If ComboBox1 = "" Then

. . . . . . (parte 2) . . . .
X = ComboBox1.Value
Set c = .Find(X, LookIn:=xlValues) ', LookAt:=xlWhole
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, -1).Select
ISO_9002.TextBox2 = c.Offset(0, -1).Value
ISO_9002.TextBox3 = c.Offset(0, 0).Value
ISO_9002.TextBox4 = c.Offset(0, 1).Value

Codice: Seleziona tutto
'Salvo l’ indirizzo selezionato
SelRow = ActiveCell.Address


‘ho cancellato per recuperare spazio

. . . . . (parte 3) . . .
Queste, in sintesi le istruzioni per modificare:
Sub modifica()

messaggio = MsgBox("sono state fatte modifiche, vuoi salvare?", vbYesNo)
If messaggio = vbNo Then GoTo 1

STORICO = qui dovrei salvare in un foglio che chiamerò storico tutti i dati antecedenti la modifica

Codice: Seleziona tutto
Range(SelRow).Select
Selection.EntireRow.Copy
Proven = ActiveSheet.Name
Sheets(Storico).Select
Range ("B65536").End(xlUp).Offset(1,-1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets(Proven).Select


ActiveCell.Offset(0, 1).Value = TextBox4

Quindi:
-nella parte 1 definisco il nome del foglio che voglio utilizzare per lo storico;
-nella parte 2 salvo l’ indirizzo della cella selezionata tramite combobox;
-nella parte 3 salvo la riga corrente in Storico prima di procedere con le modifiche.

Se ti sembra sensato, inserisci il codice “tra le righe” dell’ attuale macro e collauda; sempre DOPO aver fatto una copia di backup del file.

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 21/10/06 18:53

Riguardando il tutto, aggiungi ancora la seguente istruzione in fondo al codice che ti ho postato come parte 3:
Codice: Seleziona tutto
Range(SelRow).Select


Potrebbe anche essere inutile, ma male non fa.

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi ixa » 21/10/06 19:02

Per il momento vi ringrazio ancora per la pazienza e la disponibilità.
più tardi proverò le tue istruzioni "Anthony47".
Fermo restando che terrò, in seria, considerazione il suggerimento di "Alexsandra"........mi conosco in realtà sono molto contorto e il più delle volte rendo complicate anche le cose più semplici!
vi terro informati sugli sviluppi...se non vi dispiace!
GRAZIE!!!!
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi ixa » 21/10/06 19:42

Anthony47....CANESTRO DA TRE PUNTI!!
era quello che volevo fare!

Range(SelRow).Select
Selection.EntireRow.Copy
'Proven = ActiveSheet.Name
Sheets("storico").Select
Range("B65536").End(xlUp).Offset(1, -1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("foglio1").Select

ho eliminato questa istruzione perchè mi generava errore.
'Proven = ActiveSheet.Name
...la curiosità è madre del sapere.
ixa
Utente Junior
 
Post: 20
Iscritto il: 14/09/06 13:04

Postdi Anthony47 » 22/10/06 02:25

Non ho capito perche' da' errore su Proven = ActiveSheet.Name (probabilmente non c' e' nessun foglio attivo in quel momento), ma vedo che hai aggirato brillantemente e quindi va bene cosi'.

Ciao, alla prossima.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] problema con copia-incolla":


Chi c’è in linea

Visitano il forum: Ricky0185 e 47 ospiti