Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Confrontare colonne in tempo reale

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

Confrontare colonne in tempo reale

Postdi Belvel » 06/12/20 20:07

Salve
sto provando a scrivere una macro, ma senza successo, che mi permetta in tempo reale di confrontare la colonna A del foglio2 con quello che scrivo in tempo reale in colonna A nel foglio1.

In pratica ogni cella della colonna A del foglio 2 contiene dei codici propdotto (sono lettere e numeri tipo: ASD22KL) e vorrei che in colonna A del foglio1 se scrivo un qualcosa che non coincida con l'intero codice prodotto presente in una delle celle della colonna A del foglio2 mi esca un avviso che dica "prodotto non esistente".

in pratica se io scrivo "ASD22KL" in una qualunque cella della colonna A del foglio 1, la macro deve cercare se "ASD22KL" sia presente in una qualunque cella della colonna A del Foglio2. Se è presente allora nulla, altrimenti mi deve dare il messaggio "Prodotto non presente".

Il tutto deve avvenire in tempo reale, cioè subito dopo aver scritto "ASD22KL" e premuto invio. Inoltre la macro non si deve fermare una volta trovata la parola inesistente, ma deve continuare perchè, essendo un inserimento prodotti, potrebbero essere digitati altri prodotti non presenti rispetto a quelli in colonna A foglio2.

Ovviamente i codici prodotto presente in colonna A del foglio2 non sono mai uguali, hanno la stessa lunghezza ma chiaramente la sequenza lettere numeri è diversa per ogni prodotto.

Ho provato a scrivere così la macro che ho copiato nel codice del foglio1 ma mi fa uscire il messaggio "prodotto non presente" sia che il codice prodotto sia presente in foglio2 sia che non lo sia.

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim uriga, uriga1 As Long
Dim i, e As Integer


uriga = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
uriga1 = Sheets("Foglio2").Range("A" & Rows.Count).End(xlUp).Row


inizio:
For i = 1 To uriga
   
        If uriga & i <> uriga1 & i Then
        MsgBox "Prodotto non presente", vbInformation, "NOTIFICA"
        Else
       
        Exit Sub
        End If
    Next
End Sub




fine:

End Sub


Grazie per un aiuto.
Belvel
Belvel
Utente Junior
 
Post: 53
Iscritto il: 08/02/18 18:47

Sponsor
 

Re: Confrontare colonne in tempo reale

Postdi Anthony47 » 07/12/20 02:10

Ma questo e' il tipico lavoro da fare tramite "Convalida Dati", in particolare la convalida da Elenco, dove l'elenco e' la lista contenuta in Foglio2!A1:A1000

Per qualche informazione in piu' su questa prestazione:
https://support.microsoft.com/it-it/off ... f3ce5f7249
https://support.microsoft.com/it-it/off ... 5f6e1f0c4c

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

Re: Confrontare colonne in tempo reale

Postdi Belvel » 08/12/20 18:45

grazie Anthony, in effetti con il convalida dati elenco è vero che se inserisco un prodotto diverso mi esce il messaggio ma nel mio caso mi sarebbe piaciuto avere una vera e propria macro anche perchè non gradisco la presenza dell'elenco a discesa su ogni singola cella del foglio1 colonna A. Comunque, grazie lo stesso per la dritta.
Saluti
Belvel
Belvel
Utente Junior
 
Post: 53
Iscritto il: 08/02/18 18:47

Re: Confrontare colonne in tempo reale

Postdi Anthony47 » 09/12/20 00:21

Se è "l'elenco a discesa" che non ti piace, allora tieni presente che in fase di applicazione della convalida puoi scegliere se farlo visualizzare o no; comunque anche in presenza dell'elenco a discesa l'input puo' avvenire in modo tradizionale da tastiera.
Insomma non vedo il vantaggio a usare una macro per una prestazione che la licenza pagata gia' ti offre.

Comunque se vuoi una macro, allora prova con questa:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ckArea As String, myC As Range
'
ckArea = "A2:A1000"                                  '<<< Le celle di Foglio1 da controllare
For Each myC In Target
    If Not Application.Intersect(myC, Range(ckArea)) Is Nothing And myC.Value <> "" Then
        Application.EnableEvents = False
        If Application.WorksheetFunction.CountIf(Sheets("Foglio2").Range("A1:A1000"), myC.Value) = 0 Then
            MsgBox ("Il dato in " & myC.Address(0, 0) & " non e' in elenco; operazione Annullata")
            Application.Undo
            Exit For
        End If
    End If
Next myC
Application.EnableEvents = True
End Sub

Va messa nel modulo vba di Foglio1:
-tasto dx sul tab col nome Foglio1, scegli Visualizza codice per aprire l'editor delle macro alla posizione giusta; incolla il codice nel frame vuoto di destra. Per altre informazioni, vedi viewtopic.php?f=26&t=103893&p=647675#p647675
La riga marcata <<< va personalizzata come da commento

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

Re: Confrontare colonne in tempo reale

Postdi Belvel » 09/12/20 01:42

Fantastico Anthony!!!! Era proprio quello che intendevo
Non so come ringraziarti
Apprezzo tantissimo
Saluti
Belvel
Belvel
Utente Junior
 
Post: 53
Iscritto il: 08/02/18 18:47


Torna a Applicazioni Office Windows


Topic correlati a "Confrontare colonne in tempo reale":


Chi c’è in linea

Visitano il forum: zsadist e 26 ospiti