Qualité des photos : 7/10 · évaluée par IA
Guéliz, Marrakech
9 500 MAD/mois
91 MAD/m²
Positionnement prix
+7% au-dessus du médian
Médian Guéliz : 85 MAD/m² · 350 annonces analysées
Voir les prix du quartierCaractéristiques
Surface
104 m²
Chambres
2
Salles de bain
1
Description
à louer en longue durée, cet appartement meublé de 104 m² est situé au 5 ème et dernier étage dans le quartier de Semlalia, résidentiel, calme et proche du centre ville, il dispose de toutes les commodités à proximité immédiate. Il vient d'être entièrement rénové et l 'ensemble du mobilier est NEUF, idéal pour une installation immédiate et un cadre de vie moderne et fonctionnel. Il comprend un salon-salle à manger climatisé, deux chambres dotées de placards et de climatisation individuelle, une cuisine séparée entièrement équipée avec frigo, lave-linge, lave-vaisselle, hotte, plaque 4 feux à gaz et four, ainsi qu'une salle d'eau. Le salon et les deux chambres ouvrent sur une longue terrasse aménagée. Les grandes baies vitrées avec volets électriques rendent l'appartement très lumineux. La résidence bénéficie d'un parking au sous-sol avec portail électrique et d'un gardien. Une belle opportunité à saisir. PRIX. 9.500 DHS / MOIS LA1227 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 6 jours 10 000 DH / mois 2 Ch 2 sdb 93 m² Appartement à louer Marrakech -Guéliz Annonce par : Sélection agenz Il y a 17 jours 6 000 DH / mois 2 Ch 1 sdb 58 m² Appartement à louer Marrakech -Ouasis Annonce par : Sélection agenz Il y a 2 mois 10 000 DH / mois 2 Ch 1 sdb 95 m² Appartement à louer Marrakech -Guéliz Annonce par : Cantarel Immobilier Il y a 2 mois 7 000 DH / mois 2 Ch 3 sdb 65 m² Appartement à louer Marrakech -Guéliz Annonce par : Menzil Immobilier (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 cardWidth = carousel.firstElementChild?.offsetWidth || 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
Localisation
Position approximative
Annonces similaires
9 500 MAD/mois
91 MAD/m²
6 780 MAD/mois
Appartement · 73 m² · 1 ch
Guéliz, Marrakechil y a plus d'un an