• 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.

Offerte maken door in tabblad data de hoeveelheid in te voeren

Status
Niet open voor verdere reacties.

Fredemel

Gebruiker
Lid geworden
2 jun 2008
Berichten
114
Geachte leden,

Ik heb een tabblad "data" waar in kolom "C" aantallen gezet worden die die een klant wenst.
In het Tabblad "Offerte" wil ik alleen DIE artikelen in een lijst hebben waarbij een "aantal" is ingevuld.
Uiteraard met alle andere data in die regel.

Wie o Wie heeft een oplossing. Liefst ZONDER VBA, maar als het niet anders kan......... is ook die oplossing zeer welkom.

Bekijk bijlage offerte DmvAantallenInAnderTabblad.xlsm

Mvg Fred
 
Zoiets als in bijlage?

Let op: de formules in kolom B zijn matrixfuncties, d.w.z. afsluiten met Control+Shift+Enter (C-S-E) na invoeren/wijzigen/doorvoeren.
 

Bijlagen

  • offerte DmvAantallenInAnderTabblad (AC).xlsm
    20 KB · Weergaven: 52
AlexCEL,.......

Kei-j bedankt!

Nog 2 verzoeken:
1) Wil me aub de matrix-formule uitleggen {=ALS.FOUT(INDEX(data!D:D;KLEINSTE(ALS(myAantal<>"";RIJ(myAantal);9^9);RIJ(A1)));"")}
Met name: ";9^9" wat wil dat zeggen? Ik wil het graag begrijpen....
2) Het zoekbereik is verdeeld over meerdere kolommen.... :-(( (zie bijlage)
Kan dat met een matrix-formule? Of zal er toch VBA aan te pas moeten komen...?

Bekijk bijlage offerte DmvAantallenInAnderTabblad_2Bereiken.xlsm

Vriendelijk dank alvast!
 
De volgende vraag zal waarschijnlijk zijn, ja maar ik heb 10 bereiken... wat nu? Om complexe formules te vermijden zou ik je data ook als "database" opzetten. Onder elkaar dus! Van daaruit kan je alle gewenste tabellen en lijsten maken. De basis dient een prijslijst te zijn.

De matrixfunctie doet grofweg het volgende:
1. Per rij wordt bekeken of er een getal staat bij aantal, zo ja plaats deze het rijnummer in de matrix, zo nee een groot getal (9 tot de macht 9: 9^9 = 387420489). Uitkomst is bijvoorbeeld de matrix "9^9;2;3;9^9;9^9;..."
2. M.b.t. de functie KLEINSTE wordt bepaald wat het laagste rijnummer is in de matrix met een waarde. KEINSTE({matrix];k) met bovenstaande matrix en k=RIJ(A1)=1 geeft als uitkomst 2.
3. M.b.t. het rijnummer zoekt de INDEX functie het bijbehorende productcode op.
4. Bij doortrekken van deze functie volgt de op 1-na-kleinste (k=RIJ(A2)=2) (in dit geval 3), op 2-na-kleinste (k=RIJ(A3)=3) (in dit geval 9^9) etc. waarde, en de INDEX-functie weer de bijbehorende productcode.
5. in dit geval zou je in RIJ(3) een verwijzingsfout krijgen omdat het op "2-na-kleinste" getal 9^9 is. Er geen rijnummers van rijen met getallen meer in de matrix. Met de ALS.FOUT wordt dan een lege cel geplaatst.
 
Laatst bewerkt:
AlexCel,

wederom bedankt....! Ook voor de uitleg van de matrix formule.
Het schermvullende lay-out wil ik toch graag behouden, hoewel ik de voordelen van een (excel)database begrijp.

Ik ga zelf stoeien met gebruik van jouw oplossingen. Nogmaals bedankt voor je hulp/oplossing....!

Ik zal dit bericht nog even in de lucht laten. Kijken of anderen een alternatief hebben. Misschien in VBA.

Mvg Fred
 
Waarom wil je de aantallen invoeren in de tab 'Data'? Lijkt mij de omgekeerde wereld.
 
Laatst bewerkt:
VenA,

Er zijn meerdere opties mogelijk, alleen de gebruiker dient in "data" een overzicht te zien, WAT hij/zij invoert.
IN tabblad "data" komen vanuit andere tabbladen meer info. Die wordt dus al gevuld met andere gegevens.
Ik zal de 2 belangrijkste tabbladen als bijlage toevoegen, om een beeld te krijgen.

In ieder geval bedankt voor uw inbreng.

Mvg Fred

Bekijk bijlage probleemFredemel.xlsm
 
Laatst bewerkt:
Waarvoor dient kolom A in tabblad Offerte (010, 020, etc.).
 
Voortbordurend op de eerder geboden oplossing in #2, hierbij een variant met een (verborgen) hulpblad. Op dit hulpblad wordt een lijst gemaakt van de gegevens op het invulblad. Deze lijst dient als vervolgens als input voor de matrixfunctie. Bekijk maar eens.

PS ik heb enkele VO-condities met koppelingen naar externe bestanden uit je voorwaardelijke opmaak gehaald.
 

Bijlagen

  • probleemFredemel (AC).xlsm
    34,2 KB · Weergaven: 61
Laatst bewerkt:
AlexCEL,

bedankt voor deze oplossing. Zo lukt het inderdaad om matrix-formules te gebruiken.
Na het weekend zal ik deze vraag op "opgelost" zetten. Kijken wat het nog meer brengt ;-))
 
HSV,

bedankt voor je reactie.
De data in kolom A is voor het inlezen in een plotter-Machine.

Is er iemand die een VBA - oplossing weet?
 
bv

Code:
Sub VenA()
ar = Sheets("data").Range("C7:Q37")
ReDim ar1(60, 5)
  For j = 1 To UBound(ar)
    If ar(j, 1) <> "" Then
      ar1(t, 0) = ar(j, 2)
      ar1(t, 1) = ar(j, 3)
      ar1(t, 2) = ar(j, 4)
      ar1(t, 3) = ar(j, 5)
      ar1(t, 4) = ar(j, 1)
      ar1(t, 5) = ar(j, 6)
      t = t + 1
    End If
    If ar(j, 10) <> "" Then
      ar1(t, 0) = ar(j, 11)
      ar1(t, 1) = ar(j, 12)
      ar1(t, 2) = ar(j, 13)
      ar1(t, 3) = ar(j, 14)
      ar1(t, 4) = ar(j, 10)
      ar1(t, 5) = ar(j, 15)
      t = t + 1
    End If
  Next j
  Sheets("Offerte").Cells(4, 1).CurrentRegion.Offset(, 1).ClearContents
  Sheets("Offerte").Cells(4, 2).Resize(t, 6) = ar1
End Sub
 
Of:
Code:
Private Sub Worksheet_Activate()
Dim sv, area As Range, i As Long, n As Long
sv = Sheets("data").Range("c7:q37")
ReDim arr(UBound(sv) * 2, 5)
For Each area In Sheets("data").Range("c7:h37, l7:Q37").Areas
  sv = area
    For i = 1 To UBound(sv)
       If sv(i, 1) > 0 Then
          arr(n, 0) = sv(i, 2)
          arr(n, 1) = sv(i, 3)
          arr(n, 2) = sv(i, 4)
          arr(n, 3) = sv(i, 5)
          arr(n, 4) = sv(i, 1)
          arr(n, 5) = sv(i, 6)
        n = n + 1
       End If
     Next i
 Next area
   Range("b4").CurrentRegion.Offset(, 1).ClearContents
   Range("b4").Resize(n, 6) = arr
End Sub
 
AlexCEL en HSV,

Die "2 hersencellen" van mij bevatten jullie oplossing voor een deel.
En daar ben ik al blij mee! Ze lossen beide mijn probleem/uitdaging op.
Heel erg bedankt hier voor! Nu nog kijken of ik het voor een 100% zal gaan begrijpen.

Ik zal mijn vraag op "opgelost" zetten.
(Graag tot een volgende keer) ;)
 
HSV,

ik probeer dus de code te begrijpen.
Waarom is er geen variabele voor het tabblad "Offerte"?
Ik denk dat "Next area" dit realiseert.... Toch....?

Hoe maak ik dit absoluut? Dat er gekopieerd wordt uit tabblad "data" en geplakt wordt in tabblad "Offerte" (in het gestelde bereik).
Dit vanwege andere bestanden waar ik deze formule ook wil gaan gebruiken.
En dan hoop ik dat de aanpassingen mij lukt........ :(

Ik hoor/lees graag van je. Gr Fred
 
Doordat bij sheet_activate de code in werking treedt.
Een range aanduiding zonder het blad te benoemen heeft betrekking op het activesheet.
 
HSV,

als ik in het tabblad "data" de macro start, wordt het dus een zooitje. Van alles wordt overschreven.
Door sheet("offerte").activate vóór de loop te zetten, klopt wel alles.

Thanks, eenieder die gereageerd heeft. Het werkt......!!!

Ik ga de vraag op "opgelost" zetten.
 
Je moet de code plaatsen in bladmodule 'Offerte' <> module invoegen.
 
Je weet nu dat je de code niet vanaf blad 'Data' kan starten?
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan