Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

macro copia dal foglio 1 incolla nel folgio "x"

363 views
Skip to first unread message

raffygrp

unread,
Jan 25, 2010, 8:50:12 AM1/25/10
to
Salve ,
ho questo problema
in un range C10:Q10 del foglio1 ho dei valori da copiare
e da incollare nel range B5:Q5 del foglio "X" ( il foglio "X" è un
foglio nominato come il valore che inserisco nella cella b10 del
foglio 1)
avrei bisogno di una macro che copia i valori dal range C10:Q10 del
foglio 1
trova il foglio con il nome corrispondente al valroe riportato nella
cella b10 del foglio 1 ( ad esempio: foglio "X")
si sposta nel foglio "x" e incolla tutto nella prima riga vuota dopo
la riga 5

Mauro Gamberini

unread,
Jan 25, 2010, 9:22:55 AM1/25/10
to

in un range C10:Q10 del foglio1 ho dei valori da copiare
e da incollare nel range B5:Q5 del foglio "X" ( il foglio "X" � un

foglio nominato come il valore che inserisco nella cella b10 del
foglio 1)
avrei bisogno di una macro che copia i valori dal range C10:Q10 del
foglio 1
trova il foglio con il nome corrispondente al valroe riportato nella
cella b10 del foglio 1 ( ad esempio: foglio "X")
si sposta nel foglio "x" e incolla tutto nella prima riga vuota dopo
la riga 5
*************************************************

Questa *dovrebbe* fare quanto hai chiesto:

Public Sub m()

'gestione errori
On Error GoTo RigaErrore

'dichiaro le variabili
Dim wk As Workbook
Dim sh1 As Worksheet
Dim shX As Worksheet
Dim lNuovaRiga As Long

'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
'metto un riferimento ai due fogli
With wk
Set sh1 = .Worksheets("Foglio1")
Set shX = .Worksheets(sh1.Range("B10").Value)
End With

'trovo la prima riga vuota in colonna B
'del foglio su cui incoller� i dati
With shX
lNuovaRiga = .Range("C" & _
.Rows.Count).End(xlUp).Row + 1
'voglio comunque partire dalla riga 5
If lNuovaRiga <= 4 Then lNuovaRiga = 5
'copio/incollo
sh1.Range("C10:Q10").Copy _
Destination:=.Cells(lNuovaRiga, 3)
End With

RigaChiusura:
'Set a Nothing delle variabili oggetto
Set shX = Nothing
Set sh1 = Nothing
Exit Sub

RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaErrore

End Sub

Se(se) devi copiare il Range B10:Q10 del Foglio1
nelle celle Bn:Qn del FoglioX, modifica qui:

sh1.Range("C10:Q10").Copy _
Destination:=.Cells(lNuovaRiga, 3)

cos�:

sh1.Range("B10:Q10").Copy _
Destination:=.Cells(lNuovaRiga, 2)

perch� dal tuo post non si capisce.

Grazie per l'attenzione.

--
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.microsoft.com/Forums/it-IT/excelit/threads


raffygrp

unread,
Jan 25, 2010, 10:25:13 AM1/25/10
to
On 25 Gen, 15:22, "Mauro Gamberini"

non funziona, esce un mesbox di errore eche dice errore 0 oppure
errore 20 e si blocca ....

devo copiare nel range b5:c5
.......

Mauro Gamberini

unread,
Jan 25, 2010, 10:58:36 AM1/25/10
to
non funziona, esce un mesbox di errore eche dice errore 0 oppure
errore 20 e si blocca ....

devo copiare nel range b5:c5

**********************************************

Non ho capito nulla.

Il codice postato, funziona se(se):
Foglio1 ha i dati in C10:Q10
e devi incollarli nel foglio che ha il
nome riportato in B10 del Foglio1
e li incolla nelle celle Cn:Qn.

Rileggi *bene* i tuoi post e, per favore,
cerca di essere pi� chiaro.
Grazie.

--
---------------------------
Mauro Gamberini

http://social.microsoft.com/Forums/it-IT/officeit/threads


raffygrp

unread,
Jan 25, 2010, 11:05:07 AM1/25/10
to
On 25 Gen, 16:58, "Mauro Gamberini"

<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> non funziona, esce un mesbox di errore eche dice errore 0 oppure
> errore 20 e si blocca ....
>
> devo copiare nel range b5:c5
> **********************************************
>
> Non ho capito nulla.
>
> Il codice postato, funziona se(se):
> Foglio1 ha i dati in C10:Q10
> e devi incollarli nel foglio che ha il
> nome riportato in B10 del Foglio1
> e li incolla nelle celle Cn:Qn.
>
> Rileggi *bene* i tuoi post e, per favore,
> cerca di essere più chiaro.

> Grazie.
>
> --
> ---------------------------
> Mauro Gamberini
> Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/officeit/threads

Il codice postato, funziona se(se):

Foglio1 ha i dati in C10:Q10 (ESATTO )


e devi incollarli nel foglio che ha il

nome riportato in B10 del Foglio1 ( ESATTO )
e li incolla nelle celle Cn:Qn. ( cn = la prima riga vuota )


è TUTTO GIUSTO MA NN FUNZIONA


Mauro Gamberini

unread,
Jan 25, 2010, 11:01:34 AM1/25/10
to
<cut>

Aggiungo che la macro deve essere copia/incollata
in un modulo standard.

raffygrp

unread,
Jan 25, 2010, 11:16:06 AM1/25/10
to
On 25 Gen, 17:01, "Mauro Gamberini"

file, nuovo, pulito, ma nn funzina, mi dà sempre lo stesso errore...

raffygrp

unread,
Jan 25, 2010, 11:17:48 AM1/25/10
to
On 25 Gen, 17:16, raffygrp <raffy...@yahoo.it> wrote:
> On 25 Gen, 17:01, "Mauro Gamberini"
>
> <maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> > <cut>
>
> > Aggiungo che la macro deve essere copia/incollata
> > in un modulo standard.
>
> > --
> > ---------------------------
> > Mauro Gamberini
> > Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft....

Mauro Gamberini

unread,
Jan 25, 2010, 1:17:17 PM1/25/10
to
file, nuovo, pulito, ma nn funzina, mi d� sempre lo stesso errore...
**********************************************

Ma davvero? Non ci credo!
O meglio, forse non capisco io quello
che fai.

Scarica e vedi:
http://www.maurogsc.eu/prove/copiaaltrofoglio.zip


--
---------------------------
Mauro Gamberini

http://social.microsoft.com/Forums/it-IT/excelit/threads


raffygrp

unread,
Jan 26, 2010, 9:46:11 AM1/26/10
to
hai ragione, funziona , grazie mille ! ... avevo una formattazione del
mio file errata, sorry!

ho un altro problema, se puoi aiutarmi a risolvero :
nella cella a10 del foglio uno , dovrei inserire delle variabili :
capo spalla, pantalone, accessorio, calzature,

per ognuna di queste variabili ho una pagina nominata prorpio capo
spalla, pantalone, accessorio, calzature
è possibile fare una macro che a seconda del valore che inserisco
nella cella a1o del foglio 1 in automatico mi copia i valori b10:q10
nella pagina di riferimeto ?
( es. dati :
a10 =panatlone , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
panatalone
a10 =capo spalla , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
capo spalla
a10 = accessorio , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
capo spalla )

Mauro Gamberini

unread,
Jan 26, 2010, 10:26:52 AM1/26/10
to
hai ragione, funziona , grazie mille ! ... avevo una formattazione del
mio file errata, sorry!
***********************************************

Formattazione? Mah....


ho un altro problema, se puoi aiutarmi a risolvero :
nella cella a10 del foglio uno , dovrei inserire delle variabili :
capo spalla, pantalone, accessorio, calzature,

per ognuna di queste variabili ho una pagina nominata prorpio capo
spalla, pantalone, accessorio, calzature

� possibile fare una macro che a seconda del valore che inserisco


nella cella a1o del foglio 1 in automatico mi copia i valori b10:q10
nella pagina di riferimeto ?
( es. dati :
a10 =panatlone , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
panatalone
a10 =capo spalla , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
capo spalla
a10 = accessorio , b10 rosso , c10 adulto ecc - ad esecuzione della
macro i valori b10:q10 si registrano nella prima riga vuota del foglio
capo spalla )

*************************************************

Mi sfugge qualcosa....
Mi sembra che gi� ora la macro copi
nel foglio specificato in B10(la tua prima
richiesta).

Per quello che capisco(poco) � sufficente
modificare i riferimenti e quindi una cosa tipo
questa:

Public Sub m()

'gestione errori
On Error GoTo RigaErrore

'dichiaro le variabili
Dim wk As Workbook
Dim sh1 As Worksheet
Dim shX As Worksheet
Dim lNuovaRiga As Long

'metto un riferimento al workbook
'che contiene il codice
Set wk = ThisWorkbook
'metto un riferimento ai due fogli
With wk
Set sh1 = .Worksheets("Foglio1")

Set shX = .Worksheets(sh1.Range("A10").Value)
End With

'trovo la prima riga vuota in colonna B
'del foglio su cui incoller� i dati
With shX
lNuovaRiga = .Range("C" & _
.Rows.Count).End(xlUp).Row + 1
'voglio comunque partire dalla riga 5
If lNuovaRiga <= 4 Then lNuovaRiga = 5
'copio/incollo

sh1.Range("B10:Q10").Copy _
Destination:=.Cells(lNuovaRiga, 2)

End With

RigaChiusura:
'Set a Nothing delle variabili oggetto
Set shX = Nothing
Set sh1 = Nothing

Set wk = Nothing
Exit Sub

RigaErrore:
MsgBox Err.Number & vbNewLine & Err.Description
Resume RigaErrore

End Sub

Modificata qui e non testata.

raffygrp

unread,
Jan 26, 2010, 10:41:21 AM1/26/10
to
On 26 Gen, 16:26, "Mauro Gamberini"

<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> hai ragione, funziona , grazie mille ! ... avevo una formattazione del
> mio file errata, sorry!
> ***********************************************
>
> Formattazione? Mah....
>
> ho un altro problema, se puoi aiutarmi a risolvero :
> nella cella a10 del foglio uno , dovrei inserire delle variabili :
> capo spalla, pantalone, accessorio, calzature,
>
> per ognuna di queste variabili ho una pagina nominata prorpio capo
> spalla, pantalone, accessorio, calzature
> è possibile fare una macro che a seconda del valore che inserisco

> nella cella a1o del foglio 1 in automatico mi copia i valori b10:q10
> nella pagina di riferimeto ?
> ( es.  dati :
> a10 =panatlone , b10 rosso , c10 adulto ecc  - ad esecuzione della
> macro i valori b10:q10 si registrano nella prima riga vuota del foglio
> panatalone
> a10 =capo spalla , b10 rosso , c10 adulto ecc  - ad esecuzione della
> macro i valori b10:q10 si registrano nella prima riga vuota del foglio
> capo spalla
> a10 = accessorio , b10 rosso , c10 adulto ecc  - ad esecuzione della
> macro i valori b10:q10 si registrano nella prima riga vuota del foglio
> capo spalla )
> *************************************************
>
> Mi sfugge qualcosa....
> Mi sembra che già ora la macro copi

> nel foglio specificato in B10(la tua prima
> richiesta).
>
> Per quello che capisco(poco) è sufficente

> modificare i riferimenti e quindi una cosa tipo
> questa:
>
> Public Sub m()
>
> 'gestione errori
> On Error GoTo RigaErrore
>
>     'dichiaro le variabili
>     Dim wk As Workbook
>     Dim sh1 As Worksheet
>     Dim shX As Worksheet
>     Dim lNuovaRiga As Long
>
>     'metto un riferimento al workbook
>     'che contiene il codice
>     Set wk = ThisWorkbook
>     'metto un riferimento ai due fogli
>     With wk
>         Set sh1 = .Worksheets("Foglio1")
>         Set shX = .Worksheets(sh1.Range("A10").Value)
>     End With
>
>     'trovo la prima riga vuota in colonna B
>     'del foglio su cui incollerò i dati

>     With shX
>         lNuovaRiga = .Range("C" & _
>             .Rows.Count).End(xlUp).Row + 1
>         'voglio comunque partire dalla riga 5
>         If lNuovaRiga <= 4 Then lNuovaRiga = 5
>         'copio/incollo
>         sh1.Range("B10:Q10").Copy _
>             Destination:=.Cells(lNuovaRiga, 2)
>     End With
>
> RigaChiusura:
>     'Set a Nothing delle variabili oggetto
>     Set shX = Nothing
>     Set sh1 = Nothing
>     Set wk = Nothing
>     Exit Sub
>
> RigaErrore:
>     MsgBox Err.Number & vbNewLine & Err.Description
>     Resume RigaErrore
>
> End Sub
>
> Modificata qui e non testata.
>
> --
> ---------------------------
> Mauro Gamberini
> Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/excelit/threads


funziona, però non effettua la verifca dell'esisenza dei valori
inseriti, cioè se inserisco 2 volte lo stesso valore , viene
registrato per 2 volte ... non si potrebbe prevedere il lancio di un
msgbox che avverte della presenza del dato già registrato?

raffygrp

unread,
Jan 26, 2010, 10:54:46 AM1/26/10
to
> > Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft....

>
> funziona, però non effettua la verifca dell'esisenza dei valori
> inseriti, cioè se inserisco 2 volte lo stesso valore , viene
> registrato per  2 volte ... non si potrebbe prevedere il lancio di un
> msgbox che avverte della presenza del dato già registrato?- Nascondi testo citato
>
> - Mostra testo citato -

funziona, c'è il mesg box di errore sulla varibile....
sono na frana ...
per completare tutto mi occrerebbe ora una macro che mi apre un foglio
nominato come il valore in A10 foglio 1

grazie,ciao

Mauro Gamberini

unread,
Jan 26, 2010, 11:25:26 AM1/26/10
to
funziona, per� non effettua la verifca dell'esisenza dei valori
inseriti, cio� se inserisco 2 volte lo stesso valore , viene

registrato per 2 volte ... non si potrebbe prevedere il lancio di un
msgbox che avverte della presenza del dato gi� registrato?
********************************************

Cosa � *diverso* e cosa � *univoco* per te?
Voglio dire, cosa � che ti rende diversa una riga dall'altra?
Hai una colonna con un dato univoco? Quale?
Dobbiamo controllare cella per cella la riga?

Per favore considera che:

1) tu hai il tuo lavoro davanti, noi no
2) tu sai qual'� il tuo obiettivo, noi no

Grazie.


--
---------------------------
Mauro Gamberini

raffygrp

unread,
Jan 26, 2010, 11:43:57 AM1/26/10
to
capisco ....
e cerco di spiegarmi meglio , però le mie conoscenze inmerito sono
davvero molto basilari ....

foglio 1 range A1:q1 , range dove inserisco di dati
foglio 2 range A4:q200 dove ho l'elenco dei dati da controllare solo
per la colonna A

controllo sul valore univoco A1 foglio1, riportato nella colonna A
alla riga X del foglio 2 =
cerca il valore "foglio A cella A1" nella "colonna A del foglio 2" e
ne verifica la presenza nella "colonna A del foglio 2", se presente
msgbox = "valore già registrato" ed esce,
se non è presente, aprire una nuova pagina con il nome = "valore
A2" del foglio1 e copia tutti dati del range a1:q1 foglio 1
nella prima riga vuota del range A4:q200 foglio 2 ...

il mio obiettivo è controllare se un dato viene registrato 2
voltenello stesso elenco presente nel foglio 2

Mauro Gamberini

unread,
Jan 27, 2010, 4:45:30 AM1/27/10
to
il mio obiettivo � controllare se un dato viene registrato 2

voltenello stesso elenco presente nel foglio 2
****************************************

Questa funzione in un modulo standard:

Public Function f( _
ByVal vDato As Variant, _
ByRef sh As Worksheet, _
ByVal sRng As String) As Long

Dim s As String
s = "COUNTIF(" & _
sh.Name & "!" _
& sRng & _
"," & _
vDato & ")"
f = Evaluate(s)

End Function

Che richiamerai dalla tua routine che controlla se
quanto inserito in A1 del Foglio1 � gi�
presente nella colonna A del Foglio2.

Qui ti metto una macro che mostra come
richiamarla:

Public Sub m()

Dim wk As Workbook
Dim sh1 As Worksheet

Dim sh2 As Worksheet

Set wk = ThisWorkbook


With wk
Set sh1 = .Worksheets("Foglio1")

Set sh2 = .Worksheets("Foglio2")
End With

If f(sh1.Range("A1").Value, sh2, "A:A") = 0 Then
'il dato non � presente
'codice
MsgBox "non presente"
Else
'il dato � gi� presente
'codice
MsgBox "presente"
End If

Set sh1 = Nothing
Set sh2 = Nothing
Set wk = Nothing

End Sub


Tu per�, se utilizzi gi� una macro, devi
solo guardare questa parte:

If f(sh1.Range("A1").Value, sh2, "A:A") = 0 Then
'il dato non � presente
'codice
MsgBox "non presente"
Else
'il dato � gi� presente
'codice
MsgBox "presente"
End If

In pratica la funzione si aspetta tre parametri:

1) vDato, il dato che vuoi controllare
(in questo caso quello che
hai nella cella A1 del Foglio1
2) sh, che � il foglio dove controllare se il
dato esiste gi�(Foglio2 in questo caso)
3) il Range(le celle) il cui fare la ricerca
(la colonna A in questo caso)

In pratica, la stringa s che nella funzione valutiamo tramite
Evaluate avr� nell'esempio questo testo:

COUNTIF(Foglio2!A:A,ValoreDellaCellaA1DelFoglio1)

dove: ValoreDellaCellaA1DelFoglio1 sar� il valore
appunto contenuto in A1 del Foglio1.
E', per concludere, come se eseguissimo la funzione
CONTA.SE() che abbiamo a disposizione in Excel lato
celle.

Vedi un po' se riesci da solo, altrimenti chiedi sempre
in questo thread.
Grazie per l'attenzione.

raffygrp

unread,
Jan 31, 2010, 2:40:40 PM1/31/10
to
On 27 Gen, 10:45, "Mauro Gamberini"
<maurogscRIMUOV...@RIMUOVEREaliceposta.it> wrote:
> il mio obiettivo è controllare se un dato viene registrato 2

> voltenello stesso elenco presente nel foglio 2
> ****************************************
>
> Questa funzione in un modulo standard:
>
> Public Function f( _
>     ByVal vDato As Variant, _
>     ByRef sh As Worksheet, _
>     ByVal sRng As String) As Long
>
>     Dim s As String
>     s = "COUNTIF(" & _
>         sh.Name & "!" _
>         & sRng & _
>         "," & _
>         vDato & ")"
>     f = Evaluate(s)
>
> End Function
>
> Che richiamerai dalla tua routine che controlla se
> quanto inserito in A1 del Foglio1 è già

> presente nella colonna A del Foglio2.
>
> Qui ti metto una macro che mostra come
> richiamarla:
>
> Public Sub m()
>
>     Dim wk As Workbook
>     Dim sh1 As Worksheet
>     Dim sh2 As Worksheet
>
>     Set wk = ThisWorkbook
>     With wk
>         Set sh1 = .Worksheets("Foglio1")
>         Set sh2 = .Worksheets("Foglio2")
>     End With
>
>     If f(sh1.Range("A1").Value, sh2, "A:A") = 0 Then
>         'il dato non è presente

>         'codice
>         MsgBox "non presente"
>     Else
>         'il dato è già presente

>         'codice
>         MsgBox "presente"
>     End If
>
>     Set sh1 = Nothing
>     Set sh2 = Nothing
>     Set wk = Nothing
>
> End Sub
>
> Tu però, se utilizzi già una macro, devi

> solo guardare questa parte:
>
>     If f(sh1.Range("A1").Value, sh2, "A:A") = 0 Then
>         'il dato non è presente

>         'codice
>         MsgBox "non presente"
>     Else
>         'il dato è già presente

>         'codice
>         MsgBox "presente"
>     End If
>
> In pratica la funzione si aspetta tre parametri:
>
> 1) vDato, il dato che vuoi controllare
>     (in questo caso quello che
>     hai nella cella A1 del Foglio1
> 2) sh, che è il foglio dove controllare se il
>     dato esiste già(Foglio2 in questo caso)

> 3) il Range(le celle) il cui fare la ricerca
>     (la colonna A in questo caso)
>
> In pratica, la stringa s che nella funzione valutiamo tramite
> Evaluate avrà nell'esempio questo testo:
>
> COUNTIF(Foglio2!A:A,ValoreDellaCellaA1DelFoglio1)
>
> dove: ValoreDellaCellaA1DelFoglio1 sarà il valore

> appunto contenuto in A1 del Foglio1.
> E', per concludere, come se eseguissimo la funzione
> CONTA.SE() che abbiamo a disposizione in Excel lato
> celle.
>
> Vedi un po' se riesci da solo, altrimenti chiedi sempre
> in questo thread.
> Grazie per l'attenzione.
>
> --
> ---------------------------
> Mauro Gamberini
> Microsoft MVP - Excelhttp://www.riolab.org/http://www.maurogsc.eu/http://social.microsoft.com/Forums/it-IT/excelit/threads

cavoli nn riesco proprio a farla funzionare...
potresti inserirla nel file in modo che io possa fare un download?

grazie

0 new messages