Condividi:        

[EXCEL] Convalidare elenchi e tabelle contemporaneamente

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

Postdi nikfitz » 02/07/07 00:49

:!: E' proprio di questo che si tratta, questo è il look che deve avere nel foglio1. Il mio problema è capire come i dati si possano mappare nella scheda che ripeto ha quest'aspetto. I dati non li decido io.
Immagine
per farla breve questa è la scheda che mi deve apparire nel foglio1. Ha poca importanza quali siano i dati, diciamo che siano dei numeri così disposti. Come faccio a far comparire ogni numero nella cella corrispondente? Ho capito che li devo archiviare nel foglio2 ma non mi è chiaro come prenderli e portarli nelle caselle corrispondenti che sono discontinue. Ciao anche stasera si è fatto tardi.............
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Sponsor
 

Postdi Anthony47 » 02/07/07 13:32

Ciao, come ti ho detto preferirei lavorare sul foglio vero; se lo puoi inviare sai come fare.
Altrimenti giriamo a vuoto...
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 02/07/07 14:56

Grazie, tieni questo per buono, quello vero non te lo posso mandare(neanche privatamente). Qualsiasi cosa si riesca a fare con questo mi va bene, altrimenti non fa nulla apprezzo comunque la tua disponibilità. Ciao ;)
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 02/07/07 18:46

Ma io non ho il tempo per ricostruire il foglio, soprattutto lo schema di foglio2 con dati e foto.
Ti do' allora ancora qualche suggerimento su cui devi lavorare tu:
-se le schede (su foglio2) non sono tante, puoi farti un indice: in AA1 metti l' indirizzo dell' angolo sx della scheda1, in AA2 quello di scheda2, etc
-fatto l' indice, nella cella precedente, quindi Z1 e sottostanti, ti fai l' elenco dei nominativi usando la formula
Codice: Seleziona tutto
=INDIRETTO(SCARTO(AA1;0;9))
pero' non giuro che l' offset di colonna sia corretto, va collaudato sul foglio.
-in questo modo ti ricrei l' elenco degli atleti (Z1 e sottostanti): dai un nome al range e userai questo nome nella cella di foglio1 soggetto a convalida
-in una cella di foglio1, supponiamo Z1, ti ricalcoli l' indirizzo della scheda: userai qualcosa come
Codice: Seleziona tutto
=CERCA.VERT(A1;Foglio2!Z1:AA20;2;0)
se A1 e' la cella soggetta a convalida.

-poi userai una macro, ad esempio:
Codice: Seleziona tutto
Sub nikkkkkkk()
SkAdd = Range("Z1").Value                   '<<<- Z1 come da esempio
Sheets("Foglio2").Select
Range(SkAdd).Range("A1:AH19").Copy   '<<<- Nota 1
Sheets("Foglio1").Select
Range("F6").Select                                '<<<-Nota 2
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub


Nota 1: A1:H19 e' quanto posso intuire dai disegni, va collaudata sul foglio
Nota 2: F6 e' la posizione della scheda su Foglio1, secondo un vecchio post; non so se e' ancora valido.

La macro fa quello che ti dissi qualche gg fa: prende la scheda da foglio2 e la incolla su foglio1, con tutti i dati e con tutti i formati.

Fai sapere.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 02/07/07 19:45

:) Ti ringrazio, vedo cosa viene fuori.
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 03/07/07 11:45

:aaah :evil: Non ci riesco, le schede sono troppe. Ti ho mandato tramite mp il file su cui sto lavorando.
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 03/07/07 16:27

??
Forse e' la mail con testo "Guarda se ci capisci qualcosa. Grazie" MA SENZA allegati delle 12:45 circa.

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

Tabelle ed elenchi

Postdi By Sal » 04/07/07 07:13

Ciao Anthony e nikfizt, per Anthony, lo so che cerchi di far capire il problema di un archivio dati a nikfitz, ma non potresti creare l'archivio dati in un foglio e poi in un'altro foglio fare la formattazione delle tabelle che in base al nome carica i dati nella tabella compreso la foto con un cerca.vert(), cosi si avrà un foglio dei nomi che lui desidera.
O non ho capito tutto il problema, Ciao Sal
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 83
Iscritto il: 27/08/06 14:40

Ancora una cosa

Postdi By Sal » 04/07/07 07:16

Quante schede vanno in un foglio? Ciao :)
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 83
Iscritto il: 27/08/06 14:40

Postdi nikfitz » 04/07/07 09:54

:D Grazie per l'intresse che mostrate. Ho inviato il file a Anthony tramite hotmail, visto che interfree non è affidabile. Penso che lui abbia capito il problema. La scheda che deve comparire su foglio1 è una sola, proprio come dice Sal. Quello che non riesco a fare è organizzare dati e foto in modo da poterli richiamare e metterli nel formato della scheda. Comunque la stiamo tirando alla lunga, se vi annoio lasciamo perdere e passiamo ad altro. Se invece volete condividere il file fatemi sapere tramite mp i vostri indirizzi, almeno così non stressiamo Anthony. Ciao :D :D
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 04/07/07 13:12

Ciao Sal, ciao nickfiz.
Intanto ho ricevuto il file esempio: e' esattamente come descritto nei vari post, e penso che la macro gia' postata sara' il cuore della soluzione.
Aggiungero' solo un pezzo diciamo di "inventario schede" per creare l' elenco delle schede e raccogliere la loro posizione.

Ho capito che uno dei problemi di nickfiz e' che non e' lui che controlla il formato dati.

Per nickfiz: stai tranquillo, partecipo a questo forum solo per piacere e passione; non mi stresso facilmente...

Ciao a tutti, Sal torna piu' spesso.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Anthony47 » 04/07/07 22:40

Rieccomi…
E’ corretto che su Foglio2 ogni gruppo di schede in orizzontale e’ una squadra?
Ti propongo quindi la seguente soluzione.

Su foglio1 inserisci due celle con convalida, una per selezionare la squadra e una per selezionare l’ atleta della squadra.
Nel mio schema ho inserito queste celle in B5 (scegli squadra) e in D5 (scegli atleta).
Per B5 userai la Convalida Elenco, e come origine segnarai
Codice: Seleziona tutto
=Squadre

Per D5 userai sempre Elenco, e come origine segnarai
Codice: Seleziona tutto
=indiretto(B5)

Potrai pero’ inserire la convalida solo dopo aver eseguito la macro di inventario.

Sempre si foglio1 inseriamo 2 celle di servizio, che io ho messo in AT1 e AU1, con le formule
AT1
Codice: Seleziona tutto
=CERCA.VERT(B5;SCARTO(Squadre;0;0;30;2);2;0)

AU1
Codice: Seleziona tutto
=CONFRONTA(D5;INDIRETTO(B5);0)

Queste celle servono per puntare alla scheda su Foglio2; inoltre AU1 puo’ servire per la formattazione condizionale di D5, con la condizione “la formula è”, la formula =VAL.ERRORE($AU$1) e come formato un “Motivo” (sfondo cella) rosso. Il rosso serve per evidenziare che bisogna completare il ciclo di selezione squada /Atleta. Magari su D5 aggiungi un secondo livello di formattazione condizionale con “motivo” arancione, con la condizione “il valore della cella è” e negli spazi accanto “diverso da” e =P5 Questo indica che la scheda e’ ancora da aggiornare.

Poi ho costruito 2 macro.
La prima fa l’ inventario delle schede disponibili, delle squadre, la loro posizione sul foglio, gli atleti per singola squadra.
Il codice:
Codice: Seleziona tutto
Sub invent()

'    DEFINIZIONI
SkRoot = "C1"      '<< "radice" delle schede
SkAdr = "A1:AI18"  '<< Dimensione della scheda
SkPerRow = 5       '<< N° di schede per riga
TeamCol = 1        '<< Colonna in cui si trova il NOME SQUADRA; 1=A, 2=B, etc

SkCols = Range(SkAdr).Columns.Count
SkRows = Range(SkAdr).Rows.Count
Sheets("Foglio2").Select
Set SubRange = Application.Intersect(Range(ActiveSheet.UsedRange.Address), Range("c1:FU1000"))
'Calcolo dell' area in cui si fara' l' elenco e composizione Squadre
TeamList = Cells(1, SkPerRow * SkCols + 10).Address
Range(TeamList).Select
   'Verifica se si puo' azzerare
   Rispo = MsgBox("Posso cancellare l' elenco e la composizione delle Squadre?", vbYesNo)
   If Rispo = vbNo Then GoTo Niente
Range(TeamList).Range("A1:Z30").ClearContents


'Calcola il nuovo elenco / composizione Squadre
For J = 0 To 30    'Max 30 Squadre
Range(SkRoot).Offset(J * SkRows, I * SkCols).Select
If ActiveCell.Value = "" Then Exit For

CTeam = Cells(ActiveCell.Row, TeamCol).Value         'Squadra corrente
Cells(ActiveCell.Row, TeamCol).Copy _
   Destination:=Range(TeamList).Offset(100, 0).End(xlUp).Offset(1, 0)
Range(TeamList).Offset(100, 0).End(xlUp).Offset(0, 1).Value = ActiveCell.Address

For I = 0 To SkPerRow - 1
  Range(SkRoot).Offset(J * SkRows, I * SkCols).Select
  ActiveCell.Offset(0, 1).Copy _
     Destination:=Range(TeamList).Offset(100, J + 2).End(xlUp).Offset(1, 0)
Next I
  Range(Range(TeamList).Offset(1, J + 2), Range(TeamList).Offset(100, J + 2).End(xlUp)).Name = CTeam
  I = 0
Next J

Range(Range(TeamList).Offset(1, 0), Range(TeamList).Offset(100, 0).End(xlUp)).Name = "Squadre"
Niente:
Application.Goto Reference:=Range(TeamList), scroll:=True
End Sub


Le DEFINIZIONI che trovi sono derivate dall’ esempio inviatomi; se non ti quadrano, o se vengono cambiate, adegua le definizioni. Per qualche settimana mantengo copia del foglio, nel caso che tu abbia qualche domanda in merito.

Puo’ essere eseguita piu’ volte, e gli elenchi costruiti vengono azzerati prima del calcolo dei nuovi elenchi. Potresti associare la macro a un pulsante su Foglio1.

La seconda macro sceglie la scheda dell’ atleta e la incolla su Foglio1, cancellando prima la foto se presente.
Il codice:

Codice: Seleziona tutto
Sub nikkk()
' Definizioni
SkRoot = "C1"      '<< "radice" delle schede
SkAdr = "A1:AI18"  '<< Dimensione della scheda
SkDest = "G5"      '<< Destinazione della scheda su Foglio1

SkCols = Range(SkAdr).Columns.Count
SkRows = Range(SkAdr).Rows.Count

Sheets("Foglio1").Select
RigaSk = Range("AT1").Value
OffAtl = Range("AU1").Value
If Not IsError(OffAtl) Then GoTo Proced
 MsgBox ("Completare la selezione di Squadra e Atleta!" & vbCrLf & vbCrLf & "Abortito")
 Exit Sub

Proced:

'Azzera le Immagini
On Error Resume Next
For Each Pict In ActiveSheet.Shapes
  NomeImm = Pict.Name
  ActiveSheet.Shapes(NomeImm).Select
  If Left(NomeImm, 7) = "Picture" Then Selection.Delete
Next Pict
   
On Error GoTo 0
Sheets("Foglio2").Select
Range(RigaSk).Offset(0, SkCols * (OffAtl - 1)).Range("A1").Select
Selection.Range(SkAdr).Select
Selection.Copy Destination:=Sheets("Foglio1").Range(SkDest)
Sheets("Foglio1").Select
End Sub



Su Foglio2 ci sono innumerevoli lineette (…oltre 4000) di dimensione microscopica, non ho capito la loro funzione; se ti interessa toglierle puoi usare una macro come

Codice: Seleziona tutto
Sub pippo()
For Each Pict In ActiveSheet.Shapes
NomeImm = Pict.Name
If Left(NomeImm, 4) = "Line" Then
   ActiveSheet.Shapes(NomeImm).Select
   Selection.Delete
End If
I = I + 1       'Contatore
Next Pict
MsgBox ("Totale " & I & " forme")
End Sub


(SEMPRE 2 copie di backup, prima)

Prova il tutto e fai sapere…
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 05/07/07 11:01

Ti propongo quindi la seguente soluzione.

;) Grazie Anthony, non sarei mai arrivato alla costruzione di questi codici perchè sono alla "abc di vb". Perciò ho bisogno di studiarmi riga per riga la tua soluzione. Potresti inviare il file o metterlo sul forum, così faccio prima Grazie. Scusa se faccio lo scroccone, é più complicato di quello che pensavo. Ciao
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 05/07/07 13:09

:D OK sono riuscito a farlo funzionare (è già un traguardo per me). Grazie. Continuerò a studiarci sopra. Grazie mi sei stato di grande aiuto.
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 05/07/07 13:14

Bravo!

Stasera mettero' su freefilehosting il tuo file su cui ho fatto un paio di ulteriori modofiche secondarie, come da post delle 12, salvo diverse informazioni tue.

ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19441
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi nikfitz » 05/07/07 16:14

Ciao, le domande sarebbero tante, vediamo di sintetizzarle alla prima macro:
1)Cos'è la radice di una scheda?
2)sk prima dei riferimenti root,adr,perrow, ecc. cosa sta a significare?
3)Ho fatto alcune modifiche, mi confermi che siano corrette?
a)volendo inserire altri giocatori per squadra ho modificato
Codice: Seleziona tutto
SkPerRow = 6       '<< N° di schede per riga
(poi aggiunto le schede)
b)volendo creare spazio tra le schede e l'organizzazione dati su foglio2 ho modificato
Codice: Seleziona tutto
TeamList = Cells(1, SkPerRow * SkCols + 10).Address

4)che modifiche al codice devo apportare per organizzare 60 squadre?
Grazie.
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi Anthony47 » 05/07/07 19:21

Trovi il file con le macro all' indirizzo http://www.freefilehosting.net/download/MjM5NTE0

Proviamo a rispondere.
-per "radice" intendo l'indirizzo dell' angolo alto/sx della prima scheda.
-SkRoot, SkAdr etc sono nomi di variabili che ho usato; il prefisso "sk" l' ho inserito per ricordare che sono valori relativi alle schede; avrei potuto chiamarle var001, var002 etc ma poi avrei avuto difficolta' a ricordarne il significato.
-ogni riga nella mia soluzione e' una squadra; se metti SkPerRow = 6 tutti i 6 atleti sono della stessa squadra.
-dici "volendo creare spazio tra le schede e l'organizzazione dati su foglio2 ho modificato TeamList = etc etc": che modifica hai fatto? Ma non e' qui che devi modificare. Io modificherei in ambedue le macro il calcolo di SkCols in
Codice: Seleziona tutto
 SkCols = Range(SkAdr).Columns.Count + 5
(esempio con 5 colonne di spazio); oppure definisci la scheda come SkAdr = "A1:AN18" (rispetto ad AI18, sono appunto 5 colonne in piu'), ma in questo caso copierai su foglio1 anche le 5 colonne aggiuntive (se sono vuote non e' un problema).

-60 squadre? non c'e ' male come torneo... Se penso che nel primo post si parlava di 7 informazioni! Comunque dobbiamo lavorare sulla macro invent:
-allungare il ciclo For J; es.
Codice: Seleziona tutto
For J = 0 To 70    'Max 70 Squadre

-ampliare l' area di azzeramento, es
Codice: Seleziona tutto
Range(TeamList).Range("A1:BR70").ClearContents


Dovrebbe essere tutto.

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

Calcetto

Postdi By Sal » 05/07/07 21:08

Inserisco anche io quello che ho elaborato, ho creato un foglio archivio da cui prendere i dati, l'ultima colonna quella contenente il nome della foto, si ricordi che deve essere file ".Gif", ma può anche essere cambiato e le foto come è adesso il file vanno nella stessa cartella del file, attenzione a non sostituire la foto "zero" perche e la foto blank di pulizia della scheda, un pulsante l'ho utilizzato per pulire la scheda, nella casella gialla, il menu a tendina dei giocatori, basta scegliere il nome e dare invio, che inserisce i dati del giocatore in archivio, le intestazioni della prima riga del foglio archivio, corrispondono agli spazi del cartellino.
Non ho preso ancora in considerazione la formazione delle squadre, ma bisogna sapere come organizzarle.
facci sapere Ciao :)

ALLEGO IL FILE ZIPPATO
A rileggerci By Sal
Avatar utente
By Sal
Utente Junior
 
Post: 83
Iscritto il: 27/08/06 14:40

Postdi nikfitz » 05/07/07 21:16

:lol: grazie ancora, faccio un pò di fatica ma ho capito. Volevo aggiungere le riserve ad ogni squadra. Lo spazio è più che sufficiente ma giusto per complicarmi la vita volevo capire come fare. Ho provato ad aggiungere spazio tra le schede e l'organizzazione modificando:
Codice: Seleziona tutto
TeamList = Cells(1, SkPerRow * SkCols + 15).Address '<<<aggiunge 5 colonne e sembra funzionare

ho poi aggiunto un codice che mi ripulisce la scheda del foglio1, pero quando cambio la scheda mi va un debug su:
Codice: Seleziona tutto
 If Not Application.Intersect(Sh.TopLeftCell, .Range("scheda")) Is Nothing Then '<<<< impostare range

ahh, scusa il codice completo è:
Codice: Seleziona tutto
Sub Ripulisci()
Dim Sh As Shape

With Worksheets("foglio1")
Range("scheda").Select '<<<< impostare range
Selection.ClearContents
 For Each Sh In .Shapes
    If Not Application.Intersect(Sh.TopLeftCell, .Range("scheda")) Is Nothing Then '<<<< impostare range
        If Sh.Type = msoPicture Then Sh.Delete
      End If
 Next Sh

End With


End Sub

Grazie comunque non vorrei monopolizzare la tua attenzione, per ora è tutto. Ciao
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

Postdi nikfitz » 05/07/07 21:17

:lol: grazie ancora, faccio un pò di fatica ma ho capito. Volevo aggiungere le riserve ad ogni squadra. Lo spazio è più che sufficiente ma giusto per complicarmi la vita volevo capire come fare. Ho provato ad aggiungere spazio tra le schede e l'organizzazione modificando:
Codice: Seleziona tutto
TeamList = Cells(1, SkPerRow * SkCols + 15).Address '<<<aggiunge 5 colonne e sembra funzionare

ho poi aggiunto un codice che mi ripulisce la scheda del foglio1, pero quando cambio la scheda mi va un debug su:
Codice: Seleziona tutto
 If Not Application.Intersect(Sh.TopLeftCell, .Range("scheda")) Is Nothing Then '<<<< impostare range

ahh, scusa il codice completo è:
Codice: Seleziona tutto
Sub Ripulisci()
Dim Sh As Shape

With Worksheets("foglio1")
Range("scheda").Select '<<<< impostare range
Selection.ClearContents
 For Each Sh In .Shapes
    If Not Application.Intersect(Sh.TopLeftCell, .Range("scheda")) Is Nothing Then '<<<< impostare range
        If Sh.Type = msoPicture Then Sh.Delete
      End If
 Next Sh

End With


End Sub

Grazie comunque non vorrei monopolizzare la tua attenzione, per ora è tutto. Ciao
nikfitz
Utente Junior
 
Post: 62
Iscritto il: 01/05/07 13:54

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL] Convalidare elenchi e tabelle contemporaneamente":


Chi c’è in linea

Visitano il forum: Nessuno e 33 ospiti