• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Zoeken naar 2 criteria in 1 rij, vba

Status
Niet open voor verdere reacties.

mary1995

Gebruiker
Lid geworden
2 mei 2013
Berichten
46
Hallo,

Daar ben ik weer met een klein probleempje, ik vermoed dat het iets kleins is. Maar ik kom er zelf niet helemaal meer uit.

Bij een exceldocument moet er gezocht worden naar 2 criteria vanuit cel D6 en D8 in een ander tabblad naar de eerste rij vanuit onder gezocht die hieraan voldoet.
Daarna moeten er wat gegevens gewijzigd worden, maar dat is voor mij geen probleem.

Het probleem zit hem meer erin dat het wel lukt om te zoeken met 1 waarde, maar dat het niet lukt om de tweede hieraan toe te voegen.

Zodra aan beide voorwaarde is voldaan mag er pas gewijzigd worden.

Wat ik nu heb is dit, ik heb al iets geprobeerd met and of &, maar daar lukte het niet mee:


Code:
Private Sub CommandButton3_Click()
    Dim i As Long
    With Sheets("Tarieflijst")
    
    Set klant = .Range("A:P").Find(Range("D6"), .Range("A2"), xlValues, xlWhole)
    
        
    If Not klant Is Nothing Then
    werkbij klant.Row
    
    End If
    End With
        
End Sub


Code:
Sub werkbij(rij As Long)
With Sheets("Tarieflijst")



      .Cells(rij, 16) = Range("D27").Value

End With


End Sub

Alvast bedankt voor tips om het wel werkend te krijgen!
 
Laatst bewerkt:
Maak eerst duidelijk waar je exact naar zoekt met die 2e optie.
Plaats tevens je code in code tags in plaats van quote tags.
 
Wat ik dus zoek is dat er in een tabblad gezocht wordt naar D6 en D8 als aan beide voorwaarde is voldaan dan moeten er aanpassingen gedaan worden. Zoals ik al zei die aanpassingen is niet het probleem. Er moet uiteindelijk nog meer gebeuren dan alleen die ene celwaarde aanpassen, maar dat voeg ik later toe als het eerste gedeelte werkt.

Als de Find functie bijvoorbeeld op meerdere waarde zou kunnen zoeken dan zou het dus zo eruit moeten zien (de roodgekleurde D8, is toegevoegd):


Code:
Private Sub CommandButton3_Click()
        With Sheets("Tarieflijst")
        
    
    Set klant = .Range("A:P").Find(Range("D6,[COLOR="#FF0000"]D8[/COLOR]"), .Range("A2"), xlValues, xlWhole)
    
        
    If Not klant Is Nothing Then
    werkbij klant.Row
    
    End If
    End With
End Sub

Code:
Sub werkbij(rij As Long)
With Sheets("Tarieflijst")

      .Cells(rij, 16) = Range("D27").Value

End With


End Sub
 
Inmiddels ben ik wel weer een stap verder met de volgende code:

Code:
Private Sub CommandButton1_Click()

Dim i As Long
        With Sheets("Tarieflijst")
        
        Set klant = .Range("A:P").Find((Range("D6")), after:=Sheets("tarieflijst").Range("A2"), SearchOrder:=xlByRows, searchdirection:=xlPrevious)
        Set klant = .Range("A:P").Find((Range("D8")), after:=Sheets("tarieflijst").Range("A2"), SearchOrder:=xlByRows, searchdirection:=xlPrevious)
    
    If Not klant Is Nothing Then

    
    werkbij klant.Row
    
     For i = 2 To 1048576
                If .Cells(i, 2) = "" Then Exit For
                Next i
                BewerkKlant i
               'msgbox
        MsgBox ("Klant toegevoegd en bijgewerkt")
               Else
            'Nieuwe klant toevoegen
            If MsgBox("Nieuwe klant toevoegen?", vbYesNo) = vbYes Then
                For i = 2 To 300
                    If .Cells(i, 2) = "" Then Exit For
                Next i
                BewerkKlant i
                
                'msgbox
                MsgBox ("Klant toegevoegd")
            End If

    End If
    End With
    

End Sub

Heb dus dezelfde code eronder geplaatst, maar nu zoekt die of het een of het ander. In ieder geval klopt die nog niet helemaal.
 
Laatst bewerkt:
Logisch. Je maakt 2x het zelfde object aan. Dan geldt alleen de laatste.
 
Klinkt ook super logisch ja :eek:

Maar hoe kan je dan het beste die twee zoektermen "koppelen" om het zo even te noemen.
 
Bij gebrek aan een voorbeeld bestandje ….misschien met Countifs??
Code:
With Sheets("Tarieflijst")
  If WorksheetFunction.CountIfs(.Range("A:P"), .Range("D6"), .Range("A:P"), .Range("D8")) > 0 Then
'    .......
  End If
End With

Is eigenlijk wel raar om in een bereik te zoeken waar je zoekwaarde al in staat :confused:
 
Laatst bewerkt:
Bedankt voor de reactie, ik zal morgen even kijken of dit werkt.
Het lijkt nu alsof je in 1 en hetzelfde sheet zit. Maar de zoektermen zitten in een andere sheet dan waar gezocht wordt. Beetje lastig uit te leggen, maar het zit niet in hetzelfde bereik ;) ik laat morgen even weten of het is gelukt!
 
Verwijs daar dan naar
Code:
With Sheets("Tarieflijst")
  If WorksheetFunction.CountIfs(.Range("A:P"), Sheets("Ander tabblad").Range("D6"), _
                                .Range("A:P"), Sheets("Ander tabblad").Range("D8")) > 0 Then
'    .......rest van je code
  End If
End With
 
Laatst bewerkt:
Ik heb het geprobeerd, maar dat werkt niet. Net zag ik dus ook dat dit hetzelfde is aantal als... Maar dat is ook wat ik niet moet hebben.
Om het nog even duidelijker te maken heb ik een voorbeeldbestandje toegevoegd.

Bekijk bijlage Trifact facturering leeg.xlsm

De code zit achter het blad Klant toevoegen. Het moet dus zoeken op het blad Tarieflijst naar D6 en D8 en dat gebeurt vanuit het blad klant toevoegen.
 
Als ik een bestaand klantnr en een bestaand jaar in vul werkt het bij mij wel.
 

Bijlagen

  • Trifact facturering leeg (1).xlsb
    51,2 KB · Weergaven: 64
Dan heb ik niets gezegd :D Bedankt voor de controle! dan zit er dus even verder iets niet goed, maar daar kom ik dan wel uit :)
 
Ik kom er toch nog niet helemaal uit, de functie werkt perfect. Maar nu is het stukje code: set klant = eruit gehaald.
Op zich geen probleem maar dan pakt excel het stukje: werkbij klant.row niet meer.

Ik heb wat pogingen gedaan om dat er weer bij te voegen, maar tot op heden lukt mij dat nog niet. Zou hier iemand nog naar willen kijken? Ik vermoed dat het daarna wel gewoon werkt.

Ook om de code die dan uitgevoerd moet worden ervoor in de plaats te zetten werkt ook niet helemaal.
 
Zo?
Code:
Private Sub CommandButton1_Click()
  With Sheets("Tarieflijst")
  
    If WorksheetFunction.CountIfs(.Columns(1), Sheets("Klant toevoegen").Range("D6"), _
                                  .Columns(14), Sheets("Klant toevoegen").Range("D8")) > 0 Then
        MsgBox "Klant bestaat al"
    Else
        VoegToe
    End If
    
  End With
        
End Sub
Sub VoegToe()
    With Sheets("klant toevoegen")
        Sheets("Tarieflijst").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 16) = Array(.Range("D6").Value, .Range("D7").Value, .Range("D9").Value, .Range("D10").Value, _
        .Range("D13").Value, .Range("D15").Value, .Range("D19").Value, .Range("D21").Value, .Range("D25").Value, .Range("D29").Value, _
        .Range("D30").Value, .Range("D31").Value, .Range("D32").Value, .Range("D8").Value, .Range("D27").Value, .Range("D28").Value)
        .Range("D6,D8,D9,D12,D15,D17,D18,D21,D23,D24,D27,D28").ClearContents
    End With
End Sub
 
Laat ik het even anders uitleggen.

Als een klant al bestaat met hetzelfde jaar. Dan moet de regel laatste regel in de Tarieflijst die voldoet aan deze waarde aangepast worden. Dat gebeurd dus in het volgende stukje van de betreffende code (nadat die gezocht heeft naar de waarde):
Code:
If Not klant Is Nothing Then
 werkbij klant.Row

   For i = 2 To 1048576
               If .Cells(i, 2) = "" Then Exit For
                Next i
                BewerkKlant i
               'msgbox
        MsgBox ("Klant toegevoegd en bijgewerkt")

En met werkbij klant.Row de volgende code:

Code:
Sub werkbij(rij As Long)
With Sheets("Tarieflijst")

      .Cells(rij, 16) = Range("D27").Value - _
      1          'eind maand aanpassen
     
     .Cells(rij, 10) = .Cells(rij, 16).Value - .Cells(rij, 15).Value + _
     1 'aantal maanden aanpassen
     
     .Cells(rij, 11) = (.Cells(rij, 5).Value + .Cells(rij, 7).Value + .Cells(rij, 9).Value) / 12 * .Cells(rij, 10).Value 'totaal bedrag excl. btw herberekenen
          
     .Cells(rij, 12) = .Cells(rij, 11).Value * 0.21  'btw bedrag herberekenen
     
     .Cells(rij, 13) = .Cells(rij, 11).Value + .Cells(rij, 12).Value 'totaal bedrag excl. btw herberekenen

End With


End Sub

Vervolgens als die dit heeft uitgevoerd moet die alsnog de regel weer bijvoegen. Wat dan ook gebeurd. Als de klant nog niet bestaat met het betreffende jaar. Moet de rij alleen toegevoegd worden. En voor de rest geen bewerkingen meer worden uitgevoerd.

Het is dus puur de code bijwerk klant.row dat die nu niet oproept en wel moet doen. Voor de rest doet de code wat hij moet doen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan