Matériel informatique neuf & usagé

Laptops, PC bureau, téléphones, tablettes, câbles et accessoires — tous testés, garantis et livrés rapidement.

Produits garantis Livraison disponible Commande via WhatsApp Retour 7 jours
12 produits trouvés

Vous ne trouvez pas ce que vous cherchez ?

Nous pouvons sourcer tout équipement informatique sur commande — décrivez votre besoin et obtenez un devis en 24h.

Demander un équipement sur mesure

Mon panier

Votre panier est vide.
Ajoutez des produits pour passer commande !

📱

Paiement Google Pay

$0 CAD

Choisissez comment finaliser votre commande Google Pay :

Paiement 100% sécurisé — SSL chiffré
✕ Fermer
+ n.toLocaleString('en-CA') + ' CAD'; } function changeQty(idx, delta) { cart[idx].qty += delta; if (cart[idx].qty <= 0) cart.splice(idx, 1); updateCartUI(); } function removeItem(idx) { cart.splice(idx, 1); updateCartUI(); showToast(localStorage.getItem('mbah-lang')==='en' ? 'Item removed from cart' : 'Article retiré du panier'); } function clearCart() { cart = []; updateCartUI(); showToast(localStorage.getItem('mbah-lang')==='en' ? 'Cart cleared' : 'Panier vidé'); } /* ── OUVRIR/FERMER PANIER ── */ function toggleCart() { document.getElementById('cartDrawer').classList.toggle('open'); document.getElementById('cartOverlay').classList.toggle('open'); } /* ── COMMANDER VIA WHATSAPP ── */ function checkoutWhatsApp() { if (cart.length === 0) return; const total = cart.reduce((s,i) => s + i.price * i.qty, 0); let msg = 'Bonjour MBAH SERVICES, je souhaite commander :\n\n'; cart.forEach(i => { msg += `• ${i.name} (x${i.qty}) — ${fmtPrice(i.price * i.qty)}\n`; }); msg += `\n💰 Total : ${fmtPrice(total)}\n\nMerci de confirmer la disponibilité et la livraison.`; window.open('https://wa.me/15146770968?text=' + encodeURIComponent(msg), '_blank'); } /* ── TOAST ── */ function showToast(msg) { const t = document.getElementById('toast'); document.getElementById('toastMsg').textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 2800); } /* ── TOGGLE FAVORIS ── */ function toggleWish(btn) { btn.classList.toggle('liked'); const icon = btn.querySelector('i'); icon.className = btn.classList.contains('liked') ? 'fas fa-heart' : 'far fa-heart'; showToast(btn.classList.contains('liked') ? (localStorage.getItem('mbah-lang')==='en' ? '❤️ Added to favorites' : '❤️ Ajouté aux favoris') : (localStorage.getItem('mbah-lang')==='en' ? 'Removed from favorites' : 'Retiré des favoris')); } /* ── FILTRES ── */ function filterCat(cat, btn) { document.querySelectorAll('.cat-filter').forEach(b => b.classList.remove('active')); btn.classList.add('active'); activeFilters.cat = cat; applyFilters(); } function filterCond(cond, btn) { document.querySelectorAll('.cond-btn').forEach(b => b.classList.remove('active')); btn.classList.add('active'); activeFilters.cond = cond; applyFilters(); } function applyPriceFilter() { activeFilters.priceMin = parseInt(document.getElementById('priceMin').value) || null; activeFilters.priceMax = parseInt(document.getElementById('priceMax').value) || null; applyFilters(); } function searchProducts(q) { activeFilters.search = q.toLowerCase().trim(); applyFilters(); } function resetFilters() { activeFilters = { cat:'all', cond:'all', priceMin:null, priceMax:null, search:'' }; document.querySelectorAll('.cat-filter').forEach((b,i) => b.classList.toggle('active', i===0)); document.querySelectorAll('.cond-btn').forEach((b,i) => b.classList.toggle('active', i===0)); document.getElementById('priceMin').value = ''; document.getElementById('priceMax').value = ''; document.getElementById('searchInput').value = ''; applyFilters(); } function applyFilters() { const cards = document.querySelectorAll('#productsGrid .product-card'); let visible = 0; cards.forEach(card => { const cat = card.dataset.cat; const cond = card.dataset.cond; const price = parseInt(card.dataset.price); const name = card.dataset.name.toLowerCase(); const spec = card.querySelector('.product-spec').textContent.toLowerCase(); const okCat = activeFilters.cat === 'all' || cat === activeFilters.cat; const okCond = activeFilters.cond === 'all' || (activeFilters.cond === 'new' && cond === 'new') || (activeFilters.cond === 'used' && cond === 'used'); const okPrice = (!activeFilters.priceMin || price >= activeFilters.priceMin) && (!activeFilters.priceMax || price <= activeFilters.priceMax); const okSearch = !activeFilters.search || name.includes(activeFilters.search) || spec.includes(activeFilters.search); const show = okCat && okCond && okPrice && okSearch; card.style.display = show ? '' : 'none'; if (show) visible++; }); document.getElementById('resultCount').textContent = visible; document.getElementById('noResults').style.display = visible === 0 ? '' : 'none'; } /* ── TRI ── */ function sortProducts(val) { const grid = document.getElementById('productsGrid'); const cards = [...grid.querySelectorAll('.product-card')]; cards.sort((a, b) => { if (val === 'price-asc') return parseInt(a.dataset.price) - parseInt(b.dataset.price); if (val === 'price-desc') return parseInt(b.dataset.price) - parseInt(a.dataset.price); if (val === 'name') return a.dataset.name.localeCompare(b.dataset.name, 'fr'); return 0; }); const noRes = document.getElementById('noResults'); cards.forEach(c => grid.insertBefore(c, noRes)); }