Convalida dati e cerca verticale "dinamico"

Eccomi di nuovo a solcare questi lidi...


Ho sul foglio 1 una serie di dati: in colonna A dei codici numerici, in formato testo, tipo 0001; in colonna B invece il prodotto associato, ad esempio papaveri.

Sul foglio 2 ho creato degli elenchi a discesa con la convalida dati, elenco.

Bene vorrei poter inserire i dati utilizzando uno dei due elenchi a discesa; una volta inserito, colonna A2, il codice 0001, in B2 mi deve scrivere papaveri; oppure devo poter scrivere in B2 papaveri e in A2 mi compare il codice 0001. In poche parole devo creare una macro che, una volta inserito un valore nella colonna A, crei un cerca vert per B e viceversa.


Grazie e buona serata a tutti!







 

Informazioni domanda


Ultimo aggiornamento luglio 24, 2018 Visualizzazioni 1.584 Si applica a:
Risposta

Buongiorno Mauro il file indicato é già molto utile ma io cercavo qualcosa di simile.


Mi spiego nel tuo foglio convalida devo poter inserire indifferentemente i dati sia nella colonna A che nella colonna B. A questo punto una macro mi dovrà trovare il corrispondente dato (un cerca vert) della colonna vuota.


Ad esempio mi ricordo il codice cliente ed in A inserisco 0001, in automatico in B mi viene scritto Porsche; oppure non lo ricordo e quindi cercherò nella colonna B Porsche (alt+freccia giù) e in automatico in A compare il codice 0001.


Grazie




Proviamo....

Foglio2 con tabella in A(n):B(n)

Devono avere un nome entrambe le colonne della tabella(qui DatoA e DatoB).

In Foglio1, colonne A e B voglio selezionare un dato tramite una convalida e in base alla scelta fatta, mettere il dato nella colonna a fianco.

Questo il codice da mettere nel modulo di codice del Foglio1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   
    If Target.Cells.Count > 1 Then Exit Sub
   
    Dim sh As Worksheet
   
    Set sh = ThisWorkbook.Worksheets("Foglio2")
    Me.Cells.Validation.Delete
   
    With Target
        If .Column = 1 Then
            With .Validation
                .Add Type:=xlValidateList, _
                    AlertStyle:=xlValidAlertStop, _
                    Operator:=xlBetween, _
                    Formula1:="=DatoA"
            End With
        ElseIf .Column = 2 Then
            With .Validation
                .Add Type:=xlValidateList, _
                    AlertStyle:=xlValidAlertStop, _
                    Operator:=xlBetween, _
                    Formula1:="=DatoB"
            End With
        End If
    End With
   
    Set sh = Nothing
   
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Cells.Count > 1 Then Exit Sub
    On Error Resume Next
    If Target.Validation.Formula1 = "" Then Exit Sub
    If Err.Number <> 0 Then Exit Sub

    Dim rng As Range
   
        If Target.Column = 1 Then
            Set rng = Foglio2.Range("DatoA").Find( _
                What:=Target.Value, _
                LookAt:=xlPart, _
                LookIn:=xlValues)
            If Not rng Is Nothing Then
                Target.Offset(0, 1).Value = rng.Offset(0, 1).Value
            Else
                MsgBox "Non trovato"
                Target.Offset(0, 1).Value = ""
            End If
        ElseIf Target.Column = 2 Then
            Set rng = Foglio2.Range("DatoB").Find( _
                What:=Target.Value, _
                LookAt:=xlPart, _
                LookIn:=xlValues)
            If Not rng Is Nothing Then
                Target.Offset(0, -1).Value = rng.Offset(0, -1).Value
            Else
                MsgBox "Non trovato"
                Target.Offset(0, -1).Value = ""
            End If
       End If

      
    Set rng = Nothing
      
End Sub

Prova un po' e poi nel caso andiamo avanti.

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.