Condividi tramite

msgbox a seguito selezione cella

Anonimo
2022-04-18T07:05:08+00:00

Ciao a tutti,

ho una colonna con delle celle con convalida dati.

vorrei ottenere un messaggio di avviso in base alla selezione e dopo l'ok posizionarsi su una cella specifica:

ad esempio

se seleziono terreno dalla cella S2 msg vai a cella V2

se seleziono acqua dalla cella S2 msg vai a cella W2

se seleziono luce dalla cella S2 msg vai a cella X2

e cosi via.

Sarà possibile poi trascinando le celle ottenere automaticamente lo stesso risultato, altrimenti andrebbe bene anche il solo messaggio?

se seleziono terreno dalla cella S3 msg vai a cella V3

se seleziono acqua dalla cella S3 msg vai a cella W3

se seleziono luce dalla cella S3 msg vai a cella X3

Come dovrei scrivere il codice in vba?

Grazie in anticipo a tutti voi

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2022-04-18T19:24:53+00:00

    Ciao Peppe,

    ho provato e ci siamo quasi.

    Come posso cambiare il testo della msg box a seconda che va nella cella T3 o nella cella V3

    Ho provato a modificare questa parte

    Res2 = MsgBox(Prompt:="Vai a cella " & Rng2.Address(0, 0) & "?", _

    Buttons:=vbYesNo, _

    Title:="REPORT")

    If Res2 = vbYes Then

    Rng2.Select

    End If

    Else

    Rng2 = Intersect(Rng.EntireRow, Me.Columns(sSeconda_Colonna_Destinatione))

    Res2 = MsgBox(Prompt:="Vai a cella " & Rng2.Address(0, 0) & "?", _

    Buttons:=vbYesNo, _

    Title:="REPORT")

    If Res2 = vbYes Then

    Rng2.Cells(1).Select

    ma se cambio esce sempre Vai a cella.

    è possibile far in modo che quando vengono selezionati i valori che portano alla colonna T impostiamo un messaggio e quando vengono selezionati i valori che portano alla colonna V un altro messaggio?

    Prova qualcosa del genere:

    '========>>

    Option Explicit

    '-------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, Rng2 As Range 
    
    Dim arrConvalida As Variant 
    
    Dim arr As Variant, arr2 As Variant 
    
    Dim Res As Variant, Res2 As Variant 
    
    Dim Res3 As VbMsgBoxResult 
    
    Dim sMsg As String, sTitolo As String 
    
    Const sIntervallo As String = "S2:S10" 
    
    Const sPrima\_Colonna\_Destinatione As String = "T"                    '<<=== Modifica 
    
    Const sSeconda\_Colonna\_Destinatione As String = "V"               '<<=== Modifica 
    
    Const sElenco As String = "alfa,beta,gamma"                               '<<=== Modifica 
    
    Const sElenco2 As String = "rosso,giallo,viola"                             '<<=== Modifica 
    
    Set Rng = Intersect(Me.Range(sIntervallo), Target) 
    
    If Not Rng Is Nothing Then 
    
        arr = Split(sElenco, ",") 
    
        arr2 = Split(sElenco2, ",") 
    
        Res = Application.Match(Rng.Value, arr, 0) 
    
        If Not IsError(Res) Then 
    
            Set Rng2 = Intersect(Rng.EntireRow, Me.Columns(sPrima\_Colonna\_Destinatione)) 
    
            sMsg = "**VorrestI selezionare la cella** " & Rng2.Address(0, 0) & "**?**" 
    
            sTitolo = "**COLONNA T !!**" 
    
        Else 
    
            Res2 = Application.Match(Rng.Value, arr2, 0) 
    
            If Not IsError(Res2) Then 
    
                Set Rng2 = Intersect(Rng.EntireRow, Me.Columns(sSeconda\_Colonna\_Destinatione)) 
    
                sMsg = "**Vai a cella "** & Rng2.Address(0, 0) & "**?**" 
    
                sTitolo = "**COLONNA V !!!**" 
    
            End If 
    
        End If 
    
        Res2 = MsgBox(Prompt:=sMsg, \_ 
    
                Buttons:=vbYesNo, \_ 
    
                Title:=sTitolo) 
    
            If Res2 = vbYes Then 
    
                Rng2.Cells(1).Select 
    
            End If 
    
        End If 
    

    End Sub

    '<<========

    In breve, puoi inserire qualsiasi testo adatto per sostituire il testo, evidenziato in grassetto, tra le virgolette.

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento
Risposta accettata dall'autore della domanda
  1. Anonimo
    2022-04-18T08:28:32+00:00

    Ciao Peppe,

    ho una colonna con delle celle con convalida dati.

    vorrei ottenere un messaggio di avviso in base alla selezione e dopo l'ok posizionarsi su una cella specifica:

    ad esempio

    se seleziono terreno dalla cella S2 msg vai a cella V2

    se seleziono acqua dalla cella S2 msg vai a cella W2

    se seleziono luce dalla cella S2 msg vai a cella X2

    e cosi via.

    Sarà possibile poi trascinando le celle ottenere automaticamente lo stesso risultato, altrimenti andrebbe bene anche il solo messaggio?

    se seleziono terreno dalla cella S3 msg vai a cella V3

    se seleziono acqua dalla cella S3 msg vai a cella W3

    se seleziono luce dalla cella S3 msg vai a cella X3

    Come dovrei scrivere il codice in vba?

    Prova qualcosa del genere:

    • Fai clic dx sulla linguetta del foglio di interesse
    • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
    • Incolla il seguente codice:

     '========>>

    Option Explicit

    '-------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rng As Range, Rng2 As Range 
    
    Dim arrConvalida As Variant 
    
    Dim Res As Variant 
    
    Const sIntervallo As String = **"S2:S10"                                          '&lt;&lt;=== Modifica**
    
    Const sPrima\_Colonna\_Destinatione As String = **"V:V"**                 **'&lt;&lt;=== Modifica**
    
    Set Rng = Intersect(Me.Range(sIntervallo), Target) 
    
    If Not Rng Is Nothing Then 
    
        If Left(Rng.Validation.Formula1, 1) = "=" Then 
    
            arrConvalida = Application.Transpose(Range(Rng.Validation.Formula1).Value) 
    
        Else 
    
            arrConvalida = Split(Rng.Validation.Formula1, ";") 
    
        End If 
    
        Res = Application.Match(Rng.Value, arrConvalida, 0) 
    
        If Not IsError(Res) Then 
    
        Set Rng2 = Intersect(Rng.EntireRow, Me.Columns(sPrima\_Colonna\_Destinatione)) 
    
            If Rng.Cells.Count = 1 Then 
    
                Rng2.Offset(0, Res - 1).Select 
    
            Else 
    
                Rng2.Offset(0, Res(1, 1) - 1).Cells(1).Select 
    
            End If 
    
        End If 
    
    End If 
    

    End Sub

    '<<========  

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel.
    • Salva il file con l'estensione xlsm

    Potresti scaricare il mio file di prova Peppe20220418.xlsm

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-04-18T12:58:54+00:00

    Ciao Norman, grazie ancora

    ho provato ma lo scenario purtroppo non si adatta al mio in quanto deve portarsi in una cella differente.

    Provo a spiegarmi meglio

    S T U V
    ESITO DATA RICHIESTA RICHIESTA REVOCA
    alfa 20/02/22 22222

    nella cella S2, Sn seleziono il valore dal convalida dati in altro foglio chiamato foglio1

    cosi composto

    alfa
    gamma
    rosso
    giallo
    viola
    nero

    e cosi via

    In S2 se cambio il valore deve:

    se selezione alfa deve portarsi in T2

    se selezione gamma deve portarsi in V2

    se selezione rosso deve portarsi in T2

    se seleziono giallo deve portarsi in V2

    se seleziono viola deve portarsi in T2

    se seleziono nero deve portarsi in V2

    Grazie ancora

    0 commenti Nessun commento
  2. Anonimo
    2022-04-18T09:32:36+00:00

    Ciao Peppe,

    ho seguito indicazione,

    ma la mia convalida viene presa da un altro foglio di nome Foglio1 ed esce l'errore probabilmente per questo motivo

    Immagine

    evidenziando di giallo arrConvalida = Application.Transpose(Range(Rng.Validation.Formula1).Value)

    in alternativa penso vada bene anche soltanto la msg box che avvisa cosa fare

    Grazie ancora

    Prova a sostituire il tuo codice con la seguente versione:

    '========>>

    Option Explicit

    '-------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim SH\_Lista\_Convalida As Worksheet 
    
    Dim Rng As Range, Rng2 As Range 
    
    Dim arrConvalida As Variant 
    
    Dim Res As Variant 
    
    Dim Res2 As VbMsgBoxResult 
    
    Const sIntervallo As String = "S2:S10" 
    
    Const sPrima\_Colonna\_Destinatione As String = "V:V" 
    
    Const sFoglio\_Convalida As String = "Foglio2" 
    
    Set Rng = Intersect(Me.Range(sIntervallo), Target) 
    
    If Not Rng Is Nothing Then 
    
    Set SH\_Lista\_Convalida = ThisWorkbook.Sheets(sFoglio\_Convalida) 
    
        If Left(Rng.Validation.Formula1, 1) = "=" Then 
    
            arrConvalida = Application.Transpose(SH\_Lista\_Convalida.Range(Rng.Validation.Formula1).Value) 
    
        Else 
    
            arrConvalida = Split(Rng.Validation.Formula1, ";") 
    
        End If 
    
        Res = Application.Match(Rng.Value, arrConvalida, 0) 
    
        If Not IsError(Res) Then 
    
            Set Rng2 = Intersect(Rng.EntireRow, Me.Columns(sPrima\_Colonna\_Destinatione)) 
    
            If Rng.Cells.Count = 1 Then 
    
                Res2 = MsgBox(Prompt:="Vai a cella " & Rng2.Offset(0, Res - 1).Address(0, 0) & "?", \_ 
    
                    Buttons:=vbYesNo, \_ 
    
                    Title:="REPORT") 
    
                If Res2 = vbYes Then 
    
                    Rng2.Offset(0, Res - 1).Select 
    
                End If 
    
            Else 
    
                Res2 = MsgBox(Prompt:="Vai a cella " & Rng2.Offset(0, Res - 1).Address(0, 0) & "?", \_ 
    
                    Buttons:=vbYesNo, \_ 
    
                    Title:="REPORT") 
    
                If Res2 = vbYes Then 
    
                    Rng2.Offset(0, Res(1, 1) - 1).Cells(1).Select 
    
                End If 
    
            End If 
    
        End If 
    
    End If 
    

    End Sub

    '<<========

    Ho aggiornato il mio file di prova Peppe20220418.xlsm

    A causa di un problema con l'attuale editor del forum, che inserisce righe vuote indesiderate nel codice copiato dal forum, suggerirei di copiare il mio codice direttamente dal mio file di prova.

    ===

    Regards,

    Norman

    Immagine

    0 commenti Nessun commento
  3. Anonimo
    2022-04-18T09:09:15+00:00

    Ciao,

    ho seguito indicazione,

    ma la mia convalida viene presa da un altro foglio di nome Foglio1 ed esce l'errore probabilmente per questo motivo

    Immagine

    evidenziando di giallo arrConvalida = Application.Transpose(Range(Rng.Validation.Formula1).Value)

    in alternativa penso vada bene anche soltanto la msg box che avvisa cosa fare

    Grazie ancora

    0 commenti Nessun commento