{"id":88169,"date":"2025-08-27T16:20:46","date_gmt":"2025-08-27T14:20:46","guid":{"rendered":"https:\/\/centcols.org\/?page_id=88169"},"modified":"2026-03-10T19:55:58","modified_gmt":"2026-03-10T17:55:58","slug":"collar-catalogues","status":"publish","type":"page","link":"https:\/\/centcols.org\/en\/catalogues-de-cols\/","title":{"rendered":"Passes catalogues"},"content":{"rendered":"\n<p>Les catalogues de cols fournis officiellement par le Club des Cent Cols sont tous conformes \u00e0 sa\u00a0<a href=\"https:\/\/centcols.org\/regle-du-jeu\/\">r\u00e8gle du jeu<\/a>. Cela implique que les listes annuelles de cols grimp\u00e9s qui sont soumises par les membres doivent s\u2019y r\u00e9f\u00e9rer. Les catalogues sont mis \u00e0 jour plus ou moins r\u00e9guli\u00e8rement, souvent annuellement.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Les membres du Club des Cent Cols \u00e0 jour de cotisation peuvent t\u00e9l\u00e9charger la derni\u00e8re version de chaque catalogue via la section membres ou directement&nbsp;<a href=\"https:\/\/centcols.org\/membres\/outils\/telecat.php\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>en cliquant ici<\/strong><\/a>. <\/p>\n<\/blockquote>\n\n\n\n<p>La vente de catalogues \u00e0 des personnes qui ne sont pas membres du Club des Cent Cols se fait sous forme de fichiers PDF. Ces catalogues PDF ne contiennent pas toutes les donn\u00e9es des cols mais seulement leurs principales variables.<br>Cette vente permet aux futurs adh\u00e9rents d\u2019\u00e9tablir leur liste de cols reconnus par le Club avant leur adh\u00e9sion conform\u00e9ment au r\u00e8glement de la Confr\u00e9rie.<\/p>\n\n\n\n<p>Pour voir la gamme compl\u00e8te de notre offre ou pour acheter des catalogues de cols, visitez la&nbsp;<a href=\"https:\/\/centcols.org\/boutique\/\">boutique<\/a>&nbsp;et ses&nbsp;<a href=\"https:\/\/centcols.org\/boutique\/categorie-produit\/catalogues-de-cols\/\" target=\"_blank\" rel=\"noreferrer noopener\">catalogues de cols<\/a>.<\/p>\n\n\n\n<p>Chaque catalogue est accompagn\u00e9 par sa propre notice. La plupart des rubriques et des colonnes dans nos catalogues sont communes et normalis\u00e9es. Afin de ne pas r\u00e9p\u00e9ter les m\u00eames informations dans chaque notice vous trouverez\u00a0<a href=\"https:\/\/centcols.org\/documents\/catalogues\/_commun\/Manuel_d_utilisation_des_catalogues.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>\u00a0les explications et le manuel d\u2019utilisation des rubriques standards ou universelles ou les en-t\u00eates de colonnes de nos catalogues. Vous pouvez aussi trouvez\u00a0<a href=\"https:\/\/centcols.org\/documents\/catalogues\/_commun\/Guide_general_des_catalogues_et_des_notices_du_Club_des_Cent_Cols.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>\u00a0un guide plus g\u00e9n\u00e9ral des informations que l\u2019on peut typiquement trouver dans les catalogues et dans les notices et comment ces informations sont \u00e9labor\u00e9es.<\/p>\n\n\n\n<p>Finalement, \u00e0 la date de d\u00e9but 2023, on indique&nbsp;<a href=\"https:\/\/centcols.org\/documents\/catalogues\/_commun\/Tableau_Global_Catalogues_2023.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a>&nbsp;une vue d\u2019ensemble du nombre de cols par pays.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">En savoir plus<\/h2>\n\n\n  <div id=\"no-loop-1\" class=\"loop-articles\">\n    <div class=\"row\">\n      \n      \n            <div class=\"col-lg-12\">\n                          <div class=\"row articles-list loading-articles\">\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"catalogues\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/en\/les-catalogues-evoluent-maintenant-en-temps-reel\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"2000\" height=\"910\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg 2000w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1-1200x546.jpg 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1-1920x874.jpg 1920w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1-768x349.jpg 768w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1-1536x699.jpg 1536w\" sizes=\"auto, (max-width: 2000px) 100vw, 2000px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>Catalogues<\/p>\n                      <\/div>\n                      <h3>Les catalogues \u00e9voluent maintenant en temps r\u00e9el<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                      <\/div>\n\n          \n        \n\n      <\/div>\n          <\/div>\n  <\/div>\n  <script>\n    (function() {\n      const container = document.getElementById('no-loop-1');\n      if (!container) return;\n      const checkboxes = container.querySelectorAll('.filter-checkbox');\n      const dropdowns = container.querySelectorAll('.filter-dropdown');\n      const buttons = container.querySelectorAll('.filter-button');\n      const articles = container.querySelectorAll('.article-item');\n      const filterContainer = container.querySelector('.category-hierarchy-sidebar');\n      const articlesContainer = container.querySelector('.articles-list');\n\n      \/\/ \u00c9l\u00e9ments de pagination\n      const prevButton = container.querySelector('.pagination-prev');\n      const nextButton = container.querySelector('.pagination-next');\n      const currentPageSpan = container.querySelector('.current-page');\n      const totalPagesSpan = container.querySelector('.total-pages');\n\n      \/\/ Variables de pagination\n      let currentPage = 1;\n      let totalPages = parseInt(totalPagesSpan?.textContent || '1', 10);\n      const postsPerPage = 15;\n\n      \/\/ Fonction de gestion de la pagination\n      function handlePagination() {\n        if (!prevButton || !nextButton) return;\n\n        prevButton.addEventListener('click', () => {\n          if (currentPage > 1) {\n            currentPage--;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        nextButton.addEventListener('click', () => {\n          if (currentPage < totalPages) {\n            currentPage++;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        \/\/ Initialise l'\u00e9tat des boutons\n        updatePaginationButtons();\n      }\n\n      function updatePagination() {\n        \/\/ Mise \u00e0 jour des boutons\n        updatePaginationButtons();\n\n        \/\/ Mise \u00e0 jour du num\u00e9ro de page affich\u00e9\n        if (currentPageSpan) {\n          currentPageSpan.textContent = currentPage;\n        }\n\n        \/\/ Filtre les articles \u00e0 afficher selon la page actuelle\n        filterArticles();\n      }\n\n      function updatePaginationButtons() {\n        if (prevButton) {\n          prevButton.disabled = currentPage === 1;\n        }\n        if (nextButton) {\n          nextButton.disabled = currentPage === totalPages;\n        }\n      }\n\n      function scrollToTop() {\n        \/\/ Scroll vers le haut de la liste des articles\n        const scrollToElement = articlesContainer || container.querySelector('.loop-articles');\n        if (scrollToElement) {\n          scrollToElement.scrollIntoView({\n            behavior: 'smooth',\n            block: 'start'\n          });\n        }\n      }\n\n      \/\/ Gestion de la popup de description\n      const openPopupBtn = container.querySelector('.open-description-popup');\n      const popupOverlay = container.querySelector('.description-popup-overlay');\n      const closePopupBtn = container.querySelector('.close-popup');\n\n      if (openPopupBtn && popupOverlay) {\n        openPopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'flex';\n          document.body.style.overflow = 'hidden'; \/\/ Emp\u00eacher le d\u00e9filement\n        });\n      }\n\n      if (closePopupBtn && popupOverlay) {\n        closePopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'none';\n          document.body.style.overflow = ''; \/\/ R\u00e9activer le d\u00e9filement\n        });\n\n        \/\/ Fermer en cliquant en dehors du contenu\n        popupOverlay.addEventListener('click', function(e) {\n          if (e.target === popupOverlay) {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n\n        \/\/ Fermer avec Echap\n        document.addEventListener('keydown', function(e) {\n          if (e.key === 'Escape' && popupOverlay.style.display === 'flex') {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n      }\n\n      \/\/ Variable pour suivre si l'initialisation est termin\u00e9e\n      let initialized = false;\n\n      \/\/ Gestion du toggle mobile pour les filtres\n      const filterToggle = container.querySelector('.filter-toggle');\n      const categoryButtons = container.querySelector('.category-buttons');\n\n      if (filterToggle && categoryButtons) {\n        filterToggle.addEventListener('click', function() {\n          const isExpanded = filterToggle.getAttribute('aria-expanded') === 'true';\n          const toggleText = filterToggle.querySelector('.toggle-text');\n          const toggleIcon = filterToggle.querySelector('.toggle-icon');\n\n          if (isExpanded) {\n            \/\/ Fermer\n            categoryButtons.style.display = 'none';\n            filterToggle.setAttribute('aria-expanded', 'false');\n            toggleText.textContent = 'Afficher les filtres';\n            toggleIcon.textContent = '\u25bc';\n            filterToggle.classList.remove('expanded');\n          } else {\n            \/\/ Ouvrir\n            categoryButtons.style.display = 'flex';\n            filterToggle.setAttribute('aria-expanded', 'true');\n            toggleText.textContent = 'Masquer les filtres';\n            toggleIcon.textContent = '\u25b2';\n            filterToggle.classList.add('expanded');\n          }\n        });\n      }\n\n      \/\/ Stocker les options originales de chaque liste d\u00e9roulante pour pouvoir les restaurer\n      const originalOptions = {};\n\n      \/\/ Sauvegarder les options originales de toutes les listes d\u00e9roulantes\n      dropdowns.forEach(dropdown => {\n        const options = Array.from(dropdown.options).map(opt => ({\n          value: opt.value,\n          text: opt.text,\n          disabled: opt.disabled\n        }));\n        originalOptions[dropdown.dataset.group] = options;\n      });\n\n      \/\/ Gestion des boutons (layout=\"buttons\")\n      buttons.forEach(button => {\n        button.addEventListener('click', () => {\n          const cat = button.dataset.category;\n\n          \/\/ Si le bouton est d\u00e9j\u00e0 actif\n          if (button.classList.contains('active')) {\n            \/\/ Compter combien de boutons sont actifs\n            const activeCount = container.querySelectorAll('.filter-button.active').length;\n            \/\/ Si c'est le seul bouton actif, ne rien faire (emp\u00eacher la d\u00e9sactivation)\n            if (activeCount === 1) {\n              return;\n            }\n            \/\/ Sinon, on peut le d\u00e9sactiver normalement\n            button.classList.remove('active');\n          } else {\n            \/\/ D\u00e9sactiver tous les boutons\n            buttons.forEach(btn => btn.classList.remove('active'));\n            \/\/ Activer uniquement le bouton cliqu\u00e9\n            button.classList.add('active');\n          }\n\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des checkboxes (layout=\"filters\")\n      checkboxes.forEach(function(checkbox) {\n        checkbox.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des listes d\u00e9roulantes (nouveau)\n      dropdowns.forEach(function(dropdown) {\n        dropdown.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Fonction principale qui filtre les articles en fonction des filtres actifs\n      function filterArticles() {\n        const groupFilters = {}; \/\/ Structure qui stocke les filtres actifs regroup\u00e9s par \"groupe\"\n        let anyFilterActive = false; \/\/ Pour savoir si au moins un filtre est actif\n\n        \/\/ R\u00e9cup\u00e9ration des checkboxes coch\u00e9es\n        checkboxes.forEach(cb => {\n          if (cb.checked) {\n            anyFilterActive = true;\n            const group = cb.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(cb.dataset.category);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des valeurs de listes d\u00e9roulantes s\u00e9lectionn\u00e9es\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            anyFilterActive = true;\n            const group = dropdown.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(dropdown.value);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des boutons actifs\n        buttons.forEach(btn => {\n          if (btn.classList.contains('active')) {\n            anyFilterActive = true;\n            const group = \"catalogues\";\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(btn.dataset.category);\n          }\n        });\n\n        \/\/ Pour chaque article, on v\u00e9rifie s'il correspond aux filtres et \u00e0 la page actuelle\n        let visibleCount = 0;\n        let filteredArticles = [];\n\n        articles.forEach(article => {\n          const articleCatList = article.dataset.category.split(' ');\n          let matchesAllGroups = true;\n\n          for (const group in groupFilters) {\n            const groupSet = groupFilters[group];\n            const hasMatchInGroup = Array.from(groupSet).some(cat => articleCatList.includes(cat));\n            if (!hasMatchInGroup) {\n              matchesAllGroups = false;\n              break;\n            }\n          }\n\n          \/\/ Si l'article correspond aux filtres, on le garde pour la pagination\n          if (matchesAllGroups) {\n            filteredArticles.push(article);\n          }\n\n          \/\/ On cache initialement tous les articles\n          article.style.display = 'none';\n        });\n\n        \/\/ Recalcul du nombre total de pages en fonction des articles filtr\u00e9s\n        totalPages = Math.max(1, Math.ceil(filteredArticles.length \/ postsPerPage));\n        if (totalPagesSpan) {\n          totalPagesSpan.textContent = totalPages.toString();\n        }\n\n        \/\/ Si la page actuelle d\u00e9passe le nouveau nombre total de pages, on revient \u00e0 la derni\u00e8re page disponible\n        if (currentPage > totalPages) {\n          currentPage = totalPages;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n        }\n\n        \/\/ Mettre \u00e0 jour les boutons de pagination\n        updatePaginationButtons();\n\n        \/\/ Afficher uniquement les articles de la page actuelle\n        const startIndex = (currentPage - 1) * postsPerPage;\n        const endIndex = Math.min(startIndex + postsPerPage, filteredArticles.length);\n\n        for (let i = startIndex; i < endIndex; i++) {\n          if (filteredArticles[i]) {\n            filteredArticles[i].style.display = 'block';\n          }\n        }\n\n        \/\/ Retire l'effet de chargement si activ\u00e9\n        if (filterContainer && filterContainer.classList.contains('loading')) {\n          filterContainer.classList.remove('loading');\n        }\n\n        \/\/ Une fois les articles filtr\u00e9s et initialis\u00e9s, nous pouvons afficher le conteneur\n        if (!initialized && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        return groupFilters; \/\/ Retourner les filtres actifs pour \u00eatre utilis\u00e9s par updateAvailableFilters()\n      }\n\n      \/\/ Nouvelle fonction pour mettre \u00e0 jour les options disponibles dans les listes d\u00e9roulantes\n      function updateAvailableFilters() {\n        if (dropdowns.length === 0) return;\n\n        \/\/ Ajouter une classe de chargement pendant la mise \u00e0 jour\n        if (filterContainer) filterContainer.classList.add('updating');\n\n        const activeFilters = filterArticles(); \/\/ R\u00e9cup\u00e9rer les filtres actuellement actifs\n\n        \/\/ Pour chaque liste d\u00e9roulante, nous devons d\u00e9terminer quelles options sont valides\n        dropdowns.forEach(dropdown => {\n          const currentGroup = dropdown.dataset.group;\n          const currentValue = dropdown.value;\n\n          \/\/ Cloner les filtters actifs sans inclure le filtre de cette liste d\u00e9roulante\n          const otherFilters = {};\n          for (const group in activeFilters) {\n            if (group !== currentGroup) {\n              otherFilters[group] = new Set(activeFilters[group]);\n            }\n          }\n\n          \/\/ D\u00e9terminer quelles options correspondent aux articles qui passeraient le filtre\n          const validOptions = new Set(['']); \/\/ L'option vide (Tous) est toujours valide\n\n          \/\/ Pour chaque article, v\u00e9rifier si son option est valide avec les autres filtres actifs\n          articles.forEach(article => {\n            const articleCats = article.dataset.category.split(' ');\n            let matchesOtherFilters = true;\n\n            \/\/ V\u00e9rifier si l'article correspond aux filtres des autres groupes\n            for (const group in otherFilters) {\n              const groupSet = otherFilters[group];\n              const hasMatch = Array.from(groupSet).some(cat => articleCats.includes(cat));\n              if (!hasMatch && groupSet.size > 0) {\n                matchesOtherFilters = false;\n                break;\n              }\n            }\n\n            \/\/ Si l'article correspond aux autres filtres, toutes ses cat\u00e9gories sont valides\n            if (matchesOtherFilters) {\n              articleCats.forEach(cat => validOptions.add(cat));\n            }\n          });\n\n          \/\/ R\u00e9tablir toutes les options originales\n          while (dropdown.options.length > 0) {\n            dropdown.remove(0);\n          }\n\n          \/\/ Recr\u00e9er les options en ne gardant que celles qui sont valides\n          originalOptions[currentGroup].forEach(option => {\n            const opt = document.createElement('option');\n            opt.value = option.value;\n            opt.textContent = option.text;\n\n            \/\/ Si l'option n'est pas dans la liste des valides, la d\u00e9sactiver\n            \/\/ sauf si c'est la valeur actuellement s\u00e9lectionn\u00e9e ou l'option \"Tous\"\n            if (!validOptions.has(option.value) && option.value !== currentValue && option.value !== '') {\n              opt.disabled = true;\n            }\n\n            dropdown.appendChild(opt);\n          });\n\n          \/\/ Restaurer la valeur s\u00e9lectionn\u00e9e\n          dropdown.value = currentValue;\n        });\n\n        \/\/ Retirer la classe de chargement\n        if (filterContainer) filterContainer.classList.remove('updating');\n      }\n\n      \/\/ Met \u00e0 jour l'URL avec les filtres actifs (pour partage ou navigation)\n      function updateUrl() {\n        const url = new URL(window.location.href);\n        const params = new URLSearchParams();\n\n        \/\/ Ajouter la page courante aux param\u00e8tres\n        params.set('page', currentPage.toString());\n\n        \/\/ Pour les checkboxes\n        checkboxes.forEach(checkbox => {\n          if (checkbox.checked) {\n            const group = checkbox.dataset.group;\n            if (!params.has(group)) {\n              params.set(group, checkbox.dataset.category);\n            } else {\n              const existing = params.get(group);\n              params.set(group, existing + ',' + checkbox.dataset.category);\n            }\n          }\n        });\n\n        \/\/ Pour les listes d\u00e9roulantes\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            const group = dropdown.dataset.group;\n            params.set(group, dropdown.value);\n          }\n        });\n\n        \/\/ Pour les boutons (un seul sera actif \u00e0 la fois)\n        const activeButton = container.querySelector('.filter-button.active');\n        if (activeButton) {\n          const group = \"catalogues\";\n          params.set('active_button', activeButton.dataset.category);\n        }\n\n        const queryString = params.toString();\n        const newUrl = queryString ? `${url.origin}${url.pathname}?${queryString}` : `${url.origin}${url.pathname}`;\n\n        history.replaceState(null, '', newUrl);\n      }\n\n      \/\/ Applique les filtres si pr\u00e9sents dans l'URL (ex: apr\u00e8s rechargement ou lien partag\u00e9)\n      function applyUrlParams() {\n        const params = new URLSearchParams(window.location.search);\n        let hasUrlFilters = false;\n\n        \/\/ R\u00e9cup\u00e9rer la page depuis l'URL\n        if (params.has('page')) {\n          currentPage = parseInt(params.get('page'), 10) || 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n          hasUrlFilters = true;\n        }\n\n        \/\/ Pour les checkboxes\n        params.forEach((value, key) => {\n          if (key !== 'active_button' && key !== 'page') {\n            hasUrlFilters = true;\n            const values = value.split(',');\n            values.forEach(val => {\n              const checkbox = container.querySelector(`.filter-checkbox[data-category=\"${val}\"]`);\n              if (checkbox) {\n                checkbox.checked = true;\n              }\n\n              \/\/ Pour les listes d\u00e9roulantes\n              const dropdown = container.querySelector(`.filter-dropdown[data-group=\"${key}\"]`);\n              if (dropdown) {\n                dropdown.value = val;\n              }\n            });\n          }\n        });\n\n        \/\/ Pour le bouton actif depuis l'URL\n        const activeButtonSlug = params.get('active_button');\n        if (activeButtonSlug) {\n          hasUrlFilters = true;\n          const buttonToActivate = container.querySelector(`.filter-button[data-category=\"${activeButtonSlug}\"]`);\n          if (buttonToActivate) {\n            buttonToActivate.classList.add('active');\n          }\n        }\n\n        \/\/ Si des param\u00e8tres d'URL sont pr\u00e9sents, nous maintenons le conteneur cach\u00e9 jusqu'\u00e0 ce que les filtres soient appliqu\u00e9s\n        if (!hasUrlFilters && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        filterArticles();\n        updateAvailableFilters();\n      }\n\n      \/\/ Initialisation au chargement\n      filterArticles();\n      updateAvailableFilters();\n      handlePagination();\n      applyUrlParams();\n    })();\n  <\/script>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Les catalogues de cols fournis officiellement par le Club des Cent Cols sont tous conformes \u00e0 sa\u00a0r\u00e8gle du jeu. Cela implique que les listes annuelles de cols grimp\u00e9s qui sont soumises par les membres doivent s\u2019y r\u00e9f\u00e9rer. Les catalogues sont mis \u00e0 jour plus ou moins r\u00e9guli\u00e8rement, souvent annuellement. Les membres du Club des Cent [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":85038,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-88169","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Catalogues de cols \u00e0 v\u00e9lo \u2013 R\u00e9pertoire des cols de montagne<\/title>\n<meta name=\"description\" content=\"Catalogues de cols \u00e0 v\u00e9lo : Alpes, Pyr\u00e9n\u00e9es, Suisse, Espagne et bien d&#039;autres pays. La r\u00e9f\u00e9rence mondiale du cyclotourisme en montagne.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/centcols.org\/en\/collar-catalogues\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Catalogues de cols \u00e0 v\u00e9lo \u2013 R\u00e9pertoire des cols de montagne\" \/>\n<meta property=\"og:description\" content=\"Catalogues de cols \u00e0 v\u00e9lo : Alpes, Pyr\u00e9n\u00e9es, Suisse, Espagne et bien d&#039;autres pays. La r\u00e9f\u00e9rence mondiale du cyclotourisme en montagne.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/centcols.org\/en\/collar-catalogues\/\" \/>\n<meta property=\"og:site_name\" content=\"Club des Cent Cols\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-10T17:55:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"910\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/\",\"url\":\"https:\/\/centcols.org\/de\/kragenkataloge\/\",\"name\":\"Catalogues de cols \u00e0 v\u00e9lo \u2013 R\u00e9pertoire des cols de montagne\",\"isPartOf\":{\"@id\":\"https:\/\/centcols.org\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg\",\"datePublished\":\"2025-08-27T14:20:46+00:00\",\"dateModified\":\"2026-03-10T17:55:58+00:00\",\"description\":\"Catalogues de cols \u00e0 v\u00e9lo : Alpes, Pyr\u00e9n\u00e9es, Suisse, Espagne et bien d'autres pays. La r\u00e9f\u00e9rence mondiale du cyclotourisme en montagne.\",\"breadcrumb\":{\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/centcols.org\/de\/kragenkataloge\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage\",\"url\":\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg\",\"contentUrl\":\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg\",\"width\":2000,\"height\":910},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/centcols.org\/de\/kragenkataloge\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/centcols.org\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Catalogues de cols\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/centcols.org\/#website\",\"url\":\"https:\/\/centcols.org\/\",\"name\":\"Club des Cent Cols\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/centcols.org\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/centcols.org\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/centcols.org\/#organization\",\"name\":\"Club des Cent Cols\",\"url\":\"https:\/\/centcols.org\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/centcols.org\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png\",\"contentUrl\":\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png\",\"width\":250,\"height\":250,\"caption\":\"Club des Cent Cols\"},\"image\":{\"@id\":\"https:\/\/centcols.org\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bike pass catalogues - Mountain pass directory","description":"Catalogues of mountain passes: Alps, Pyrenees, Switzerland, Spain and many other countries. The world reference for mountain bike touring.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/centcols.org\/en\/collar-catalogues\/","og_locale":"en_GB","og_type":"article","og_title":"Catalogues de cols \u00e0 v\u00e9lo \u2013 R\u00e9pertoire des cols de montagne","og_description":"Catalogues de cols \u00e0 v\u00e9lo : Alpes, Pyr\u00e9n\u00e9es, Suisse, Espagne et bien d'autres pays. La r\u00e9f\u00e9rence mondiale du cyclotourisme en montagne.","og_url":"https:\/\/centcols.org\/en\/collar-catalogues\/","og_site_name":"Club des Cent Cols","article_publisher":"https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR","article_modified_time":"2026-03-10T17:55:58+00:00","og_image":[{"width":2000,"height":910,"url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/centcols.org\/de\/kragenkataloge\/","url":"https:\/\/centcols.org\/de\/kragenkataloge\/","name":"Bike pass catalogues - Mountain pass directory","isPartOf":{"@id":"https:\/\/centcols.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage"},"image":{"@id":"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage"},"thumbnailUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg","datePublished":"2025-08-27T14:20:46+00:00","dateModified":"2026-03-10T17:55:58+00:00","description":"Catalogues of mountain passes: Alps, Pyrenees, Switzerland, Spain and many other countries. The world reference for mountain bike touring.","breadcrumb":{"@id":"https:\/\/centcols.org\/de\/kragenkataloge\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/centcols.org\/de\/kragenkataloge\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/centcols.org\/de\/kragenkataloge\/#primaryimage","url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg","contentUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/07\/catalogues1.jpg","width":2000,"height":910},{"@type":"BreadcrumbList","@id":"https:\/\/centcols.org\/de\/kragenkataloge\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/centcols.org\/"},{"@type":"ListItem","position":2,"name":"Catalogues de cols"}]},{"@type":"WebSite","@id":"https:\/\/centcols.org\/#website","url":"https:\/\/centcols.org\/","name":"Club des Cent Cols","description":"","publisher":{"@id":"https:\/\/centcols.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/centcols.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/centcols.org\/#organization","name":"Club des Cent Cols","url":"https:\/\/centcols.org\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/centcols.org\/#\/schema\/logo\/image\/","url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png","contentUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png","width":250,"height":250,"caption":"Club des Cent Cols"},"image":{"@id":"https:\/\/centcols.org\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR"]}]}},"_links":{"self":[{"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/pages\/88169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/comments?post=88169"}],"version-history":[{"count":0,"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/pages\/88169\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/media\/85038"}],"wp:attachment":[{"href":"https:\/\/centcols.org\/en\/wp-json\/wp\/v2\/media?parent=88169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}