Qualité des photos : 6/10 · évaluée par IA
Amelkis, Marrakech
3 300 000 MAD
13 580 MAD/m²
Positionnement prix
−7% sous le médian du quartier
Médian Amelkis : 14 633 MAD/m² · 39 annonces analysées
Rendement locatif estimé ≈ 4,4 % brut/an · Où investir à Marrakech ?
Voir les prix du quartierCaractéristiques
Annonces similaires
3 300 000 MAD
13 580 MAD/m²
Surface
243 m²
Chambres
4
Description
à vendre à Marrakech, cette villa meublée titrée de 243 m² construits sur 157 m² de terrain, offre piscine privative, jardin terrasse avec barbecue traditionnel et four à pizza, une adresse idéale alliant modernité et convivialité dans un lotissement calme de Marrakech. Au rez-de-chaussée, un double salon marocain et européen avec vue sur piscine, une cuisine entièrement équipée, un wc invités et un jardin terrasse avec barbecue traditionnel et four à pizza pour des moments de détente. à l'étage, une chambre parentale d'environ 40 m² avec salle d'eau à l'italienne, dressing et balcon, deux chambres avec balcons, une chambre supplémentaire et une salle d'eau à l'italienne. Piscine privative 3 x 4 m, un terrain de foot commun, lotissement ouvert et quartier calme et résidentiel, idéale pour une famille ou un investisseur en quête d'une villa meublée à acheter à Marrakech alliant confort moderne, convivialité et art de vivre dans un cadre paisible aux portes de Marrakech. Prix : 3 300 000 DHS - HFA document.addEventListener(`DOMContentLoaded`,function(){let e=document.getElementById(`voir-plus`),t=document.querySelector(`.label`);e.addEventListener(`change`,function(){e.checked||t.scrollIntoView({behavior:`smooth`})})}); proposée par : Cantarel Immobilier Agence immobilière à Marrakech Information financières --> --> Annonces Similaires Il y a 3 jours 5 650 000 DH 4 Ch 4 sdb 485 m² Villa à vendre Marrakech -Ennakhil (Palmeraie) Annonce par : Sélection agenz Il y a 5 jours 14 000 000 DH 4 Ch 5 sdb 2100 m² Villa à vendre Marrakech -Ennakhil (Palmeraie) Annonce par : Sélection agenz Il y a 2 mois 4 390 000 DH 4 Ch 2 sdb 352 m² Villa à vendre Marrakech -Route de Ouarzazate Annonce par : Cantarel Immobilier Il y a un an 4 300 000 DH 4 Ch 4 sdb 295 m² Villa à vendre Marrakech -Route de Ouarzazate Annonce par : Prestige gallery immo (function(){const id = ""; const similarLen = 4; document.addEventListener("DOMContentLoaded", function () { const carousel = document.getElementById(`Cards-Container${id}`); const arrows = document.getElementById(`arrowsId${id}`); const indicators = document.getElementById(`indicators${id}`); // const prevStroke = document.getElementById(`prev-stroke${id}`); const nextButtons = document.querySelectorAll(`.next-btn${id}`); const prevButtons = document.querySelectorAll(`.prev-btn${id}`); if (!carousel) return; /* Card #4103 — measure the real card "step" (card width + gap) * by reading the two first children's offsetLeft. Falls back to * the first child's offsetWidth if there's only one card. This is * what makes the arrow navigation actually land on card edges * instead of being off by the gap. */ let currentIndex = 0; const firstCard = carousel.firstElementChild; const cardWidth = firstCard instanceof HTMLElement ? firstCard.offsetWidth || 320 : 320; const measureStep = () => { const first = carousel.children[0]; const second = carousel.children[1]; if (!first || !(first instanceof HTMLElement)) return cardWidth; if (second && second instanceof HTMLElement) { const delta = second.offsetLeft - first.offsetLeft; if (delta > 0) return delta; } return first.offsetWidth || cardWidth; }; let step = measureStep(); /* maxScroll is the true end of the scroll container. The card- * counted maxIndex is derived from it so the last "next" click * lands at scrollLeft = maxScroll and the final card sits fully * inside the viewport, no partial visibility. */ const getMaxScroll = () => Math.max(0, carousel.scrollWidth - carousel.clientWidth); let maxScroll = getMaxScroll(); let maxIndex = step > 0 ? Math.ceil(maxScroll / step) : 0; const maxDots = 5; const isRTL = getComputedStyle(carousel).direction === "rtl"; const recompute = () => { step = measureStep(); maxScroll = getMaxScroll(); maxIndex = step > 0 ? Math.ceil(maxScroll / step) : 0; }; const updateArrowsVisibility = () => { if (!arrows || !carousel) return; arrows.style.visibility = maxScroll > 0 ? "visible" : "hidden"; }; /* Dots window over the VALID scroll positions [0, maxIndex], * not over similarLen. Showing more dots than reachable positions * was the source of the "active dot stuck on an earlier position" * bug for cards = N where N - visibleCards maxDots and there's more content beyond an edge, * the dots closest to that edge shrink (1.0 → 0.7 → 0.5) so the * user gets a visual "there's more in this direction" cue without * the dot strip itself growing. */ const updateIndicators = () => { if (!indicators) return; const dots = indicators.querySelectorAll(".dot-indicator"); const pageCount = maxIndex + 1; // number of valid scroll positions let startDot = 0; if (pageCount > maxDots) { const half = Math.floor(maxDots / 2); if (currentIndex = pageCount - half - 1) { startDot = pageCount - maxDots; } else { startDot = currentIndex - half; } } const endDot = startDot + maxDots - 1; const overflowsAtStart = pageCount > maxDots && startDot > 0; const overflowsAtEnd = pageCount > maxDots && endDot { const actualIndex = startDot + dotPosition; const isVisible = actualIndex < pageCount; const isActive = actualIndex === currentIndex; let scale = 1; let opacity = 1; /* Shrink the two dots closest to whichever edge has hidden * pages beyond the window. Active dot always stays full size. */ if (!isActive && isVisible) { if (overflowsAtStart && dotPosition === 0) { scale = 0.5; opacity = 0.6; } else if (overflowsAtStart && dotPosition === 1) { scale = 0.7; opacity = 0.8; } else if (overflowsAtEnd && dotPosition === maxDots - 1) { scale = 0.5; opacity = 0.6; } else if (overflowsAtEnd && dotPosition === maxDots - 2) { scale = 0.7; opacity = 0.8; } } dot.style.background = isActive ? "#00111A" : "#A3A9AD"; dot.style.display = isVisible ? "" : "none"; dot.style.transform = `scale(${scale})`;
Localisation
Position approximative