Condividi:        

Excel 2010 Inserire righe in punti variabili

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 2010 Inserire righe in punti variabili

Postdi fasa » 26/08/16 13:56

ciao a tutti, sono saverio e mi sono iscritto dopo avere provato per avere un aiuto dopo avere provato a arrangiarmi da solo.
ho un problema che non riesco a risolvere; spero possiat eaiutare...

in un file excel ho 3 fogli
nel primo un semplice elenco con
LINEA_PRODOTTO CLIENTE CITTA NAZIONE
questo file viene aggiornato quotidianamente con i nuovi dati

ES
1) LINEA_1 cliente_004 parigi francia
2) LINEA_3 cliente _007 londra inghilterra
3) LINEA_1 cliente_124 torino italia
4) LINEA_2 cliente_114 venezia italia
5) LINEA_3 cliente_880 varsavia polonia
6) ....




le linee di prodotto sono 12 e fisse. Gli altri dati, ovviamente, variano

Il secondo foglio e il terzo foglio servono da report (uno ordinato per linea prodotto, l'altro per nazione).
Il report per linea prodotto ha delle righe fisse in cui c'è il logo della linea prodotto, poi sotto le informazioni generiche commerciali e sotto l'elenco dei clienti che usano quella linea

ES
1) LINEA_1 LOGO LINEA_1
2) Info linea_1
3) campi applicazione linea_1
4) "Cliente" "Città" "Nazione"
5) cliente_004 parigi francia
6) cliente_124 torino italia
7)
8) LINEA_2 LOGO LINEA_2
9) Info linea_2
10)campi applicazione linea_2
11) "Cliente" "Città" "Nazione"
12) cliente_114 venezia italia
13)
14) LINEA_3 LOGO LINEA_3
15) Info linea_3
16) campi applicazione linea_3
17) "Cliente" "Città" "Nazione"
18) cliente _007 londra inghilterra
19) cliente_880 varsavia polonia

Quello che vorrei ottenere è una macro (attivabile a mano) che quando inserisco una nuova riga per un nuovo cliente in foglio 1, automaticamente inserisca una riga in foglio 2, dopo l'ultimo record della linea corrispondente e poi ordini il tutto per "cliente"
ES: se inserisco in foglio uno , riga 6)
LINEA_1 cliente_104 genova italia

dovrebbe inserire una riga vuota in foglio 2 alla riga 7), poi copiare la riga 6 di foglio 1 e fare un incolla valori (se no perdo la formattazione) e poi ordinare le righe da 5) a 7)

Vale per tutte e 12 le linee

Il problema è che essendo dinamico non ho riferimenti "fissi" per impostare le macro.

grazie a chi avrà la pazienza di aiutarmi....
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Sponsor
 

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 26/08/16 19:20

Ciao Saverio
prova ad allegare il file (senza dati sensibili) in modo da poter valutare come è strutturato.
A mio avviso i riferimenti variabili non sono un problema nè il conseguente ordinamento.

Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi alfrimpa » 26/08/16 19:22

Ciao Saverio

Anche se sei stato dettagliato nella descrizione è meglio se alleghi un file di esempio spiegando quel che vuoi fare riferndoti a quello cioè ad una situazione concreta.

Chi volesse rispondere non è detto che voglia ricrearsi il tuo scenario da solo con ampi margini di errore.

Per allegare il file usa Filedropper o Dropbox.

Oops Mario scusa ci siamo sovrapposti.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 28/08/16 16:16

ciao a entrambi e grazie per il suggerimento

ecco un file di esempio
http://www.filedropper.com/2492896898_1

spero possiate aiutarmi
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 29/08/16 08:55

Ciao Fasa
qualche precisazione:
1) ti interessano solo le tre voci: PRODOTTI CERTIFICATI IATA - PRODOTTI OMOLOGATI UL - PRODOTTI NON CERTIFICATI oppure ve ne sono degli altri (attento, poi, che i nomi devono essere scritti bene, cioè "prodotti" e non "prdotti")
2) la struttura non deve presentare righe vuote dopo uno dei nomi suddetti: in Foglio Elenco Clienti la riga 7 non deve essere vuota mentre può e deve esserlo quella prima dell'indicazione prodotto: per es. riga 11, riga 17.
3) quando inserisci un prodotto nel Foglio Clienti deve esserci una colonna (magari con convalida dati) che ti dia la possibilità di scegliere il tipo di linea (cioè una delle voci di cui al punto 1)
4) l'inserimento dei dati in Foglio Clienti non deve presentare righe vuote (penso che lo spazio da riga 12 a 16 sia dovuto a necessità di spiegazione).

Aspetto tue notizie. Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 29/08/16 09:49

Ciao Mario,
grazie per l'interessamento.
Nel file non ci sono errori di battitura (i dati vengono presi esclusivamente da menu a tendina) ed è attiva anche un afunzione di convalida.
Risponendo alle tue domane:
1) Le categoria di prodotto, oltre alle 3 che citi, sono in totale 18, ma già predeterminate
2) ok per eliminare la riga vuota dopo la categoria prodotto e relative specifiche (quindi ok per eliminare righe come la 7)
3) il foglio clienti ha la convalida dati come dici, sia per la Linea prodotto, che per la nazione (ognuno se no la scrive come gli pare)
4) Il foglio clienti non ha e non avrà linee vuote. (Hai visto giusto, era solo per inserire commenti)

Ciò detto ti viene in mente qualcosa che faccia al mio caso?
grazie!!
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 29/08/16 14:48

Ciao fasa
Allego il tuo file in cui ho apportato le seguenti modifiche (poi starà a te adattarlo alle tue esigenze):

Foglio Clienti
- ho bloccato le prime 2 righe
- ho inserito un pulsante in alto a sinistra a cui ho associato la macro
- ho denominato le righe I3:I20 col nome "tipo"

Quando inserisci i dati scegli in base alla convalida dati in col.A (io l'ho fatto fino alla riga 30), poi gli altri dati e RIMANENDO NELLA RIGA (se hai inserito i dati, per esempio, nella riga 20 seleziona una casella delle colonne A:F) e poi clicca sul pulsante. I dati di quella riga vengono inseriti nell'ultima riga (quella vuota) del tipo (quello in col.A)

Il codice della macro è il seguente:
Codice: Seleziona tutto
Option Explicit

Sub Inserisci()
Dim wks1 As Worksheet, wks2 As Worksheet
Dim i As Long, tp As String, dt As String, uriga As Long, irow As Long, frow As Long
Set wks1 = Sheets("Clienti")
Set wks2 = Sheets("Elenco clienti per prodotto")
tp = wks1.Range("A" & ActiveCell.Row)
dt = "B" & ActiveCell.Row & ":F" & ActiveCell.Row
uriga = wks2.Cells(Rows.Count, 1).End(xlUp).Row
irow = Application.WorksheetFunction.Match(tp, wks2.Range("A1:A" & uriga), 0) + 1
For i = irow To uriga
    If wks2.Cells(i, 1) = "" Then
        frow = i: Exit For
    ElseIf i = uriga Then
        frow = i + 1
    End If
Next i
wks2.Rows(frow).Insert (xlShiftDown)
wks1.Range(dt).Copy
wks2.Cells(frow, 1).PasteSpecial Paste:=xlPasteValues
Set wks1 = Nothing
Set wks2 = Nothing
Application.CutCopyMode = False
End Sub


https://www.dropbox.com/s/ush035qulw2ygza/InserimentoVariabile.xlsm?dl=0

Prova e fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 29/08/16 15:35

grazie Mario.
Provato subito! Ma non va

Ok per rimanere nelle righe (nascondo il resto del foglio ed è fatto)

Però da Errore di runtime 1004
Impossibile trovare la proprietà match per la classe WorksheetFunction

Pagina di debug, riga evidenziata è la seguente:

irow = Application.WorksheetFunction.Match(tp, wks2.Range("A1:A" & uriga), 0) + 1


Quello che vorrei è inserire magari 4/5 nuovi record in clienti e poi, tramite la macro, ritrovarmi tutte le righe aggiunte, al loro posto, nel report.

E' una cosa fattibile secondo te?
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 29/08/16 18:14

Ciao
hai provato il file che t'ho allegato e va in errore! Non è possibile se lo hai lasciato così come l'ho inviato.
Riprova e fai sapere.

Se, come credo, dovesse andar bene allora adattalo alle tue esigenze (cioè copia la macro e inseriscila nel tuo file) ma attento perchè per poter trovare le righe in maniera variabile alcuni riferimento sono "fissi" (nel senso che devono puntare sempre alla stesso posto).

Fai sapere come è andata.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 29/08/16 18:26

Ciao
Forse ho capito perchè ti dà quell'errore. Quando clicchi sul pulsante inserisci qual'è la cella attiva?
La cella attiva DEVE essere una cella non vuota della riga che vuoi inserire (in altre parole deve essere selezionata una cella dell'intervallo A:F).
Se la cella è vuota va in debug (si può eventualmente aggiustare con facilità).
Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 30/08/16 07:28

Mario, grazie per spiegazione.
Se sono effettivamente in una riga con dati la macro funziona.
Fuori di essa no.
Se aggiungo più righe e poi uso il pulsante mi inserisce solo la riga sulla quale sono posizionato e se clicco per sbaglio (o per dimenticanza) 2 volte inserisce due volte la stessa riga.
Se si riuscisse a eliminare queste due problematiche sarei felice.....
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 30/08/16 09:11

Ciao fasa
allego (per l'ultima volta :lol: :lol: ) il file.
Ho inserito una colonna (la col.B che se vuoi puoi nascondere) per segnalare se un dato è già stato inserito. Ho ricostruito la macro per come ti serve, cioè:
- ovunque tu sia posizionato (vuota o non vuota) la macro controlla quali sono le ultime righe impegnate di col.A e col.B; se c'è differenza registra SOLO le righe in cui la col.B è vuota (ti suggerisco di nasconderla in quanto a te non serve e SE PER ERRORE venisse riempita quella riga non verrebbe registrata).
La nuova macro è questa:
Codice: Seleziona tutto
Option Explicit

Sub Inserisci()
Dim wks1 As Worksheet, wks2 As Worksheet
Dim i As Long, tp As String, dt As String, irow As Long, frow As Long, k As Long
Dim uriga As Long, uriga1 As Long, uriga2 As Long
Set wks1 = Sheets("Clienti")
Set wks2 = Sheets("Elenco clienti per prodotto")
Application.ScreenUpdating = False
uriga1 = wks1.Cells(Rows.Count, 1).End(xlUp).Row
uriga2 = wks1.Cells(Rows.Count, 2).End(xlUp).Row + 1
    For k = uriga2 To uriga1
        uriga = wks2.Cells(Rows.Count, 1).End(xlUp).Row
        tp = wks1.Range("A" & k)
        dt = "C" & k & ":G" & k
        If wks1.Cells(k, 2) <> "" Then
            MsgBox "Dato già inserito", 0 + 16, "Errore"
            Exit Sub
        End If
        irow = Application.WorksheetFunction.Match(tp, wks2.Range("A1:A" & uriga), 0) + 1
        For i = irow To uriga
            If wks2.Cells(i, 1) = "" Then
                frow = i: Exit For
            ElseIf i = uriga Then
                frow = i + 1
            End If
        Next i
        wks2.Rows(frow).Insert (xlShiftDown)
        wks1.Range(dt).Copy
        wks2.Cells(frow, 1).PasteSpecial Paste:=xlPasteValues
        wks1.Cells(k, 2) = "è"
1   Next k
Set wks1 = Nothing
Set wks2 = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Inserimento eseguito"
End Sub


https://www.dropbox.com/s/o47059ujekd31ee/InserVariab_2.xlsm?dl=0

Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 31/08/16 08:31

Grazie Mario!
va alla grande ed è perfetto. Mi fai sentire in colpa per avere chiesto tanto...
Sto cercando di capire la sintassi per usarlo anche sul secondo foglio del medesimo file.

uriga1 = wks1.Cells(Rows.Count, 1).End(xlUp).Row #va all'ultima riga in basso e torna su (CTRL + FrecciaSu)
uriga2 = wks1.Cells(Rows.Count, 2).End(xlUp).Row + 1 #va all'ultima riga in basso e torna su (CTRL + FrecciaSu); perché 2 volte?
For k = uriga2 To uriga1 #imposta variabile (giusto?)
uriga = wks2.Cells(Rows.Count, 1).End(xlUp).Row #va all'ultima riga in basso e torna su (CTRL + FrecciaSu) (Ancora?
tp = wks1.Range("A" & k) #questa riga non ho capito cosa definisce
dt = "C" & k & ":G" & k #questa riga non ho capito cosa definisce
If wks1.Cells(k, 2) <> "" Then #ok, se cella piena ....
MsgBox "Dato già inserito", 0 + 16, "Errore" #allora MSG, ma perché 0+16 ? "errore?
Exit Sub
End If
irow = Application.WorksheetFunction.Match(tp, wks2.Range("A1:A" & uriga), 0) + 1 #questa riga non la comprendo
For i = irow To uriga #definisce I come range da riga "i" a colonna "u" (intese come variabili)?
If wks2.Cells(i, 1) = "" Then #ok....
frow = i: Exit For #da qui in po, fino a a end if non è chiaro.
ElseIf i = uriga Then
frow = i + 1
End If
Next i
wks2.Rows(frow).Insert (xlShiftDown)
wks1.Range(dt).Copy
wks2.Cells(frow, 1).PasteSpecial Paste:=xlPasteValues
wks1.Cells(k, 2) = "è"
1 Next k
Set wks1 = Nothing
Set wks2 = Nothing
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Inserimento eseguito"


grazie 1000. A buon rendere (non x VBA, al momento)
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31

Re: Excel 2010 Inserire righe in punti variabili

Postdi Marius44 » 31/08/16 17:45

Ciao fasa
rispondo alle tue richieste, riga dopo riga (se la tua risposta è giusta, salto)
2 - L'individuazione dell'ultima riga non è doppia: la prima "legge" la colonna A (num.1); la seconda la colonna B (num.2)
3 - imposta "un ciclo" dalla riga individuata da uriga2 fino a uriga1
4 - non ancora!! quelli di prima erano su wks1, questa individua wks2 cioè il secondo foglio
5 - tp è la variabile che assume il testo contenuto in wks1.Range("A" & k), cioè la cella di Foglio1, colonna A riga dopo riga
6 - dt "copia" il contenuto delle cella di Foglio1 dalla colonna C alla colonna G (riga di cui sopra)
8 - cerca nella guida di VBA MsgBox. Lo 0 fa apparire il pulsante OK, il 16 ti mostra la X rossa, Erroe è il titolo del MsgBox
11 - irow ecc. - richiam la funzione CONFRONTA e mi indica il numero di riga che mi interessa
12 - no, è un altro ciclo dalla riga individuata come sopra fino all'ultima riga di Foglio2 (wks2)
13-17 - individuano l'ultima riga con quel codice cercato
Spero di averti chiarito qualche dubbio e non di averti ... incasinato di più.
Ciao,
Mario
Marius44
Utente Senior
 
Post: 659
Iscritto il: 07/09/15 22:00

Re: Excel 2010 Inserire righe in punti variabili

Postdi fasa » 01/09/16 14:40

Grazie per la pazienza Mario.

Non ho capito tutto e non tutto mi è chiaro.
Ho utilizzato quanto capito per fare la macro che sistemasse il secondo foglio.

(poi ne ho dovuto fare altre due che sistemassero i risultati via via ottenuti e le ho concatenate). Ancora qualcosa non quadra, ma conto di capire e arrangiarmi.
Grazie ancora
fasa
Newbie
 
Post: 7
Iscritto il: 26/08/16 13:31


Torna a Applicazioni Office Windows


Topic correlati a "Excel 2010 Inserire righe in punti variabili":


Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti