een aparte tabel maken met rijen waar waarde VLOOKUP = #N/B

Status
Niet open voor verdere reacties.

anjaddijkstra

Gebruiker
Lid geworden
21 aug 2020
Berichten
32
Hallo,

Ik heb 2 Excel bestandjes waarbij ik het klantnummer uit het relatiebestand haal met een VERT.ZOEKEN (VLOOKUP in VBA) op basis van het e-mailadres. Nu komt het soms voor dat het e-mail adres niet gevuld is in het adressenbestand of dat de klant daar nog niet is aangemaakt (dus nog geen klantnummer heeft).
Kan ik in deze macro een overzicht produceren waarin deze relaties naar voren komen? Mag met een pop-up of met een excel/csv bestandje waarin dan die rijen worden gekopieerd.
Zo heb ik een overzicht welke klanten ik nog in het relatiebestand moet zetten om de ontbrekende waarden te vullen.

Dus:
1. Bestelformulieren bevat adresgegevens en emailadres
2. Relatiebestand bevat relatiegegevens met relatiecode en e-mailadres.

Ik moet de relatiecode in het bestand bestelformulieren zien te krijgen.
 
Dat lijkt me geen probleem.
 
Zonder voorbeeld documentjes in ieder geval niet.
 
Begrijp ik goed dat je wilt controleren of de email adressen die in het csv bestand staan ook voor komen in het xlsm document?
 
Eigenlijk net andersom: ik moet de gegevens uit het csv bestand halen in het xlsm bestand, dus moet in het xlsm bestand kijken of de gegevens wel voorkomen in het csv bestand (en het liefst hier op een of andere manier een overzichtje van reproduceren).
 
Je wilt dus een lijstje met email adressen uit het xlsm bestand die niet in de csv aanwezig zijn?
 
Zet beide bestanden in dezelfde map en druk op de knop Check CSV:
 

Bijlagen

Top! Dit is inderdaad de bedoeling.

Ik heb de code inmiddels overgezet naar mijn eigen bestand (omdat ik daar al meer wijzigingen in gedaan had). Nu loop ik er tegenaan dat hij in de pop up mailadressen noemt die wel degelijk in het bestand voorkomen. De code heb ik iets aangepast, omdat het mailadres inmiddels niet meer in kolom F staat, maar in kolom I. En het adressenbestand heet anders (dit is een veel groter bestand met dik 700 adressen dat ik omwille van de AVG niet hier kan plaatsen).

Enig idee waar dit fout kan gaan? In de pop-up zie ik wel mailadressen, dus het lijkt er op dat het met het adressenbestand te maken heeft.

Code:
Sub EmailCheck()
    Dim Regel As String
    Dim ch1 As Integer
    Dim rnr As Integer
    Dim lst As String
    
    ch1 = FreeFile
    Open ThisWorkbook.Path & "\RelatiesSparrow.csv" For Input As #ch1
    Line Input #ch1, Regel
    While Not EOF(ch1)
        Line Input #ch1, Regel
        ReDim Preserve eml(rnr)
        eml(rnr) = Split(Regel, ";")(0)
        rnr = rnr + 1
    Wend
    Close #ch1

    For rnr = 2 To Range("I2").End(xlDown).Row
        If Not InCSV(Cells(rnr, 9)) Then
            If InStr(1, lst, Cells(rnr, 9)) = 0 Then
                lst = lst & Cells(rnr, 9) & vbCrLf
            End If
        End If
    Next rnr
    
    MsgBox lst, vbOKOnly, "Niet in relatiebestand"
End Sub
 
Hij kan een adres alleen tonen als de InCSV functie een False terug geeft.

Vanwege de hoeveelheid adressen heb ik die functie nog iets aangepast:
Code:
Function InCSV(Adres As String) As Boolean
    Dim i As Integer
    For i = 0 To UBound(eml)
        If Adres = eml(i) Then
            InCSV = True
            Exit For
        End If
    Next i
End Function
 
Laatst bewerkt:
In eerste instantie dacht ik dat het nog steeds niet werkte, maar bleek dat het csv bestand met alle adressen was opgeslagen als unicode tekstbestand (met andere scheidingstekens, tab?). Ik heb het bestand als .csv met ; opgeslagen en nu doet 'ie wat ik wil.

Super bedankt!
 
Om het nog mooier te maken, kan het ook zo dat
- de melding niet verschijnt wanneer alle emailadressen voorkomen
- de macro stopt wanneer er emailadressen niet gevonden worden
 
De melding kan zo:
Code:
If Len(lst) > 0 Then MsgBox lst, vbOKOnly, "Niet in Relatiebestand"

De functie zoals in #12 stopt als een email adres is gevonden.
Hij gaat dan niet de andere adressen in het CSV bestand controleren.
Of bedoel je dat niet?
 
Laatst bewerkt:
Nee, niet echt. Ik heb een macro gemaakt die alle Declaraties (of hoe noem je dat) achter elkaar uitvoert. Kan het zo dat wanneer er mailadressen niet gevonden worden (dus wanneer er ontbrekende mailadressen zijn) deze hele exercitie stopt? Of wordt dat erg lastig?
Code:
Sub Uitvoeren()
'Macro's uitvoeren
    Call VerwijderExpired
    Call KolommenAanpassen
    Call EmailCheck
    Call RelatiecodeVullen
    Call RegelsDupliceren
    Call OrderregelsVullen
    Columns("G:I").Delete
End Sub
 
Laatst bewerkt door een moderator:
Waar wordt dan een email adres niet gevonden?
 
Sorry, niet duidelijk ;) Ik bedoel dat wanneer de msg box een waarde terug geeft van niet gevonden in relatiebestand.
 
Laatst bewerkt door een moderator:
Je wilt dus niet het hele lijstje zien maar direct het email adres dat niet in het CSV bestand staat?
 
Hij kan een adres alleen tonen als de InCSV functie een False terug geeft.

De eerder gemaakte functie gaat helemaal goed, daar ben ik helemaal blij mee!

Nu zou ik graag (om het nog mooier te maken) willen dat er iets gebeurt wanneer InCSV geen False heeft gevonden.

Wanneer alle genoemde adressen in het orderbestand voorkomen in het CSV bestand dan hoeft de MsgBox niet te verschijnen, maar kan de rest van de macro gewoon uitgevoerd worden.
Wanneer er echter wél False wordt gevonden (en de MsgBox wel verschijnt met de mailadressen die niet in het relatiebestand zitten), dan zou het mooi zijn als de macro "Uitvoeren" ook stopt met het bewerken van het bestand.

Het kan namelijk voorkomen dat adressen wel allemaal al zijn aangemaakt in het relatiebestand.

Hoop dat het zo (iets) duidelijker is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan