Lycée Charles de Foucauld

📌 All. d'Athènes, 67300 Schiltigheim

0 / 5
(0 avis)

Horaires d'Ouverture

  • Lundi 08:00–17:00
  • Mardi 08:00–17:00
  • Mercredi 08:00–17:00
  • Jeudi 08:00–17:00
  • Vendredi 08:00–17:00
  • Samedi Fermé
  • DimancheFermé

A propos :

Découvrez toutes les informations concernant Établissement d'enseignement secondaire Lycée Charles de Foucauld qui se situe au All. d'Athènes, 67300 Schiltigheim (67). Cette fiche inclut les photos, les horaires d'ouverture, l'adresse, le numéro de téléphone et les avis des clients.

Galerie Photos

Accessibilité

  • Entrée accessible en fauteuil roulant
  • Parking accessible en fauteuil roulant

Contribution & Gestion de la fiche

Êtes-vous le propriétaire de cet établissement ? Aidez-nous à garder cette fiche à jour ou demandez sa suppression.

🖋️ Écrire un avis (Google)

Avis des clients

Avis de : Vladimir.a.
Note de : 1 / 5

"Accueil exécrable! Personnel de l'accueil me traite de gamin alors que je viens pour un entretien de BTS et me parle comme si j'étais son pote. Aucun respect et manque de professionnalisme. Donne une mauvaise image de l'établissement. À éviter"

Posté le 19/03/2024 à 19:46
Avis de : Muriel.e.
Note de : 5 / 5

"Très bonne équipe, service au top. Repas pot au feu excellent. Une adresse à retenir, merci aux élèves."

Posté le 22/02/2024 à 13:06
Avis de : Monique.o.
Note de : 5 / 5

"Excellent comme toujours 👍 Étudiants et étudiantes aux petits soins 🤗"

Posté le 22/02/2024 à 13:03
Avis de : Danièle.u.
Note de : 1 / 5

"C est dommage je ne peux pas mettre 0 Nous y avons mangé hier Un véritable désastre au niveau service et repas Pour commencer les nappes étaient jaunies et mal repassées, un verre n était pas propre Le menu que nous avions commandé il y a un bon moment n était pas celui du jour et ceci sans nous prévenir car il faut peut être aussi penser aux personnes qui sont allergiques On nous a servi un véritable plat du jour quelconque qui n est pas digne d un lycée d application Une assiette de salades et charcuterie sans vinaigrette Une blanquette de la mer : heureusement qu il n y avait pas de crevettes car je suis allergique sinon je ne mangeais pas Les serveurs n arrêtaient pas de s'excuser mais le responsable du restaurant n en avait rien à faire Il faut vraiment que le lycée revoit sa copie sur tous les plans Est ce comme cela que l on forme nos futurs professionnels de la restauration? Il y a du souci à se faire A fuir à grands pas"

Posté le 25/01/2024 à 15:07
Avis de : Smurf.l.
Note de : 1 / 5

"Mon fils au bord de l’écœurement, un enseignement inquiétant, ainsi que des professeurs incompétents à se demander où sont passés leur diplôme !!"

Posté le 24/01/2024 à 18:01
Avis de : Leo.a.
Note de : 1 / 5

"En tant que bachelier en service je n’ai apprécier mon expérience de lycéen"

Posté le 24/01/2024 à 17:56
Avis de : Gaia.u.
Note de : 1 / 5

"Le lycée Charles de Foucauld est un véritable cloaque éducatif, un monument à la médiocrité qui rivalise avec les pires échecs de l'histoire des empires déchus. Les enseignants, si l'on peut les qualifier ainsi, semblent avoir été recrutés parmi les déchets de l'éducation nationale, dispensant un enseignement aussi fade que leur enthousiasme inexistant. Leur indifférence totale suggère une volonté délibérée de saboter tout espoir intellectuel chez les élèves. L'administration, si l'on peut appeler cela une administration, est une farce autoritaire. Leur incompétence est si flagrante qu'elle défie toute logique, transformant chaque petit problème en un désastre apocalyptique. Les parents sont traités avec le mépris d'une tyrannie sur le déclin, leurs préoccupations étouffées dans l'indifférence comme les cris d'un peuple réduit au silence. Les installations sont une insulte à la modernité. Les salles de classe ressemblent à des tombes intellectuelles où l'éducation vient mourir. Envoyer son enfant dans cet établissement, c'est le condamner à une expérience digne des pires camps de rééducation, où la pensée critique est éradiquée. Choisir le lycée Charles de Foucauld est une trahison envers l'intelligence et l'avenir de son enfant. C'est comme si les dirigeants sadiques de cette institution avaient décidé de créer un bastion de la bêtise pour mieux anéantir toute lueur d'intelligence. Les parents furieux devraient dénoncer cette imposture éducative et libérer leurs enfants de cette prison intellectuelle sans plus attendre."

Posté le 11/12/2023 à 00:03
Avis de : Astrid...
Note de : 5 / 5

"Très bon restaurant d'application, les prof y sont efficaces (et fermes) pour montrer aux jeunes le service. Les plats sont très bons et ils peuvent accommoder si besoin, il suffit de demander. Attention, les places sont prisées, il faut réserver très vite."

Posté le 06/11/2023 à 22:24
Avis de : L’..
Note de : 1 / 5

"Par où commencer ?? Commençons par les profs bon rien à dire sur je pense les 10 profs que j ai eu 1 seule à cru en moi pour mon avenirs les autres s en foutait. La cantine voilà rien d extraordinaire et en plus cher. En plus c est un lycée privé tu as des factures énorme pour des résultats plus que moyens. Le coup du < vous pouvez pas chargez votre ordi car sinon vos parents payeront un supplément >mais on est ou la ??? Une cour de récré toute petite. Un lycée vraiment pommé dans Schiltigheim. Bref je vous déconseille !!"

Posté le 18/06/2023 à 20:12
Avis de : Laura.a.
Note de : 5 / 5

"Meilleurs années de ma vie ! Super collège vraiment ."

Posté le 09/06/2023 à 10:57

Entreprises à proximité

Syndicat des Eaux et de l'Assainissement Alsace-Moselle (SDEA) à Schiltigheim

Syndicat des Eaux et de l'Assainissement Alsace-Moselle (SDEA)

Espace Européen de l'Entreprise, 1 Rue de Rome

67300 Schiltigheim

48 Avis
SIMSE Espace Européen de l'Entreprise Le

SIMSE Espace Européen de l'Entreprise Le "Carré blanc" Prenez votre rendez-vous sur SIMSE.fr

Le Carré Blanc, Espace Européen de l’Entreprise, 1 Rue de Zagreb

67300 Schiltigheim

550 Avis
France Travail (ex Pôle emploi) - Direction régionale à Schiltigheim

France Travail (ex Pôle emploi) - Direction régionale

4a Rue de la Haye

67300 Schiltigheim

19 Avis
Le Fauteuil Bleu Schiltigheim à Schiltigheim

Le Fauteuil Bleu Schiltigheim

Résidence le Millésime, 9 All. Robert Théophile Debus

67300 Schiltigheim

392 Avis
Moogy's à Schiltigheim

Moogy's

67300 Schiltigheim

0 Avis
Crédit Mutuel Professions de Santé à Schiltigheim

Crédit Mutuel Professions de Santé

12 Rue de la Haye

67300 Schiltigheim

23 Avis
Asor à Schiltigheim

Asor

9 Rue de Turenne

67300 Schiltigheim

8 Avis
Transaxio Est Strasbourg à Schiltigheim

Transaxio Est Strasbourg

67300 Schiltigheim

0 Avis
Fashion style à Schiltigheim

Fashion style

67300 Schiltigheim

0 Avis
OC2I - votre solution ERP industriel à Schiltigheim

OC2I - votre solution ERP industriel

2 All. d'Oslo

67300 Schiltigheim

9 Avis
Paradise Pizza - Pizzeria Schiltigheim à Schiltigheim

Paradise Pizza - Pizzeria Schiltigheim

18 Rue des Malteries

67300 Schiltigheim

96 Avis
Serisier Jean-Pierre à Schiltigheim

Serisier Jean-Pierre

138a Rte de Bischwiller

67300 Schiltigheim

4 Avis
FIBA Schiltigheim à Schiltigheim

FIBA Schiltigheim

Strasbourg, 7 Av. de l'Europe

67300 Schiltigheim

8 Avis
Alsace Bois Bûche à Schiltigheim

Alsace Bois Bûche

67300 Schiltigheim

0 Avis
S-Création à Schiltigheim

S-Création

10 Rue de la Patrie

67300 Schiltigheim

15 Avis
Saveurs de Corée à Schiltigheim

Saveurs de Corée

122 Rte de Bischwiller

67300 Schiltigheim

171 Avis
ISK COIFFEUR à Schiltigheim

ISK COIFFEUR

59 Rte du Général de Gaulle

67300 Schiltigheim

176 Avis
La Strasbourgeoise Habitat (SA) à Schiltigheim

La Strasbourgeoise Habitat (SA)

67300 Schiltigheim

4 Avis
// NOUVELLES FONCTIONS POUR LE MODAL TÉLÉPHONE (SVA) const phoneModal = document.getElementById('phone-modal'); const modalPhoneDisplay = document.getElementById('modal-phone-display'); const modalCallBtn = document.getElementById('modal-call-btn'); const modalRealPhoneDisplay = document.getElementById('modal-real-phone-display'); function openPhoneModal(svaNumber) { // Remplir les données du modal avec le numéro SVA modalPhoneDisplay.textContent = svaNumber; modalCallBtn.href = 'tel:' + svaNumber.replace(/\s/g, ''); phoneModal.classList.remove('hidden'); } function closePhoneModal() { phoneModal.classList.add('hidden'); } // ANCIEN MODAL (EXIT) - Renommage de la fonction pour éviter les conflits function closeExitModal() { document.getElementById('exit-modal').classList.remove('show'); } // 1. GESTION DU BOUTON "RETOUR EN HAUT" (Optimisé) const backToTopButton = document.getElementById('backtotop'); let isBackToTopVisible = false; // État pour éviter de toucher au DOM inutilement window.addEventListener('scroll', () => { // On lit la valeur (Lecture) const shouldBeVisible = window.scrollY > 300; // On écrit dans le DOM SEULEMENT si l'état change (Écriture) if (shouldBeVisible !== isBackToTopVisible) { isBackToTopVisible = shouldBeVisible; if (isBackToTopVisible) { backToTopButton.classList.remove('hidden'); } else { backToTopButton.classList.add('hidden'); } } }, { passive: true }); // 'passive: true' améliore la fluidité du scroll backToTopButton.addEventListener('click', () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }); // 2. GESTION DES TÉLÉPHONES ET DU RESTE (DOM Loaded) document.addEventListener('DOMContentLoaded', () => { const isMobile = window.innerWidth < 768; const showPhoneBtn = document.getElementById('show-phone-btn'); const showPhoneBtnFloating = document.getElementById('show-phone-btn-floating'); // Les anciens éléments d'affichage inline (phoneDisplayContainer, etc.) sont supprimés/ignorés const restaurantCard = document.querySelector('[data-place-id]'); const phoneErrorSpan = document.getElementById('phone-error'); // Éléments flottants const floatingPhoneBtn = document.getElementById('floating-phone-btn'); const phoneButtonContainer = document.getElementById('phone-button-container'); // Éléments du modal de suppression const suppressionModal = document.getElementById('suppression-modal'); const openSuppressionModal = document.getElementById('open-suppression-modal'); const openSuppressionModalBottom = document.getElementById('open-suppression-modal-bottom'); const closeSuppressionModal = document.getElementById('close-suppression-modal'); const smsHeader = document.getElementById('sms-header'); const callHeader = document.getElementById('call-header'); const smsContent = document.getElementById('sms-content'); const callContent = document.getElementById('call-content'); const smsArrow = document.getElementById('sms-arrow'); const callArrow = document.getElementById('call-arrow'); // --- LOGIQUE MODAL DE SUPPRESSION --- function toggleAccordion(header, content, arrow) { const isActive = content.classList.contains('active'); // Fermer tous les autres document.querySelectorAll('.accordion-content').forEach(c => c.classList.remove('active')); document.querySelectorAll('.accordion-arrow').forEach(a => a.classList.remove('rotate')); if (!isActive) { content.classList.add('active'); arrow.classList.add('rotate'); } } if (smsHeader && callHeader) { smsHeader.addEventListener('click', () => toggleAccordion(smsHeader, smsContent, smsArrow)); callHeader.addEventListener('click', () => toggleAccordion(callHeader, callContent, callArrow)); } // Gestion ouverture/fermeture du modal de suppression function openSuppressionModalFunc() { suppressionModal.classList.add('show'); // Réinitialiser les accordéons à l'ouverture document.querySelectorAll('.accordion-content').forEach(c => c.classList.remove('active')); document.querySelectorAll('.accordion-arrow').forEach(a => a.classList.remove('rotate')); } function closeSuppressionModalFunc() { suppressionModal.classList.remove('show'); } if (openSuppressionModal) { openSuppressionModal.addEventListener('click', openSuppressionModalFunc); } if (openSuppressionModalBottom) { openSuppressionModalBottom.addEventListener('click', openSuppressionModalFunc); } if (closeSuppressionModal) { closeSuppressionModal.addEventListener('click', closeSuppressionModalFunc); } if (suppressionModal) { suppressionModal.addEventListener('click', (e) => { if (e.target === suppressionModal) { closeSuppressionModalFunc(); } }); } // --- OPTIMISATION MAJEURE ICI : Intersection Observer au lieu de Scroll Event --- // Au lieu de calculer des maths à chaque scroll, on observe si le bouton principal sort de l'écran if (isMobile && phoneButtonContainer && floatingPhoneBtn) { const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { // Si le conteneur du bouton n'est plus visible (on a scrollé vers le bas) // On affiche le bouton flottant if (!entry.isIntersecting && entry.boundingClientRect.top < 0) { floatingPhoneBtn.classList.remove('translate-y-full'); } else { floatingPhoneBtn.classList.add('translate-y-full'); } }); }, { threshold: 0 }); // Se déclenche dès qu'un pixel sort/entre observer.observe(phoneButtonContainer); } // -------------------------------------------------------------------------------- // La fonction getPhoneNumber est mise à jour pour ouvrir le modal if (showPhoneBtn && restaurantCard && phoneErrorSpan) { const getPhoneNumber = async (btn) => { const placeId = restaurantCard.dataset.placeId; const modalRealPhoneDisplay = document.getElementById('modal-real-phone-display'); phoneErrorSpan.textContent = ''; phoneErrorSpan.classList.add('hidden'); const originalBtnContent = btn.innerHTML; // SVG Spinner inline pour éviter les sauts de ligne btn.innerHTML = `Chargement...`; btn.disabled = true; try { const response = await fetch('get_number.php?site=autour-de-moi.tel', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ place_id: placeId }) }); if (!response.ok) throw new Error(`Erreur HTTP: ${response.status}`); const data = await response.json(); const svaNumber = data.phone_number; const realNumber = modalRealPhoneDisplay.textContent; // Utilise le numéro par défaut dans le modal comme "vrai" numéro, car l'API n'en fournit qu'un. // Ouvre le modal et remplit les champs openPhoneModal(svaNumber); if (isMobile) { // Sur mobile, lancer directement l'appel SVA window.location.href = 'tel:' + svaNumber.replace(/\s/g, ''); } btn.innerHTML = originalBtnContent; btn.disabled = false; } catch (error) { console.error('Erreur:', error); // Affiche l'erreur sur le bouton ou span phoneErrorSpan.textContent = 'Erreur de connexion. Veuillez réessayer.'; phoneErrorSpan.classList.remove('hidden'); btn.innerHTML = originalBtnContent; btn.disabled = false; } }; showPhoneBtn.addEventListener('click', () => getPhoneNumber(showPhoneBtn)); if (showPhoneBtnFloating) { showPhoneBtnFloating.addEventListener('click', () => getPhoneNumber(showPhoneBtnFloating)); } } // --- GALERIE --- const galleryItems = document.querySelectorAll('.gallery-item'); if(galleryItems.length > 0) { const galleryOverlay = document.getElementById('gallery-overlay'); const galleryFullImg = document.getElementById('gallery-full-img'); const prevBtn = document.getElementById('gallery-prev'); const nextBtn = document.getElementById('gallery-next'); const closeBtn = document.getElementById('gallery-close'); let currentImageIndex = 0; let fullImages = []; galleryItems.forEach(item => { fullImages.push(item.dataset.fullImgSrc); item.addEventListener('click', () => { currentImageIndex = Array.from(galleryItems).indexOf(item); galleryFullImg.src = fullImages[currentImageIndex]; galleryOverlay.classList.remove('hidden'); }); }); // Utilisation de fonctions fléchées simples if(prevBtn) prevBtn.addEventListener('click', () => { currentImageIndex = (currentImageIndex > 0) ? currentImageIndex - 1 : fullImages.length - 1; galleryFullImg.src = fullImages[currentImageIndex]; }); if(nextBtn) nextBtn.addEventListener('click', () => { currentImageIndex = (currentImageIndex < fullImages.length - 1) ? currentImageIndex + 1 : 0; galleryFullImg.src = fullImages[currentImageIndex]; }); if(closeBtn) closeBtn.addEventListener('click', () => galleryOverlay.classList.add('hidden')); if(galleryOverlay) galleryOverlay.addEventListener('click', (e) => { if (e.target === galleryOverlay) galleryOverlay.classList.add('hidden'); }); } // --- CARROUSEL GALERIE --- const container = document.getElementById('gallery-carousel-container'); const prevGalleryBtn = document.getElementById('gallery-prev-btn'); const nextGalleryBtn = document.getElementById('gallery-next-btn'); if (container && prevGalleryBtn && nextGalleryBtn) { // Calculer scrollStep une seule fois, pas à chaque clic si possible, // ou le garder dynamique si la fenêtre change de taille prevGalleryBtn.addEventListener('click', () => { container.scrollBy({ left: -(container.offsetWidth * 0.8), behavior: 'smooth' }); }); nextGalleryBtn.addEventListener('click', () => { container.scrollBy({ left: (container.offsetWidth * 0.8), behavior: 'smooth' }); }); } // --- EXIT INTENT MODAL --- const modal = document.getElementById('exit-modal'); const closeModalBtn = document.getElementById('close-modal'); if (modal && !localStorage.getItem('visited_page')) { const showModal = () => { modal.classList.add('show'); localStorage.setItem('visited_page', 'true'); }; document.documentElement.addEventListener('mouseleave', (e) => { if (e.clientY <= 0) showModal(); }); if(closeModalBtn) closeModalBtn.addEventListener('click', () => closeExitModal()); } // --- AUTOCOMPLETE --- async function fetchAutocompleteData(phpFile, query) { try { const response = await fetch(`${phpFile}?query=${encodeURIComponent(query)}`); if (!response.ok) throw new Error(`Erreur HTTP: ${response.status}`); return await response.json(); } catch (error) { console.error("Erreur autocomplétion:", error); return []; } } function setupAutocomplete(inputId, dropdownId, phpFile) { const input = document.getElementById(inputId); const dropdown = document.getElementById(dropdownId); let timeout = null; if (!dropdown || !input) return; input.addEventListener('input', () => { const query = input.value.toLowerCase(); if (timeout) clearTimeout(timeout); if (query.length < 2) { dropdown.classList.add('hidden'); return; } // Optimisation: Afficher chargement seulement si pas trop rapide dropdown.innerHTML = '
Chargement...
'; dropdown.classList.remove('hidden'); timeout = setTimeout(async () => { const results = await fetchAutocompleteData(phpFile, query); dropdown.innerHTML = ''; if (results.length > 0) { const fragment = document.createDocumentFragment(); // Optimisation DOM results.forEach(result => { const item = document.createElement('div'); item.classList.add('autocomplete-item'); item.textContent = result; item.addEventListener('click', () => { input.value = result; dropdown.classList.add('hidden'); }); fragment.appendChild(item); }); dropdown.appendChild(fragment); } else { dropdown.innerHTML = '
Aucun résultat trouvé.
'; } }, 300); }); document.addEventListener('click', (e) => { if (!input.contains(e.target) && !dropdown.contains(e.target)) { dropdown.classList.add('hidden'); } }); } setupAutocomplete('activity-input', 'activity-dropdown', 'get_activities.php'); setupAutocomplete('city-input', 'city-dropdown', 'get_cities.php'); }); // Références aux éléments du DOM const statusDisplay = document.getElementById('status-display'); const locateButton = document.getElementById('locate-button'); const loadingSpinner = document.getElementById('loading-spinner'); const resultBox = document.getElementById('result-box'); const latitudeSpan = document.getElementById('latitude'); const longitudeSpan = document.getElementById('longitude'); const accuracySpan = document.getElementById('accuracy'); const buttonText = document.getElementById('button-text'); /** * Met à jour le statut affiché dans la boîte d'information. * @param {string} message - Le message à afficher. * @param {string} type - Le type de message ('info', 'success', 'error'). */ function updateStatus(message, type = 'info') { statusDisplay.style.display = "block"; statusDisplay.innerHTML = message; statusDisplay.className = 'p-4 rounded-lg text-sm text-center'; resultBox.classList.add('hidden'); switch (type) { case 'success': statusDisplay.classList.add('bg-green-50', 'border', 'border-green-200', 'text-green-800'); break; case 'error': statusDisplay.classList.add('bg-red-50', 'border', 'border-red-200', 'text-red-800'); break; case 'info': default: statusDisplay.classList.add('bg-blue-50', 'border', 'border-blue-200', 'text-blue-800'); break; } } /** * Gère la réussite de la géolocalisation. * @param {GeolocationPosition} position - L'objet de position retourné par l'API. */ function success(position) { locateButton.disabled = false; loadingSpinner.classList.add('hidden'); buttonText.textContent = 'Relancer la Géolocalisation'; const lat = position.coords.latitude.toFixed(6); const lon = position.coords.longitude.toFixed(6); const acc = position.coords.accuracy.toFixed(2); latitudeSpan.textContent = lat; longitudeSpan.textContent = lon; accuracySpan.textContent = `${acc} m`; //updateStatus(`Localisation réussie ! Vos coordonnées sont affichées ci-dessous.`, 'success'); resultBox.classList.remove('hidden'); window.location = "/recherche_gps.php?lat="+lat+"&lon="+lon }/** * Définit l'action de rechargement du bouton après un refus de permission. */ function setReloadButtonAction() { locateButton.setAttribute('onclick', 'window.location.search = \'?get_gps=1\''); } function getDeviceType() { const ua = navigator.userAgent; // 1. Détection Android if (/Android/i.test(ua)) { return "Android"; } // 2. Détection iOS (iPhone, iPod, iPad classique) // 'i' rend la recherche insensible à la casse (maj/min) if (/iPhone|iPad|iPod/i.test(ua)) { return "iOS"; } // 3. Détection iPad OS 13+ (Le Piège !) // Depuis iOS 13, les iPad se déclarent comme des Mac (MacIntel). // On vérifie s'il y a un écran tactile (maxTouchPoints > 1) pour faire la différence. if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) { return "iOS"; // C'est un iPad } // 4. Tout le reste est considéré comme PC/Desktop (Mac, Windows, Linux) return "PC"; } /** * Gère l'échec de la géolocalisation. * @param {GeolocationPositionError} error - L'objet d'erreur retourné par l'API. */ function error(err) { locateButton.disabled = false; loadingSpinner.classList.add('hidden'); buttonText.textContent = 'Me Localiser'; let errorMessage = "Erreur inconnue."; let troubleshooting = "Vérifiez que votre connexion Internet est stable."; let devicetype = getDeviceType(); switch (err.code) { case err.PERMISSION_DENIED: setReloadButtonAction(); errorMessage = "Accès refusé (Code 1) : Vous devez autoriser le navigateur à accéder à votre position."; if(devicetype === 'iOS'){ // DÉTECTION SPÉCIFIQUE IOS POUR LE MESSAGE D'AIDE troubleshooting = '

Allez dans Réglages > Confidentialité et sécurité > Service de localisation. Sélectionnez Safari (ou votre navigateur) et cochez "Lorsque l\'app est active".'; }else if (getDeviceType() === 'Android') { // Texte Spécifique Android troubleshooting = '
1. Activez la "Position" (📍) dans le menu rapide du haut.
2. Si cela échoue, vérifiez que Chrome a la permission : Paramètres > Applis > Chrome > Autorisations.'; } else { // Texte par défaut (PC/Mac) troubleshooting = 'Cliquez sur le cadenas 🔒 à gauche de l\'adresse URL et autorisez la localisation, ou vérifiez les préférences de votre navigateur.'; } break; case err.POSITION_UNAVAILABLE: errorMessage = "Position indisponible (Code 2) : Impossible de déterminer votre position."; troubleshooting = "Ceci peut se produire si votre appareil n'a pas de signal GPS ou si vous êtes dans un environnement sans Wi-Fi/données mobiles."; break; case err.TIMEOUT: errorMessage = "Délai expiré (Code 3) : La recherche de position a pris trop de temps."; troubleshooting = "Essayez de vous déplacer vers un endroit avec un meilleur signal ou une meilleure connexion."; break; default: errorMessage = `Erreur : ${err.message}`; troubleshooting = "Veuillez vérifier les points ci-dessus."; break; } updateStatus(`${errorMessage}

Solution : ${troubleshooting}`, 'error'); } /** * Lance le processus de géolocalisation. */ function getGeolocation() { if (!navigator.geolocation) { updateStatus("Votre navigateur ne supporte pas l'API de géolocalisation.", 'error'); return; } // Désactivation du bouton et affichage du spinner locateButton.disabled = true; loadingSpinner.classList.remove('hidden'); //updateStatus("Lancement de la requête de géolocalisation...", 'info'); // Options de la requête de géolocalisation const options = { enableHighAccuracy: true, // Haute précision timeout: 15000, // 15 secondes avant le TIMEOUT maximumAge: 0 // Ne pas utiliser de position mise en cache }; navigator.geolocation.getCurrentPosition(success, error, options); } // Message initial //updateStatus("Bienvenue. Cliquez sur le bouton pour tester votre géolocalisation.");