Usare le checkbox per selezionare riga su cui intervenire

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
noellox
00mercoledì 26 febbraio 2020 21:54
Ciao a tutti, mi chiamo Fabio e da poco mi sto cimentando nell'utilizzo di excel, che nonostante tutto mi puo' ancora semplificare la vita nonostante tutti i gestionali che abbiamo a disposizione, vi espondo subito il problema, premesso che, di vba ne capisco veramente poco, sto arrancando per tutto con quello che trovo;

Praticamente sto cercando di sfoltirmi un po' la mia gestione interna di un sistema di tarature che prevede un grande numero di strumenti, che a frequenze variabili, vanno aggiornati di data in data, quindi per non basarmi su un gestionale già usato pesante e lento, volevo aiutarmi facendomi questo scadenziario che vi allego, il problema è questo:

Ho questa lista in allegato, che popolo di riga in riga tramite il pulsante macro che richiama una userform nella quale metto i dati presenti dalla cella A alla cella H, senza nessun controllo ne niente, a me va benissimo così, sennonchè anche se all'inzio avevo abbracciato un'idea stupida di scrivermi tutti i pulsanti a mano, visto il numero di righe che andro' a inserire ora diventa difficile, ovvero, oltre al pulsante di inserimento che ho creato, ci sono altri 3 pulsanti che dovrebbero agire, tramite una checkbox che andro' a mettere manualmente per ogni record che andro'a inserire, di far si che questi pulsanti (che al momento, nel codice al loro interno, fanno tutti riferimento alla riga 3) siano invece dinamici, ovvero, se io spuntassi la checkbox sulla riga 8, i pulsanti dovrebbero eseguire le operazioni su quella riga selezionata, e non sulla riga 3, mi scuso per il mattone di testo ma è difficile spiegare qualcosa con cui si brancola parzialmente al buio, spero che con l'allegato qua sotto sia piu' "comprensibile", un ringraziamento.
GiuseppeMN
00giovedì 27 febbraio 2020 01:07

Ben venuto in Forum, @noellox;
non voglio sconvolgerti la vita ma considera che "Celle unite", se non estremamente necessarie, non sono "ben viste da VBA".
Nel tuo esempio le uniche Celle unite potrebbero essere quelle previste nel Foglio di lavoro "APMC" nel Range A1:A5.

Ciò premesso i Codici VBA legati ai Pulsanti:
- CommandButton3 (Stampa Etichetta)
- CommandButton1 (Esegui Taratura)
- CommandButton2 (Compila Modulo)
fanno ciò che viene richiesto; tutti fanno riferimento alle Celle in Riga 3

Proverei a selezionare la Riga che vuoi gestire e, al posto di:

 Range("A3").Copy 

scriverei:
 Cells(ActiveCell.Row, 1).Copy 

Analogamente per tutte le altre Celle.

Considera solo che 1 Corrisponde alla Colonna "A", 2 Corrisponde alla Colonna "B", 3 Corrisponde alla Colonna "C" ecc ...

Fai sapere se hai problemi.


A disposizione.

Giuseppe


ABCDEF@Excel
00giovedì 27 febbraio 2020 01:14
Selezionando una cella/oppure una riga...
Per Esegui Taratura...
Private Sub CommandButton1_Click()
Dim risp As Integer, r As Long
r = Selection.Row
If Cells(r, 1) <> "" Then
    risp = MsgBox("Sicuro di voler aggiornare la data?", vbQuestion + vbYesNo + vbDefaultButton2, "Conferma")
    If risp = vbYes Then
        Cells(r, 3) = DateAdd("m", Cells(r, 5), Cells(r, 4))
        Cells(r, 4) = DateAdd("m", Cells(r, 5), Cells(r, 4))
    Else
    End If
Else
    MsgBox "cella vuota, non eseguo nulla"
End If
End Sub
noellox
00giovedì 27 febbraio 2020 08:28
Si capisco il discorso celle unite, in teoria, non dovrebbero essercene e se ce ne fossero che mi sono sfuggite, non mi costa nulla slegarle, ho visto il codice da inserire nei pulsanti pero' mi sfugge come faccio a collegare una checkbox a quella riga
alfrimpa
00giovedì 27 febbraio 2020 09:13
@noellox

Mi spieghi che cosa non ti era chiaro nelle risposte che ti avevo dato qui

https://www.forumexcel.it/forum/threads/checkbox-su-userforum-per-popolare-una-cella.32625/#post-260272

discussione aperta alle 14,14 di ieri ed alla quale avevo replicato alle 14,23 e alle 16,51?

Non mi sembra che tu non stessi ricevendo supporto o assistenza tanto da dover aprire qui ieri alle 21,54 la medesima discussione

Chi risponde sui forum dedica volontariamente e gratuitamente parte del proprio tempo (poco o molto non ha importanza) alla risoluzione di problemi altrui e tale comportamento non mi sembra, eticamente parlando, particolarmente corretto.

noellox
00giovedì 27 febbraio 2020 10:39
Ciao Alfredo, come penso tu da admin potrai notare ho richiesto un recupero pw dall'altro forum perchè cambiando abitazione non ero loggato, non ho la possibilità da qua di aprire la mia mail, come notrai nel mio orario di ieri dove non ero a lavoro e l'ho potuto fare, semplicemente, sicuramente in serata ci riuscirò, non è mia intenzione approfittare di niente o nessuno tanto che come avrai visto nell'altra discussione non ho potuto neanche replicare, dispiace se tu abbia pensato male.
GiuseppeMN
00giovedì 27 febbraio 2020 12:18

Buona giornata, @noellox;
perdonami ma non riesco a vedere i CheckBox.

Puoi aiutarmi a capire? Grazie.

 

Giuseppe


ABCDEF@Excel
00giovedì 27 febbraio 2020 12:19
>>>pero' mi sfugge come faccio a collegare una checkbox a quella riga
Quale checkbox?, io ho fatto il VBA per eseguire una "Taratura" su una riga specifica...

Scusami due volte che rispondo, subito dopo che hai già scritto
noellox
00giovedì 27 febbraio 2020 12:59
effettivamente nel file d'esempio non ho inserito le checkbox, dimenticamnza mia, la mia intenzione è di metterne una alla fine di ogni riga, poco fa in un fazzoletto di tempo, ho provato una soluzione offertami sopra, che effettivamente, funziona quando io seleziono la riga, quindi ora devo mettere una checkbox su ogni riga che se spuntata mi seleziona la sua riga
ABCDEF@Excel
00giovedì 27 febbraio 2020 13:12
>>>la mia intenzione è di metterne una alla fine di ogni riga
Benissimo dalla padella alla brace, la mia era una riga per volta
Se desideri fare diverse righe il VBA non và bene
noellox
00giovedì 27 febbraio 2020 15:30
Beh padella o no, in tutti i casi con un po di pazienza mi sta bastando creare una checkbox e inserirci dentro

Range("A4:I4").Select

e cambiando a mano il numero, poco male, è noioso ma non so diversamente come fare, sto pero' avendo un po di difficolta nel trasformare questo codice che mi è stato suggerito, nel relativo codice che fa riferimento piuttosto che alla cella alla colonna di appartenenza, in quanto riscontro errori di sintassi

Copia
Range("C3").Copy
    Range("C3").PasteSpecial Paste:=xlPasteFormats
    Worksheets("Elenco").Range("C3").Copy
    Worksheets("Scheda_Calibri").Range("U21").PasteSpecial Paste:=xlPasteFormulas
    Worksheets("Scheda_Calibri").Range("H4").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False


GiuseppeMN
00giovedì 27 febbraio 2020 16:37
Buon pomeriggio, @noellox;
perdonami ma continuo a non capire, l'età è quella che è e di certo non aiuta!

In Microsoft Excel Oggetti, Foglio1 (Elenco):

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
    Cancel = True
    With Worksheets("Scheda_Calibri")
        Target.Copy
            .Range("H4").PasteSpecial Paste:=xlPasteFormulas
            .Range("U21").PasteSpecial Paste:=xlPasteFormulas
    End With
Application.ScreenUpdating = True
End Sub

- Sei sul Foglio di lavoro "Elenco"
- Doppio Click sulla Cella "C3"
Non risolvi senza altri patemi d'animo?



Giuseppe
noellox
00giovedì 27 febbraio 2020 16:53
beh sicuramente non è l'età, mi rendo conto che è difficile spiegare per me qualcosa che non capisco, come in ogni cosa, se non si capisce un argomento non lo si potrà mai esporre, cerco di spiegarmi in un altro modo, non so se renderà ma ci provo.

Ora ho posizionato una serie di checkbox alla fine di ogni riga, diciamo che, avendo il foglio davanti, spunto la checkbox sulla riga 6, che eseguirà questo codice:

copia
Range("A6:I6").Select


Così facendo, io mi seleziono la riga con tutti i dati che ho inserito, ma di righe a fine lavoro ne avrà circa 250, quindi ogni checkbox mi selezionerà una di queste, quindi in base alla riga che selezionerò, i pulsanti in alto svolgeranno quell'azione, quindi, nel caso del pulsante "Stampa Etichetta" che al momento esegue questa operazione qua:

etichetta
Private Sub CommandButton3_Click()
Dim risp As Integer
risp = MsgBox("Confermi di creare questa etichetta?", vbQuestion + vbYesNo + vbDefaultButton2, "Conferma")
If risp = vbYes Then
    Range("A3").Copy
    Range("A3").PasteSpecial Paste:=xlPasteFormats
    Worksheets("Elenco").Range("A3").Copy
    Worksheets("APMC").Range("E2").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    Range("C3").Copy
    Range("C3").PasteSpecial Paste:=xlPasteFormats
    Worksheets("Elenco").Range("C3").Copy
    Worksheets("APMC").Range("E4").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    Range("D3").Copy
    Range("D3").PasteSpecial Paste:=xlPasteFormats
    Worksheets("Elenco").Range("D3").Copy
    Worksheets("APMC").Range("D5").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
    Else
    Exit Sub
End If
End Sub


dove pero', i dati che varieranno saranno tutti quelli del foglio "Elenco" che non saranno piu' risiedenti nella riga 3, ma dovranno corrispondere alla riga selezionata con checkbox, scusa davvero ma non penso di riuscire a spiegarlo meglio

GiuseppeMN
10giovedì 27 febbraio 2020 20:56

Buona sera, @noellox;
poi prometto non ti disturbo più.

Volevo chiederti se per un momento, solo per un momento, sei disposto a dimenticare operativamente CheckBox.
Voglio dire, bene o male dovrai selezionare il CheckBox da attivare; in alternativa posizioni il Cursore sulla Riga da gestire, nel caso in cui le righe siano più di una puoi sempre gestire il Range con VBA.

Ciò premesso puoi prendere spunto dall'Evento "BeforeDoubleClick" proposto in Risposta #12; con una piccola modifica, veramente piccola, potresti ottenere ciò che desideri con pochissimo sforzo inserendo il Codice VBA in "CommandButton3".

Se lo ritieni utile e opportuno, dopo il Clear operativo di "CheckBox", assieme, possiamo vedere come modificare il Codice VBA.

 

Buona serata.

Giuseppe


noellox
00venerdì 28 febbraio 2020 08:08
a certo che si, non sono fissato io con le checkbox ma nel mio immaginario era la vita piu logica, qualunque cosa porti allo stesso obbiettivo ne sono piu che felice!
GiuseppeMN
00venerdì 28 febbraio 2020 09:34
Buona giornata, @noellox;
grazie del tuo riscontro.

Preliminarmente consentimi di precisare la natura del mio intervento:
A mio modesto parere Forum è un ambiente nel quale tutti gli Utenti possono confrontare le proprie ipotesi di soluzione di un determinato problema.
In quest'ottica, perdonami, non mi sono sentito di condividere con tutti gli Utenti la soluzione con CheckBox.
Ovviamente quello che vado a proporre è molto personale e, come tale, opinabile ma credo possa essere la base per eventuali critiche propositive.

Tutto ciò premesso, la base di partenza è quella di posizionare il Cursore su una qualùnque Cella della Riga da processare; non importa quale, basta sia sulla Riga da processare.
Fatto ciò, premendo il Pulsante "Stampa Etichetta", grazie al Codice VBA sotto proposto si dovrebbe ottenere la compilazione dei Campi nel Foglio di lavoro "APMC".

Private Sub CommandButton3_Click()
Application.ScreenUpdating = False
Dim Risp As VbMsgBoxResult
    Risp = MsgBox("Confermi di creare questa etichetta?", vbQuestion + vbYesNo + vbDefaultButton2, "Conferma")
        If Risp = vbYes Then
            With Worksheets("APMC")
                .Range("E2") = Cells(ActiveCell.Row, 1)
                .Range("E4") = Cells(ActiveCell.Row, 3)
                .Range("D5") = Cells(ActiveCell.Row, 4)
                    .Select
            End With
        End If
Application.ScreenUpdating = True
End Sub

A margine di quanto sopra corre obbligo precisare che le Istruzioni:
- Application.ScreenUpdating = False
- .Select
- Application.ScreenUpdating = True
sono opzionali e non influiscono minimamente sul funzionamento del Codice VBA



A disposizione.

Buon Lavoro.

Giuseppe
noellox
00venerdì 28 febbraio 2020 10:02
ma ti diro... così è piu che perfetto anche perchè era proprio quello che cercavo! ora oltra ringraziarti nonostante per voi sia facilissimo.. vorrei capire un po' di piu su questo codice, anche s emi sembra di capire che dopo l'if, seleziona le 3 celle di destinazione e le corrispondenti in colonne per la copia, è giusto?
GiuseppeMN
00venerdì 28 febbraio 2020 10:31

@noellox, chiede:


... vorrei capire un po' di più su questo codice, anche se mi sembra di capire che dopo l'if, seleziona le 3 celle di destinazione e le corrispondenti in colonne per la copia, è giusto?

Non esattamente, le tre Celle del Foglio di lavoro "APMC" non vengono selezionate; il Codice VBA si limita ad attribuire ai tre Campi del Foglio di lavoro "APMC" rispettivamente i valori corrispondeti ai Campi:
- Sigla APMC
- Data Ultima
- Scadenza
relativi alla Riga selezionata nel Foglio di lavoro "Elenco".

 

Giuseppe


noellox
00venerdì 28 febbraio 2020 11:21
ecco grazie! è un buon semplice esempio per me per iniziare ad adattarmi, grazie mille ancora!
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 15:16.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com