IALweb Homepage
Forum Home Forum Home > MS Office > Microsoft Office > Microsoft Excel
  New Posts New Posts RSS Feed - [RISOLTO] Modif.macro riferimenti riga relativi
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

REGISTRATEVI su IALWeb forum! E' facile e veloce! Potrete consultare tutte le sezioni del forum senza restrizioni e scrivere per dare o richiedere aiuto.
Votaci in Net-Parade

[RISOLTO] Modif.macro riferimenti riga relativi

 Post Reply Post Reply Page  12>
Author
Message
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Topic: [RISOLTO] Modif.macro riferimenti riga relativi
    Posted: 17/Feb/2017 at 14:51
Ciao, mi chiamo Andrea e sono nuovo. 
Uso le macro ma non conosco a fondo il codice VBA. Il mio problema è il seguente:
utilizzo delle macro del tipo 
Sub Copia_dati()
    Range("J1187:J1194").Select
    Selection.Copy
    Range("K1187:K1194").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
End Sub
quando è stata registrata non fu utilizzato il riferimento relativo, pertanto se nel foglio vengono inserite righe o colonne, la macro esegue i comandi senza aggiornare la posizione delle celle   Range("J1187:J1194") e Range("K1187:K1194"). 
Sto cercando un modo per imporre la modifica di tutte le macro (e sono tante) del foglio di lavoro in modo che il posizionamento di ognuna sia relativo e non assoluto, tale preservarne il funzionamento anche in caso di inserimento o cancellazione di righe o colonne nel foglio di lavoro.
in anticipo ... grazie! Big smile
Aqvila


Edited by AQVILA - 22/Feb/2017 at 14:11
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 7193
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 17/Feb/2017 at 16:17

Ciao e benvenuto nel forum

Per conoscere l'ultima riga di una colonna, per esempio in uno dei tuoi casi la col. J, usa una variabile calcolata nel seguente modo:

uRiga=Range("J" & Rows.Count).End(xlUp).Row

poi

Range("J1187:J"&uRiga).Select

ecc..ecc

saluti

domenico
win 10- office 2010
Back to Top
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Posted: 17/Feb/2017 at 17:03
Ciao e grazie del benvenuto e della risposta. 
Se ho letto bene la tua soluzione nell'esempio fatto con quel comando identifico il range partendo da J1187 (fisso) fino all'ultima riga utilizzata, "mobile" in funzione di inserimenti di dati sotto la posizione 1187. 
Forse non no compreso io la tua soluzione, o forse era la mia domanda a non essere chiara.  la mia macro copia e incolla il testo che trova in un range di celle (da J1187 a J1194) nel medesimo range di una colonna diversa. Il problema è che devo aggiungere righe SOPRA la riga 1187 (ad esempio 10 righe inserite in qualunque punto tra riga 1 e riga 1186 con comando "inserisci riga" o "inserisci righe copiate"). Dopo l'inserimento il range che voglio copiare con la macro si sposta di +10 righe (nell'esempio da J1197 a J1204), ma la macro continua a lavorare su riga 1187 a 1194. quindi sto cercando un comando per:
1) modificare manualmente tutti i range delle macro, una per una, in modo che si adattino all'inserimento di righe nel foglio di lavoro (in pratica passino da un posizionamento assoluto a uno relativo)
2) oppure (sarebbe fantastico) un comando che modifichi in automatico tutte le coordinate (range) di tutte le macro del foglio di lavoro da assolute in relative.
Wacko
grassssssieeeeeeee!
 
Back to Top
dodo47 View Drop Down
Moderatore
Moderatore
Avatar

Joined: 29/Dic/2008
Location: Italy
Status: Offline
Points: 7193
Post Options Post Options   Thanks (0) Thanks(0)   Quote dodo47 Quote  Post ReplyReply Direct Link To This Post Posted: 17/Feb/2017 at 18:26

Ciao

parlando di "aggiungere" righe avevo inteso sotto e non sopra.

Ciò detto mi sembra di capire che entrambi i "poli" del range siano variabili: sia J1187 (che può essere anche J1) sia J1194 (che può essere anche Jxxxx), pertanto ti occorre la prima riga piena della colonna J e l'ultima riga piena sempre della colonna J......Ho capito ??

saluti



Edited by dodo47 - 17/Feb/2017 at 18:27
domenico
win 10- office 2010
Back to Top
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Posted: 17/Feb/2017 at 18:49
ciao,
grazie della pazienza... non so bene se io non ho capito la tua domanda o se tu non hai capito la mia.. :-)))
mi occorre che tutto il range imposto in macro si "sposti" in funzione di inserimenti di riga (o di colonna).
esempio se ho la cella J1186 su cui insiste la macro (ad esempio quella indicata prima), se inserisco una riga prima della 1186 e una colonna a sinistra della J, mi aspetto che la macro preesistente lavori sulla nuova cella K1187 (si è spostata di +1 sia di riga che di colonna).
:-)
Back to Top
Ricky53 View Drop Down
Amministratore
Amministratore
Avatar
Esperto di Excel e PowerPoint

Joined: 05/Ott/2006
Location: Italy
Status: Offline
Points: 15851
Post Options Post Options   Thanks (0) Thanks(0)   Quote Ricky53 Quote  Post ReplyReply Direct Link To This Post Posted: 18/Feb/2017 at 00:02

Ciao,

penso che tu non abbia capito quanto ti ha chiesto Dodo ... a me è chiaro ... però sono abituato a quesiti esposti in modo poco chiaro e ...poi con Dodo ormai, dopo anni di frequentazione sui forum, abbiamo raggiunto una sintonia.

Provo a porre la domanda in altro modo ...  non sono sicuro di riuscirci.

Tu hai un intervallo di dati che riga 1187-1194 con dati (forse formule) e vuoi trasformare questo intervallo in "valori"

La questione è che la riga 1187 può variare in aumento perchè tu DEVI aggiungere delle righe prima della 1187 e quindi l'istruzione di  "copy"  della tua macro non "funzionerebbe bene" perché copierebbe sempre dalla riga 1187 in avanti.

E' necessario fare in modo che questa riga cambi quando tu aggiungi righe!


E' così?

Bene allora quello che occorre sapere è come determini la riga 1187 di partenza.

Ci sono regole, condizioni, ... altro che ci consenta di rendere "variabile" il suo valore?






Edited by Ricky53 - 18/Feb/2017 at 00:03
AMMINISTRATORE

Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione
Back to Top
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Posted: 18/Feb/2017 at 01:21
ciao ricky. grazie della domanda e..... ops... sorry, la mia risposta a DODO non voleva essere irrispettosa, ci mancherebbe... se è stata mal interpretata "Dodo, I beg your pardon".... cmq non avevo capito Cry ....che avete inquadrato il problema. 
la mia risposta (forse) semplifica la portata della domanda: 
1) la macro che ho indicato è solo una delle tante e tutte fanno cose diverse. 
2) ho preso ad esempio quella perchè è semplice ma il tema è uguale per tutte (in particolare quella indicata serve a bypassare un riferimento circolare senza attivare il calcolo iterativo di excel),  
3) no, non ci sono ne regole ne condizioni di "puntamento": tutte le macro lavorano con un range fisso, che non si muove al variare di alcuna condizione (cioè non è un elenco che si incrementa, se ho capito la tua domanda): Il range non si muove, è statico, ed è indipendente dalla macro stessa o da altre macro. 
4) per semplicità lo contestualizzo: i range sono le righe di totalizzazione di valori esposti in una tabella (in concreto un bilancio di esercizio), con una struttura fissa. 
5) devo far "spostare" il range "nel codice della macro" (come si trattasse di un "riferimento relativo" di una formula) nel solo caso in cui le sue coordinate nel foglio si siano mosse per inserimento/eliminazione manuale di righe all'interno dell'intervallo (e/o più raramente di colonne) o per cut/paste di intere colonne o righe. 
Ma la struttura dell'intervallo è "discreta", cioè è "finita" (tot righe e tot colonne che non variano di posizione mai, almeno fino a che non inserisco/elimino/sposto manualmente una o + righe o colonne che facciano cambiare coordinata alla cella / riga del totale. 
ho scritto un tema e potevo forse solo rispondere "NO non ci sono regole o condizioni" hihi Sleepy
ciao
Ps: grazie...... 

Back to Top
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Posted: 18/Feb/2017 at 01:27
ps:  alla tua domanda "Tu hai un intervallo di dati che riga 1187-1194 con dati (forse formule) e vuoi trasformare questo intervallo in "valori" la risposta è si nel caso di quella macro, ma già lo fa. il tema non è il codice della macro ma come modificarla per relativizzarla in riferimento alle coordinate del Range.

La questione è che la riga 1187 può variare in aumento perchè tu DEVI aggiungere delle righe prima della 1187 e quindi l'istruzione di  "copy"  della tua macro non "funzionerebbe bene" perché copierebbe sempre dalla riga 1187 in avanti.

E' necessario fare in modo che questa riga cambi quando tu aggiungi righe!"

la risposta è SI ESATTAMENTE QUESTO

Clap
Back to Top
Ricky53 View Drop Down
Amministratore
Amministratore
Avatar
Esperto di Excel e PowerPoint

Joined: 05/Ott/2006
Location: Italy
Status: Offline
Points: 15851
Post Options Post Options   Thanks (0) Thanks(0)   Quote Ricky53 Quote  Post ReplyReply Direct Link To This Post Posted: 18/Feb/2017 at 17:13

Ciao,

quello che ci chiedevi di fare con la macro era chiaro già da prima, comunque hai fatto bene e riesplicitarlo.


La mia domanda ... tradotta ... era:

come faccio a sapere di quante righe si è spostata la riga 1187, e si è spostata in alto o in basso in seguito a cancellazioni o inserimenti di righe?

Proprio per questo motivo ti chiedevo se esistevano regole per poter "CALCOLARE" la nuova posizione della riga 1187


Senza condizioni/regole NON si può fare nulla perché si deve sapere quali sono stati gli spostamenti a meno di ... fare (FORSE) una cosa complessa e rischiosa ... per tentare ci devi inviare in file di esempio, senza dati riservati, ma che SIA REALE

AMMINISTRATORE

Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione
Back to Top
AQVILA View Drop Down
Utente Base
Utente Base
Avatar

Joined: 17/Feb/2017
Location: milano
Status: Offline
Points: 50
Post Options Post Options   Thanks (0) Thanks(0)   Quote AQVILA Quote  Post ReplyReply Direct Link To This Post Posted: 18/Feb/2017 at 19:16
Ciao, se intendi se c'è una regola di spostamento predeterminata, no non c'è una regola che consenta di prevedere. Se invece invece si potesse codificare una ricerca di una particolare funzione o formula all'interno del foglio indicando che quella nuova coordinata e' la nuova posizione, allora si, potrebbe esserci un elemento pivot da utilizzare. Una domanda: Ma esiste la possibilità di creare una macro che scriva macro?
Grazie e ciao
Domani allego il file
Back to Top
 Post Reply Post Reply Page  12>
  Share Topic   

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 10.17
Copyright ©2001-2013 Web Wiz Ltd.

This page was generated in 0,078 seconds.