<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="name" content="Apache OpenOffice" />
    <meta name="description" content="The official home page of the Apache OpenOffice open source project, home of OpenOffice Writer, Calc, Impress, Draw and Base." />
    <meta name="keywords" content="OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Official, Official Site, Writer, Calc, Impress, Draw, Base, ODF, Open Document Format, free office editors" />
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
    <link rel="icon" href="/favicon.ico" type="image/x-icon" />
    <title>Apache OpenOffice - Site officiel - La suite de productivité gratuite et ouverte</title>
    <script src="/download/globalvars.js"></script>
    <script src="/msg_prop_l10n.js"></script>
    <style>
    /* <![CDATA[ */
    /*-------------------- Exceptions on standard css -----------------------*/
    @import "/css/home.css";
    @import "/css/styles.css";
    @import "/css/exceptions.css";
    /* ]]> */
    </style>
    <script>
      function follow( platform ) {
        // _gaq.push( ['_trackEvent', 'social', 'followUs', platform] );

        if ( platform == 'ApacheBlog' ) {
          window.open( "https://blogs.apache.org/OOo/", "_blank" );
        } else if ( platform == 'Facebook' ) {
          window.open( "https://www.facebook.com/ApacheOO", "_blank" );
        } else if ( platform == 'Twitter' ) {
          window.open( "https://twitter.com/ApacheOO", "_blank" );
        } else if ( platform == 'YouTube' ) {
          window.open( "https://www.youtube.com/openoffice", "_blank" );
        }
      }

      function showAlertBox() {
	// The text is defined in "msg_prop_l10n_fr.js".

	// Show the alert box or not?
	if( l10n.index_alert_box_show ) {
		// Depending if link is available, make the whole DIV clickable or not.
		if( l10n.index_alert_box_href ) {
			// Show the text with link and cursor as pointer.
			document.write( "<div id='alert_box' onclick='window.open( \"" + l10n.index_alert_box_href
			+ "\", \"_blank\" ); return false;'><ul><li>" );

			// Show headline.
			document.write( "<h2 style='cursor: pointer;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: pointer;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		} else {
			// Show the text without link and normal cursor.
			document.write( "<div id='alert_box'><ul><li>" );

			// Show headline.
			document.write( "<h2 style='cursor: default;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: default;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		}
		document.write( "</li></ul></div>" ); // Alert box.
	}
      }
    </script>
</head>

<body>

<!-- The text in the H1 tag is intentionally shown as not displayable, just to please accessibility tools like a
screen reader.
-->
<h1 style="display: none;">Apache OpenOffice</h1>

<div id="actionstatements">

  <script>
  <!--
  // Show alert box.
  // Show an important message or announcement.
  // In "/msg_prop_l10n.js": Change to 'true' to show the box that is defined in the variables.
  showAlertBox();
  //-->
  </script>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-info">
        <div class="action-text action-link">
          <a href="/why/index.html">
            <h2>Je souhaite en savoir plus sur OpenOffice</h2>
            <p>Qu'est-ce qu'Apache OpenOffice ? Et pourquoi devrais-je l'utiliser ?</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
  </ul>

  <!-- Show the download link with currently available version number, loaded via JavaScript -->
  <script>
  <!--
  document.write( "<ul><li>"
    + "<div class='action-download'>"
      + "<div class='action-text action-link'>"
        + "<a href='./download/'>"
          + "<h2>Je veux télécharger Apache OpenOffice</h2>"
          + "<p style='font-size: 1.0em; font-weight: bold;'>(Version la plus récente : " + DL.VERSION + ")</p>"
          + "<p>Téléchargez Apache OpenOffice gratuitement <b>(vraiment, aucun frais de licence !)</b> | "
            + "<a href='https://blogs.apache.org/OOo/entry/with_apache_openoffice_you_get'"
              + "title='Blog post: Avec Apache OpenOffice vous obtenez ce que vous voulez sans payer' target='_blank'>"
              + "Cliquez ici pour obtenir plus d'informations"
            + "</a>."
          + "</p>"
        + "</a>"
      + "</div>"
    + "</div>"
  + "</li></ul>" );
  //-->
  </script>

  <!-- Show the download link, without version number -->
  <noscript>
    <div class="action-download">
      <div class="action-text action-link">
        <a href="./download/">
          <h2>Je veux télécharger Apache OpenOffice</h2>
          <p>Téléchargez Apache OpenOffice gratuitement ou découvrez d'autres moyens de l'obtenir.</p>
        </a>
      </div>
    </div>
  </noscript>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-help">
        <div class="action-text action-link">
          <a href="/support/index.html">
            <h2>J'ai besoin d'aide avec mon OpenOffice</h2>
            <p>L'aide est à portée de main quand vous en avez besoin.</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-extend">
        <div class="action-text action-link">
          <a href="/extensions/index.html">
            <h2>Je veux faire plus avec mon OpenOffice</h2>
            <p>Étendez Apache OpenOffice avec des fonctionnalités, des modèles et des cliparts supplémentaires.</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-participate">
        <div class="action-text action-link">
          <a href="https://openoffice.apache.org/get-involved.html">
            <h2>Je veux participer à OpenOffice</h2>
            <p>Apache OpenOffice est conçu avec l'aide de personnes du monde entier. N'hésitez pas à contribuer !</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-social">
        <div class="action-text action-link">
          <a href="/social/index.html" onclick="javascript:follow( 'SocialLink' );">
            <h2>Je souhaite rester en contact avec OpenOffice</h2>
            <p>Suivez la progression d'OpenOffice via la liste d'annonces, notre blog ou les réseaux sociaux.</p>
          </a>
          <div class="action-social-extra">
            <p>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'ApacheBlog' );"
                title="Suivez notre Blog officiel">
                <img src="/images/logo-rss-16.png" alt="Blog" />
                <a>Blog Officiel</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'Facebook' );"
                title="Suivez nous sur Facebook">
                <img src="/images/logo-facebook-16.png" alt="Facebook" />
                <a>Facebook</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'Twitter' );"
                title="Suivez nous sur Twitter">
                <img src="/images/logo-twitter-16.png" alt="Twitter" />
                <a>Twitter</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'YouTube' );"
                title="Inscrivez vous à notre chaîne YouTube">
                <img src="/images/logo-youtube-16.png" alt="YouTube" />
                <a>YouTube</a>
              </span>
            </p>
          </div>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
  </ul>

  <div id="SupportedAndSupporters">
    <a href="https://validator.w3.org/check?uri=referer"
    title="W3C Service de validation de balisage - Vérifie le balisage (HTML, XHTML, ...) des documents Web">
    <img src="https://www.w3.org/Icons/valid-xhtml10-blue.png"
    alt="XHTML Valide 1.0!" height="31" width="88" /></a>
  </div>
</div>

<div id="news">

  <div class="first campaign" style="height: 210px; float: right; overflow: auto;">
    <h2>Posts Recents sur le  Blog</h2>

    <p style="text-align:right">
      <a href="https://blogs.apache.org/OOo/" target="_blank">All Posts</a>
    </p>

    <p>
      <em>6 October 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-17">
      Announcing Apache OpenOffice 4.1.11</a>
      <br />

      <em>4 May 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-16">
      Announcing Apache OpenOffice 4.1.10</a>
      <br />

      <em>7 February 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-15">
      Announcing Apache OpenOffice 4.1.9</a>
      <br />

      <em>6 January 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/new-release-for-apple-s">
      New release for Apple's macOS 11 (Big Sur) - Also with fixes for Linux and Windows</a>
      <br />

      <em>10 November 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-14">
      Announcing Apache OpenOffice 4.1.8</a>
      <br />

      <em>29 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/300-million-downloads-of-apache">
      300 Million Downloads of Apache OpenOffice</a>
      <br />

      <em>15 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/the-apache-software-foundation-celebrates">
      The Apache Software Foundation Celebrates 20 Years of OpenOffice®</a>
      <br />

      <em>17 May 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/apache-openoffice-needs-your-help">
      Apache OpenOffice needs your help</a>
      <br />

      <em>15 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/the-apache-software-foundation-celebrates">
      The Apache Software Foundation Celebrates 20 Years of OpenOffice®</a>
      <br />

      <em>22 October 2019:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/1-6-million-downloads-of">
      1.6 million downloads of Apache OpenOffice 4.1.7</a>
      <br />

      <em>21 September 2019:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-13">
      Announcing Apache OpenOffice 4.1.7</a>
      <br />

      <em>18 November 2018:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-12">
      Announcing Apache OpenOffice 4.1.6</a>
      <br />

      <em>31 January 2018:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/over-3-2-million-downloads">
      Over 3.2 million downloads of Apache OpenOffice 4.1.5</a>
      <br />

      <em>30 December 2017:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-11">
      Announcing Apache OpenOffice 4.1.5</a>
      <br />

      <em>19 October 2017:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-1">
      Announcing Apache OpenOffice 4.1.4</a>
      <br />

      <em>28 November 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/over_200_million_downloads_of">
      Over 200 million downloads of Apache OpenOffice</a>
      <br />

      <em>12 October 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12">
      Announcing Apache OpenOffice 4.1.3</a>
      <br />

      <em>28 October 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11">
      Announcing Apache OpenOffice 4.1.2</a>
      <br />

      <em>27 September 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/coming_soon_apache_openoffice_4">
      Coming soon... Apache OpenOffice 4.1.2</a>
      <br />

      <em>13 May 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/authoring_e_books_in_apache">
      Authoring e-Books in Apache OpenOffice</a>
      <br />

      <em>13 April 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/collaboration_is_in_our_dna">
      Collaboration is in our DNA</a>
      <br />
    </p>
  </div>

  <div id="all_news" style="height: 375px; float: left; overflow: auto;">
    <div class="campaign">
      <h2>Recent News</h2>

      <p style="text-align:right">
        <a href="/news/index.html" target="_blank">Archived News</a>
      </p>
      <p></p>

      <h2>Apache OpenOffice 4.1.11 released</h2>

      <p>
        <em>6 October 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-17"
        title="Official blog post about Apache OpenOffice 4.1.11">official release of version 4.1.11</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.11+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.11">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/fr/download/"
        title="Download Apache OpenOffice 4.1.11">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.10 released</h2>

      <p>
        <em>4 May 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-16"
        title="Official blog post about Apache OpenOffice 4.1.10">official release of version 4.1.10</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.10+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.10">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.10">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.9 released</h2>

      <p>
        <em>7 February 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-15"
        title="Official blog post about Apache OpenOffice 4.1.9">official release of version 4.1.9</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.9+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.9">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.9">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.8 released</h2>

      <p>
        <em>10 November 2020:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-14"
        title="Official blog post about Apache OpenOffice 4.1.8">official release of version 4.1.8</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.8+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.8">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.8">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.7 released</h2>

      <p>
        <em>21 September 2019:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-13"
        title="Official blog post about Apache OpenOffice 4.1.7">official release of version 4.1.7</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.7+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.7">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.7">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.6 released</h2>

      <p>
        <em>18 November 2018:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-12"
        title="Official blog post about Apache OpenOffice 4.1.6">official release of version 4.1.6</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.6+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.6">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.6">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.5 released</h2>

      <p>
        <em>30 December 2017:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-11"
        title="Official blog post about Apache OpenOffice 4.1.5">official release of version 4.1.5</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.5+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.5">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.5">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.4 released</h2>

      <p>
        <em>19 October 2017:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-1"
        title="Official blog post about Apache OpenOffice 4.1.4">official release of version 4.1.4</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.4+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.4">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.4">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.3 released</h2>

      <p>
        <em>12 October 2016:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12"
        title="Official blog post about Apache OpenOffice 4.1.3">official release of version 4.1.3</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.3+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.3">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.3">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.2 released</h2>

      <p>
        <em>28 October 2015:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11"
        title="Official blog post about Apache OpenOffice 4.1.2">official release of version 4.1.2</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.2+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.2">Release Notes</a> you can read about all bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.2">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Udine moves to OpenOffice, will save 360,000 Euro</h2>

      <p>
        <em>16 September 2014:</em>
        The City of Udine, in Italy, announced a process that will lead to the installation of OpenOffice on
        900 municipal desktops, saving the city 360,000 Euro. ZDNet's Raffaele Mastrolonardo has the
        <a href="http://www.zdnet.com/another-italian-city-announces-its-ditching-microsoft-windows-for-open-source-7000033682/">details</a>.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.1 released</h2>

      <p>
        <em>21 August 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1"
        title="Official blog post about Apache OpenOffice 4.1.1">official release of version 4.1.1</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.1">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.1">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.0 released</h2>

      <p>
        <em>29 April 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/the_apache_openoffice_project_announce"
        title="Official blog post about Apache OpenOffice 4.1.0">official release of version 4.1.0</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.0">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.0">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>
  </div>
</div>

<!-- Every new element and text that is defined below the previous DIV will be actually displayed wrapped below this DIV
(because of "clear: both" instead of floated around the previous DIVs. This is really needed. -->
<div style="clear: both;">
</div>

</body>
</html>
