Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Assegnare automaticamente nomi in sequenza corretta a Range uguali tra loro

Ultimo Aggiornamento: 20/07/2020 10:39
Post: 6
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
03/07/2020 18:47

Assegnare automaticamente nomi in sequenza corretta a Range uguali tra loro
Saluti a tutti! Avrei bisogno di un aiutino....

Ho un foglio con circa 4000 righe con i dati di operatori fra cui maschi, femmine, tornitori, fresatori, saldatori, ecc.
Ogni operatore ha dedicate per sé 47 righe. In queste righe ho scritto anche le qualifiche e il sesso, e al loro fianco faccio inserire con formula una "X" in base alla qualifica o al sesso prendendo i dati da un altro foglio.

Ora vorrei creare un'area con nome estesa le 47 righe di ciascun operatore, nominando il range con la sua qualifica o il sesso, 'leggendo' le "X" che sono accanto alle qualifiche. Ho fatto delle prove copiando codice qua e là ma non riesco ad ottenere un risultato corretto.

Il problema è che nel foglio c'è un maschio, poi 3 femmine, poi un saldatore, poi un altro maschio, ecc. in ordine di cognomi, e quando creo i nomi dei range con macro, non mi vengono in sequenza. P. es. viene "maschio1" poi salta le femmine ma il secondo maschio me lo nomina "maschio6" perché tiene conto dei controlli intermedi sugli altri operatori. Questo crea problemi alla macro che cerca p. es. tutti i nomi "maschio-" per nasconderli, perché si ferma se il numero del suffisso non è in sequenza...

Come posso fare per avere i nomi dei range con il numero del suffisso in sequenza corretta a seconda della qualifica, tipo "maschio001", "maschio002" ecc. anche se in mezzo ci sono altri 'non maschi'?

Questo è quello che ho fatto... 😖

    Sub Area_nomi()            'assegna un nome a ciascuna specializzazione
    Riga = 1                   'decido da quale riga iniziare, in questo caso dalla riga 1

    For N = 1 To 90            'ora decido a quanti intervalli assegnare un nome, quindi 90 in questo caso

            nome = Cells(Riga + 4, 27).Value    'imposto la variabile "nome" come da colonna "Label"

            ActiveWorkbook.Names.Add Name:=nome, RefersTo:=Sheets(1).Range(Rows(Riga), Rows(Riga + 46))     'definisco le righe intere come intervallo, per  facilitare l'esecuzione del successivo comando 'Nascondi'

        Riga = Riga + 47        'incremento di 47 il valore di riga, così il prossimo intervallo inizierà 48 righe più in basso

    Next                        'ripeto il ciclo N volte

    End Sub


[Modificato da missKlaPP 03/07/2020 18:57]
03/07/2020 19:36

Cancella i nomi (mettili fasulli) ed allega il files
Devi decidere, cosa desideri dividere maschi<<<>>>femmine
Se non è prioritario, dividerei per mansioni. In base alla mansione puoi avere saldatori =S1,S2 oppure T1,T2 ecc ecc (anche col nome S1_Pippo)
Faccio un ex...
Sub test()
Dim ur, x, nome, S, T, F, vS, vT, vF
ur = Range("A" & Rows.Count).End(xlUp).Row
vS = 1
vT = 1
vF = 1
For x = 1 To ur Step 47
    IF Cells(x + ??, ??)= "saldatori" then
        nome = Cells(x + 4, 27).Value & "_" & vS
        ActiveWorkbook.Names.Add Name:=nome, RefersTo:=Sheets(1).Range(Rows(x), Rows(x + 46))
        vS = vS + 1
    elseIF Cells(x + ??, ??)= "tornitori" then
        nome = Cells(x + 4, 27).Value & "_" & vT
        ActiveWorkbook.Names.Add Name:=nome, RefersTo:=Sheets(1).Range(Rows(x), Rows(x + 46))
        vT = vT + 1
    elseIF Cells(x + ??, ??)= "fresatori" then
        nome = Cells(x + 4, 27).Value & "_" & vF
        ActiveWorkbook.Names.Add Name:=nome, RefersTo:=Sheets(1).Range(Rows(x), Rows(x + 46))
        vF = vF + 1
End If
Next x
End Sub
[Modificato da ABCDEF@Excel 03/07/2020 19:39]
Post: 5.974
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
04/07/2020 06:56

Ciao non credo sia corretto definire le qualifiche o altri elementi con righe devi trasformarle in colonne, molto più semplice da gestire, esempio



mettendo un filtro sulla qualifica avrai immediatamente tutti i tornitori o altro e non andando a cercarli ogni 47 righe.

forse ti sei sbagliato e definirle righe, comunque un esempio vale più di mille parole.

inoltre quando vorrai un report per righe dall'elenco in colonne puoi trasformarlo in righe con una macro

Ciao By Sal [SM=x423051]
[Modificato da by sal 04/07/2020 07:00]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 6
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
04/07/2020 20:15

Grazie delle vostre considerazioni!
Allego il file draft...

Il format è da mantenere così a causa di compatibilità grafica con altre vecchie schede...

Grazie del vs aiuto...
Ciao, Franco.😏
05/07/2020 03:13

Onestamente non Ti capisco, creare dei Nomi per poi "nasconderli"
Pensavo che Ti servisse per una ricerca più veloce dell'area. Comunque per informazione, prima di crearli bisogna cancellare i presenti per evitare errori. Fatto (con molti dubbi di quello che hai richiesto), ho messo solo le sigle (puoi mettere le parole), mà suggerisco che il "tutto" non sia con troppi caratteri. L'allegato è incompleto riga54 non è donna/maschio, se ci sono due mansioni le scrive.
Option Explicit
    Sub EliminaNomi() ' http://ennius.altervista.org/vba/vba103.php
    Dim G, X As Integer
    X = ActiveWorkbook.Names.Count  'con X otteniamo il numero di quanti nomi sono nel workbook
        For G = X To 2 Step -1      'si inizia un ciclo a scalare, usando G come contatore del ciclo
            ActiveWorkbook.Names(G).Delete   'e si cancella il nome il cui numero indice ? uguale al contatore (G)
        Next
    End Sub
Sub Prova()
Dim ur As Long, X As Long, Maschio, Donna, Nome As String
Call EliminaNomi
ur = Range("B" & Rows.Count).End(xlUp).Row
For X = 1 To ur Step 47
    If Cells(X + 6, 14) = "X" Or Cells(X + 6, 20) = "X" Then
        Nome = ""
        If Cells(X + 6, 14) = "X" Then Nome = "M_": Maschio = Maschio + 1 ' Nome = "Maschio_"
        If Cells(X + 6, 20) = "X" Then Nome = "D_": Donna = Donna + 1 ' Nome = "Donna_"
        If Cells(X + 9, 14) = "X" Then Nome = Nome & "T_"
        If Cells(X + 9, 20) = "X" Then Nome = Nome & "F_"
        If Cells(X + 12, 7) = "X" Then Nome = Nome & "M_"
        If Cells(X + 12, 10) = "X" Then Nome = Nome & "S_"
        If Cells(X + 12, 17) = "X" Then Nome = Nome & "E_"
        If Cells(X + 6, 14) = "X" Then
            Nome = Nome & Format(Maschio, "000")
        Else
            Nome = Nome & Format(Donna, "000")
        End If
        'Se desideri usa tutta la riga ...Range(Rows(x), Rows(x + 46))
        ActiveWorkbook.Names.Add Name:=Nome, RefersTo:=Sheets("Foglio1").Range(Cells(X, 2), Cells(X + 46, 23))
    End If
Next X
MsgBox "Fatto"
End Sub

Aggiungo il codice per nascondere donna oppure maschio
Sub Nascondi_Maschio()
Dim ur As Long, X As Long
ur = Range("B" & Rows.Count).End(xlUp).Row
    For X = 1 To ur Step 47
        If Cells(X + 6, 14) = "" Then
            Range(Rows(X), Rows(X + 46)).EntireRow.Hidden = True
        End If
    Next
MsgBox "Fatto"
End Sub
Sub Nascondi_Donna()
Dim ur As Long, X As Long
ur = Range("B" & Rows.Count).End(xlUp).Row
    For X = 1 To ur Step 47
        If Cells(X + 6, 20) = "" Then
            Range(Rows(X), Rows(X + 46)).EntireRow.Hidden = True
        End If
    Next
MsgBox "Fatto"
End Sub
Sub Scopri_tutto()
    Cells.EntireRow.Hidden = False
End Sub
Post: 7
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
05/07/2020 11:15

Grazie ABCDEF, appena riesco provo il codice che mi hai gentilmente postato.

In realtà l'obiettivo che vorrei raggiungere è quello di utilizzare una UserForm che ho preparato per mostrare o solo i maschi, o solo le femmine, o solo i saldatori, o solo... ecc.
In questo senso intendo 'nascondere', cioè vorrei mostrare solo determinate specializzazioni in base alle richieste fatte sulla UserForm.

Grazie, provo e poi ti dico...
B.G.
Post: 8
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
05/07/2020 11:52


Eccomi:

1- La macro va molto bene, grazie! La "EliminaNomi" però mi cancella le interruzioni di stampa che invece desideravo mantenere...

2- Le aree che vorrei creare dovrebbero essere 'sovrapposte', nel senso che per ogni qualifica oppuse sesso ci sia un'area con quel nome. Allego uno screenshot di cosa vorrei ottenere...

Grazie...

05/07/2020 15:30

Se lo scopo finale è di nascondere/filtrare/selezionare le Aree, Ti sconsiglio d'usare i NOMI. Ex. Dal Tuo allegato tramite VBA, vedo:...For G = X To 1 Step -1...Cells(G, 26) = Names(G)
=Dati1!$B$2:$K$85---un collegamento al foglio Dati
=Foglio1!$B$2:$W$3---uno all'area del Titolo
=#NAME?---uno indefinito con errore, a seguire la stampa e gli altri
Ragionandoci sopra, a quale scopo creare due/tre NOMI per la medesima Area???

Tutto questo si può fare usando solo il VBA (ho pensato a dove mettere i bottoni ed infatti mi era venuto in mente l'Userform). Adesso una domanda importante..., abbiamo definito di dividere tra Uomini/Donne OK. Ora desideri dividerli pure trà le varie Mansioni? OK. Mà cosa serve il Numero.000? Non è meglio usare il Cognome/Nome? EX Marco_Magazzino + Elena_Magazzino. Vedo come fare?
Ps. Rinominando/Eliminando Sheets("2020-03"), il codice Sub copia() non funzionerà più.
Post: 9
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
05/07/2020 16:07

Beh, usavo i NOMI perché mi sembrava più facile poi richiamare il nome e poterlo filtrare con un 'visualizza/nascondi'... ma se c'è un altro modo per dire al VBA "mostrami SOLO tutti i maschi" oppure "mostrami SOLO tutti i tornitori" va bene lo stesso, anzi meglio 😁😁 io non ne sò certo per ottenerlo...

Il Numero.000 mi sembrava necessario perché credo non si possa assegnare lo stesso NOME a diversi Range...

Per quanto riguarda i Range di 47 righe, vorrei poterli filtrare e di conseguenza visualizzare indipendentemente tra loro, un filtro per ciascuna "X" se maschio, OPPURE se femmina, OPPURE se tornitore (maschi e femmine), OPPURE se saldatore (maschi e femmine insieme) ecc. Se possibile, quando cerco p. es. gli Elettricisti mi si devono visualizzare TUTTI gli Elettricisti, indifferentemente se uomini o donne...

Ok, farò in modo di non cambiare il nome del foglio "2020-03" tanto è solo un appoggio temporaneo.

Grazie mille...🤠
06/07/2020 01:11

Da provare....
Per aprire l'userform premi CTRL+MAIUS+A
Se selezioni da Listbox lo visualizza, se premi OK nasconde gli "altri"
Per vedere tutto, il tasto oppure apri userform e chiudi tramite la X

Ps. Per tutte le formule similari...(Valter non funzionava)
Se non metti Falso potrebbe non funzionare.
=SE(CERCA.VERT(C287;Dati1!$A$3:$J$90;5;FALSO)="OK";"X";"")
[Modificato da ABCDEF@Excel 06/07/2020 06:38]
Post: 10
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
13/07/2020 00:03

Re:
ABCDEF@Excel, 06/07/2020 01:11:

Da provare....
Per aprire l'userform premi CTRL+MAIUS+A
Se selezioni da Listbox lo visualizza, se premi OK nasconde gli "altri"
Per vedere tutto, il tasto oppure apri userform e chiudi tramite la X

Ps. Per tutte le formule similari...(Valter non funzionava)
Se non metti Falso potrebbe non funzionare.
=SE(CERCA.VERT(C287;Dati1!$A$3:$J$90;5;FALSO)="OK";"X";"")



Perfetto! Funziona ottimamente! Grazie mille dell'aiuto, per me fondamentale... anche dell'aggiornamento della formula 👌

Un'ulteriore domanda: dopo la selezione, come posso fare per stampare con "Microsoft print to PDF" le specializzazioni rimaste visibili? Ho impostato correttamente le interruzioni di pagina, ma ovviamente la numerazione delle pagine non è in sequenza, per cui la stampante stampa anche le pagine bianche "nascoste"...

C'è un modo per conoscere le pagine attualmente visibili e far stampare solo quelle? 😵

14/07/2020 16:40

>>>C'è un modo per conoscere le pagine attualmente visibili e far stampare solo quelle?
Non capisco, in teoria se selezioni qualsiasi cosa, ex "Maschi" a monitor vedi solo loro e puoi stampare. In quale caso Ti stampa Aree differenti? Non vorrei che Tu avessi selezionato tutto ed inserito col NOME = Stampa. Ho trovato un metodo per selezionare le Aree desiderate, se Ti interessa devo modificare gran parte del codice.

Ps. A riguardo "Microsoft print to PDF", Ti interessa stampare un PDF oppure salvare un PDF? Aggiungerei un bottone che in base alla scelta, salva con nome =scelta+data (non potrai salvare due files con la stessa "scelta+data" ogni giorno
Post: 11
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
14/07/2020 18:08

E' vero, a monitor posso vedere solo le persone in base alle caratteristiche che ho selezionato, ma poi quando vado a verificare le interruzioni di pagina non si chiamano "pagina 1", "pagina 2", ecc in sequenza ma ci sono i salti di numerazione in base alle persone nascoste... tipo "pagina 7", "pagina 12", "pagina 23", ecc.

Per cui quando poi vado a stampare, PDF o stampante che sia, mi stampa tutte le pagine dalla 1 in poi in sequenza, incluse quelle che sono state nascoste (che stampa come fogli bianchi)...

Quindi pensavo ad un codice che mi rilevasse i numeri delle sole pagine visibili, cioè quelle che risultano effettivamente a video quando visualizzo "interruzioni di pagina", e poi dicesse alla stampante: Stampami le pagine 7, 12, 23, ecc. (che sono solo quelle visibili).

Microsoft to PDF perché al bisogno vorrei poter passare ai colleghi le schede in pdf con le specializzazioni richieste, va bene anche raggruppate in un unico file che p. es. viene formato dalle pagg. 7, 12, 23, xx, xx, ecc. e questa stampante virtuale in pdf mi piace perché permette di replicare esattamente cosa c'è a video (effetti grafici inclusi), questione di gusti 😁😁😁

Però, se devi apportare molte modifiche non voglio impegnarti troppo, mi sarebbe sufficiente capire come costruire codice che appunto 'legga' le interruzioni di pagina attualmente visibili, e le invii alla stampante per la stampa. Va bene anche che non sia integrato con il codice precedente, ma una macro a sé stante da attivare su pulsante singolo.

Grazie mille....
14/07/2020 19:06

Sul files allegato non esistono le interruzioni di pagina ???

Suggerisco dal files originale (con tutti visibili) d'avviare il Registratore, stampare (per ex le pagine 5, 10, 15). Fermare il registratore ed allegare il VBA prodotto (anche se non lo userò).

Ps. Se invece creo il Foglio(Stampa) e copio tali dati su quello. Sarebbe più facile stampare/creare un PDF. Non conosco Microsoft to PDF se alleghi un foglio creato con copia/incolla (effetti grafici inclusi), vorrei provare a salvarlo come PDF tramite VBA
Post: 12
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
14/07/2020 19:27

Ok, ti rimando il file che mi avevi modificato, però ho notato una cosa strana: quando ho provato a selezionare p. es. "tornitori", le interruzioni di pagina erano correttamente in sequenza progressiva, 1, 2, 3, ecc.
Mentre quando ho allineato manualmente le interruzioni di pagina in base al format del modulo, la numerazione è cambiata, con il problema che ti dicevo prima cioè le pagine con numerazione discontinua...
Post: 13
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
14/07/2020 19:39

Nel mio excel non c'è la possibilità di stampare 'a salti', ma c'è solo "da" - "a"...
Vedi screen
15/07/2020 14:17

Eppure mi sembrava che si potesse tempo fà, ma forse erano dei PDF
Quel NOME "Area di Stampa", Ti fà stampare tutte le righe nascoste. Quello lo devi usare solo per stampare tutti i lavoratori.
Le interruzione di pagina sono un problema, non puoi toglierle e usando solo l'area A1:W47 allargando/restrigendo per farlo rientrare in una pagina unica?
Non hai corretto le formule con Falso

Comunque Ti allego un files provvisorio (prova il tasto Multi Stampa, Multi PDF crea diversi files nella directory dove è presente questo files), devo finire Unico_PDF
Ps se va bene, devi eliminare Userform1 + Modulo2

Edit. Mà sul files originale, il foglio (attualmente il Foglio1) si chiama proprio con questo nome?
Mi puoi dire tutti i nomi dei fogli sull'originale?
[Modificato da ABCDEF@Excel 15/07/2020 20:10]
Post: 14
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
16/07/2020 16:13

Buongiorno, i nomi dei fogli originali sono proprio "Foglio1", "Dati1", e "2020-03".

Non ho corretto le formule sul foglio 'draft' sul quale stai lavorando, ma ho fatto tesoro dei tuoi consigli e sull'originale ho prontamente corretto...😄

"Le interruzione di pagina sono un problema, non puoi toglierle e usando solo l'area A1:W47 allargando/restrigendo per farlo rientrare in una pagina unica?"
Ok, ma le 'schede' sono più di una per ciascuna selezione, e non potendo compattare più di una scheda per pagina devo necessariamente dimensionare la scheda in modo che riempia tutta la pagina A4. Il solo modo che io conosco è sistemare le interruzioni di pagina (le linee blu) in modo tale che una scheda appunto riempia l'intera pagina, e poi stamparle tutte di fila.
16/07/2020 19:11

Io non vedo nessun foglio 'draft', scrivo il VBA col "Foglio1"

Grazie ad un'esperto (che mi ha indicato il modo d'eseguire), questo è il massimo che posso fare.
Per colpa delle (interruzioni di pagina ed celle unite) tutto è stato più complicato.
1) Ogni bottone che premi crea un foglio, Ti verrà chiesto Si/No
2) Si = Apre Userform, dove premi PDF o *Stampa*, il foglio poi verrà eliminato
3) No = Non viene eliminato (sino alla chiusura del files), oppure tramite bottone
4) In Sub Auto_Close (determinati fogli), non "verranno" eliminati

Nei 2 bottoni *Stampa* (non testati) ci sono due righe verdi, presumo sia la 2°

NB. Esiste in Modulo2, Sub Crea_Foglio(), cosa fà? (Poi decidi se usarlo)
Ex: Se in Dati1, cella A3:Axx scrivi 100 nomi ed in colonna(L) = X
Ricrea il Foglio1 (terra-terra, se inserisci le formule solo in B1:B47), eventuali modifiche diciture (annate), mà soprattutto se aumenti/diminuisci l'altezza delle righe. Il VBA ricrea (B1:B47) per tutti i Nomi=X con la stessa "altezza"(sul mio Pc ci mette 5m). A riguardo il nome "Area di stampa" in Foglio1, Tu devi controllare le interruzioni di pagina (il VBA adegua solo il range...da fare)

Ps. Non testato al 100%, sperò che non ci siano errori
Pps. Mi rimane un "particolare" che devo rivedere (con la Sub combo)

Edit (tolto all'allegato) dammi tempo che riallego
Sub Crea_Foglio() non funziona bene, appena riesco allego il vba
[Modificato da ABCDEF@Excel 17/07/2020 14:12]
17/07/2020 14:13

Dovrebbe essere a posto (tranne la stampa)
Post: 15
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
17/07/2020 19:09

Re:
ABCDEF@Excel, 17/07/2020 14:13:

Dovrebbe essere a posto (tranne la stampa)



Direi che è perfetto!

Tutto molto chiaro, e soprattutto adatto alle mie necessità...

Grazie di cuore, ABCDEF! Perdonami se ti ho stressato, e buon proseguimento! 😉
Post: 16
Registrato il: 12/06/2020
Età: 60
Utente Junior
Office 365
OFFLINE
20/07/2020 10:39

PS: in relazione alla stampa, allego il codice che ho composto, in parte tuo in parte trovato in giro, che permette all'utente di scegliere quale stampante usare.

Ho dimensionato la pagina A4 in modo che i margini facessero rientrare l'intera scheda nella pagina (come mi sembra mi avevi suggerito tu), poi ho chiesto di selezionare solo le CELLE interessate, non le righe intere; in questo modo mi stampa solo le schede visibili SENZA le pagine bianche fra una scheda e l'altra...

Metto il codice, se può essere utile. Ciao e buona giornata.

Private Sub CommandButton16_Click()
On Error GoTo finito
Dim nome, rg As Object
Dim ur As Long
Worksheets("Foglio1").Activate
ur = Range("B" & Rows.Count).End(xlUp).Row
Set rg = Columns("C:C").Find(nome, LookIn:=xlValues, LookAt:=xlWhole)
If Not rg Is Nothing Then
    Range(Cells(1, 1), Cells(ur, 23)).Select
End If
             If Application.Dialogs(xlDialogPrinterSetup).Show Then
                  ActiveWindow.RangeSelection.PrintOut
             End If
Range("A1").Select
finito:
End Sub
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 08:53. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com