# Formulaire de RSVP de mariage sur votre propre site de mariage

> Un formulaire de RSVP pour un site de mariage fait maison : une réponse par invitation, un repas par invité nommé, une date limite et la liste de qui n'a pas répondu.

Publié le 2026-10-25 · https://ikiform.com/fr/guides/event-registration/wedding-rsvp

Donnez à chaque invitation son propre lien de RSVP, qui porte un code d'invitation et les prénoms des invités, et laissez le formulaire afficher un nom et un choix de repas par invité. Chaque réponse est envoyée à Ikiform : vous recevez un e-mail pour chacune et un CSV à remettre au traiteur. Rapprochez les réponses de votre liste d'invités dans un tableur pour voir qui n'a pas répondu, et mettez le formulaire en pause après votre date limite.

## Ce qui change pour un mariage

Un meetup compte des inconnus. Un mariage compte une liste d'invités que vous avez déjà, invitation par invitation. Quatre choses en découlent :

- **Une réponse par invitation, pas par personne.** Un couple ou une famille répond ensemble.
- **Des invités nommés, pas un nombre d'invités.** Vous avez invité Ada et Sam, pas `2`. Un +1 figure sur l'invitation ou n'y figure pas.
- **Un repas par personne.** Le traiteur a besoin des totaux poisson, bœuf et végétarien, plus les assiettes enfants.
- **Une date limite ferme et une liste de relances.** Le lieu veut des chiffres à une date précise, et la liste utile est celle de qui n'a pas répondu.

Les services de sites de mariage comme Zola, The Knot et Joy ont des outils de RSVP construits autour d'une liste d'invités, avec recherche par nom. Si vous utilisez l'un d'eux pour votre site, utilisez son RSVP. Cette page s'adresse à un site de mariage que vous avez fait vous-même, sur Squarespace, Carrd, Framer ou en HTML simple, où vous voulez le RSVP sur votre propre page.

Ikiform n'a ni recherche dans une liste d'invités ni groupes répétables : le formulaire ne peut donc pas savoir seul qui figure sur une invitation. L'astuce consiste à mettre cette information dans le lien.

Schéma : De la liste d'invités aux chiffres du traiteur, avec des liens de RSVP personnels

1. Votre tableur d'invités a une ligne par invitation : un code court, le nom du foyer et les prénoms des invités.
2. Une formule transforme chaque ligne en lien de RSVP personnel qui porte le code et les prénoms.
3. Vous imprimez le lien en QR code sur l'invitation, ou l'envoyez dans un message.
4. La page de RSVP lit le lien et affiche un nom et un choix de repas par invité, puis envoie à Ikiform.
5. Vous exportez les réponses en CSV et les importez à côté de la liste d'invités.
6. En rapprochant les codes, vous voyez quelles invitations n'ont pas répondu, et donc qui relancer.
7. Compter chaque repas sur l'ensemble des réponses donne les totaux du traiteur.

La liste d'invités reste dans votre tableur. Le lien n'en porte que ce qu'il faut pour personnaliser le formulaire.

## Créer un lien par invitation

Dans votre tableur d'invités, mettez un code court en colonne A, comme `okafor` ou `nguyen-family`, le foyer en B, et les prénoms des invités en C, séparés par des virgules. Cette formule en D construit le lien :

`Liste d'invités, colonne D`:

```text
="https://ada-and-sam.example/rsvp?party=" & A2 & "&names=" & ENCODEURL(C2)
```

Imprimez chaque lien en QR code sur l'invitation, ou collez-le dans un message. Gardez des codes en minuscules avec des tirets ; le pattern du champ refuse tout le reste, ce qui détecte tôt un code mal saisi.

## Le formulaire

Collez ceci dans votre page de mariage, ou dans un bloc d'intégration sur un créateur de sites. Il lit `party` et `names` dans le lien, ajoute une ligne nom et repas par invité, jusqu'à quatre, et se masque après la date limite. Sans prénoms dans le lien, il affiche une seule ligne à remplir.

`rsvp.html`:

```html
<form id="rsvp" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <input type="hidden" name="party" id="party">
  <div id="guests"></div>
  <label>Email for updates <input name="email" type="email" autocomplete="email" required></label>
  <label>A song that gets you dancing <input name="song" maxlength="120"></label>
  <label>Anything we should know? <textarea name="note" rows="3" maxlength="1000"></textarea></label>
  <input type="hidden" name="_redirect" value="https://ada-and-sam.example/thank-you">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Send our RSVP</button>
</form>
<p id="closed" hidden>RSVPs closed on 1 May. Message us if your plans have changed.</p>

<template id="guest-row">
  <fieldset>
    <legend></legend>
    <label>Name <input data-part="name" maxlength="80" autocomplete="off"></label>
    <label>Meal
      <select data-part="meal">
        <option value="beef">Beef</option>
        <option value="fish">Fish</option>
        <option value="vegetarian">Vegetarian</option>
        <option value="child">Child's menu</option>
        <option value="not_coming">Can't come</option>
      </select>
    </label>
  </fieldset>
</template>

<script>
  const DEADLINE = new Date("2027-05-01T23:59:00+01:00");
  const params = new URLSearchParams(location.search);
  const party = (params.get("party") ?? "").toLowerCase();
  const names = (params.get("names") ?? "").split(",").map((name) => name.trim()).filter(Boolean).slice(0, 4);
  const rsvp = document.getElementById("rsvp");

  if (Date.now() > DEADLINE.getTime()) {
    rsvp.hidden = true;
    document.getElementById("closed").hidden = false;
  } else {
    document.getElementById("party").value = party;
    const rows = names.length ? names : [""];
    rows.forEach((name, index) => {
      const n = index + 1;
      const row = document.getElementById("guest-row").content.cloneNode(true);
      row.querySelector("legend").textContent = name || "Your name";
      const input = row.querySelector('[data-part="name"]');
      input.name = `guest_${n}_name`;
      input.value = name;
      input.required = n === 1;
      row.querySelector('[data-part="meal"]').name = `guest_${n}_meal`;
      document.getElementById("guests").append(row);
    });
  }
</script>
```

- Le repas de chaque invité inclut `Can't come`, pour qu'un foyer dont une personne ne peut pas venir envoie quand même une seule réponse.
- Les champs de nom sont pré-remplis mais modifiables, pour qu'un invité puisse corriger une orthographe ou nommer un enfant.
- Le formulaire envoie de façon classique et arrive sur votre page de remerciement grâce à `_redirect`. Mettez-y la date, le lieu et un lien de calendrier ; Ikiform n'envoie pas d'e-mail à vos invités.
- La date limite ne fait que masquer le formulaire dans le navigateur. À la date limite, choisissez aussi **Pause form** dans Ikiform, pour qu'un onglet resté ouvert ne puisse pas envoyer. Les formulaires en pause répondent `403 form_paused`.

Collez cette définition dans l'onglet **Fields** du formulaire. Essayez : un code d'invitation avec une majuscule ou un espace échoue au pattern, avec le message que vous avez défini.

Formulaire : Wedding RSVP

- **Code d'invitation** (`party`, text, obligatoire)
- **E-mail pour les nouvelles** (`email`, email, obligatoire)
- **Nom de l'invité 1** (`guest_1_name`, text, obligatoire)
- **Repas de l'invité 1** (`guest_1_meal`, select, obligatoire)
- **Nom de l'invité 2** (`guest_2_name`, text)
- **Repas de l'invité 2** (`guest_2_meal`, select)
- **Nom de l'invité 3** (`guest_3_name`, text)
- **Repas de l'invité 3** (`guest_3_meal`, select)
- **Nom de l'invité 4** (`guest_4_name`, text)
- **Repas de l'invité 4** (`guest_4_meal`, select)
- **Une chanson qui vous fait danser** (`song`, text)
- **Quelque chose à nous dire ?** (`note`, textarea)

Les champs suivent l'ordre de l'invitation : le CSV contient donc le nom de chaque invité suivi de son repas. Seul le premier invité est obligatoire.

## Qui n'a pas répondu, et quoi commander

1. Exportez les RSVP en CSV depuis **Submissions** et importez-les dans un onglet nommé `Replies` du tableur de la liste d'invités.
2. Si une invitation a répondu deux fois, gardez sa ligne la plus récente : triez par `created_at`, du plus récent au plus ancien, et supprimez les doublons sur la colonne `party`.
3. Listez les invitations sans réponse, avec les codes en colonne A de la liste d'invités et `party` en colonne E de Replies :

`Sans réponse`:

```text
=FILTER(A2:C, A2:A <> "", ISNA(MATCH(A2:A, Replies!E2:E, 0)))
```

Comptez ensuite chaque repas pour le traiteur. Un prénom n'est jamais égal à une valeur de repas, donc une seule plage couvrant toutes les colonnes d'invités suffit :

`Assiettes poisson`:

```text
=COUNTIF(Replies!G2:N, "fish")
```

| Chiffre | Comment |
| --- | --- |
| Personnes présentes | Additionnez les totaux de `beef`, `fish`, `vegetarian` et `child` |
| Ne vient pas | `COUNTIF` sur la même plage pour `not_coming` |
| Assiettes enfants | `COUNTIF` pour `child`, que la plupart des traiteurs facturent à part |
| Remarques alimentaires | Lisez la colonne `note`. Les allergies s'y cachent |

> Les e-mails de notification arrivent avec l'e-mail de chaque invité en adresse de réponse, pour que vous puissiez répondre aux questions directement depuis votre boîte. Ikiform écrit à vous et à votre partenaire, pas à vos invités.

## Avant d'envoyer les invitations

- Réglez **Allowed domains** sur le domaine de votre site de mariage, et sur le domaine de préproduction du créateur de sites pendant vos tests.
- Ikiform ne fusionne ni ne rejette les soumissions répétées par e-mail. Une répétition identique dans les 24 heures ne fait qu'augmenter le score de spam. Dédoublonnez là où vit la liste, ou au moment de l'export. La réponse la plus récente par code fait foi.
- Toute personne ayant un lien peut en changer le code ou les prénoms. Pour un mariage, ce n'est pas grave : votre tableur décide qui a été invité, et la liste des sans-réponse révèle toute bizarrerie.
- Les proches plus âgés n'utiliseront peut-être pas du tout le formulaire. Notez les réponses par téléphone et sur papier dans votre tableur pour que les totaux restent complets.

## Vérifiez avant d'envoyer les invitations

1. Ouvrez votre propre lien d'invitation sur un téléphone. Les prénoms s'affichent, chacun avec un choix de repas.
2. Choisissez `Can't come` pour un invité, envoyez, et vous arrivez sur votre page de remerciement.
3. Ouvrez **Submissions** dans le tableau de bord. La nouvelle soumission y est, avec tous les champs envoyés.
4. Vérifiez la boîte de réception de chaque destinataire des notifications. Chacun reçoit un e-mail avec les champs, et **Reply** répond à l'expéditeur quand le formulaire a un champ `email`.
5. Importez le CSV, et vérifiez que la liste des sans-réponse n'affiche plus votre code.
6. Réglez la date limite sur hier dans une copie de test et vérifiez que le formulaire se masque.

## Pièges

| Problème | Que faire |
| --- | --- |
| `422` avec `party: Use the link from your invitation` | Le code contient des majuscules, des espaces ou d'autres caractères. Corrigez le code dans le tableur, ou demandez à l'invité d'utiliser son lien. |
| Un invité voit une ligne vide au lieu des prénoms | Le lien a perdu sa partie `names`, souvent parce qu'une messagerie l'a raccourci. Envoyez le lien complet ou le QR code. |
| `422 validation_failed` | L'envoi ne correspond pas à la définition des champs du formulaire. `error.fields` nomme chaque champ et la raison. Faites correspondre le `name` de l'input à l'id du champ. |
| `403 origin_not_allowed`, ou tous les envois finissent en spam | Le domaine de la page n'est pas dans les **Allowed domains** du formulaire. Ajoutez-le, plus `localhost` pour les tests en local. Les sous-domaines d'un domaine listé sont autorisés. |
| Le navigateur arrive sur la page de remerciement d'Ikiform au lieu de la vôtre | `_redirect` est ignoré sauf si son domaine figure dans **Allowed domains** et qu'il s'agit d'une URL `https:`. Ajoutez le domaine, ou définissez plutôt **Redirect after submit** dans les réglages du formulaire. |

## Questions

### Les invités peuvent-ils voir qui d'autre vient ?

Non. Les RSVP arrivent dans votre tableau de bord Ikiform et dans votre boîte de réception. Rien n'est republié sur le site.

### Le formulaire peut-il envoyer un e-mail de confirmation aux invités ?

Pas depuis Ikiform, qui n'écrit qu'à vous. Affichez les détails sur la page de remerciement, ou envoyez chaque réponse par webhook à un outil d'e-mailing et envoyez la confirmation depuis celui-ci.

### Comment arrêter les RSVP après la date limite ?

Masquez le formulaire sur la page après la date, comme le fait l'exemple, et choisissez Pause form dans Ikiform. Un formulaire en pause refuse les nouveaux envois avec 403 form_paused.

### Et si un invité répond deux fois ?

Les deux réponses sont stockées. Au moment de compter, gardez la plus récente par code d'invitation, en triant de la plus récente à la plus ancienne puis en supprimant les doublons sur le code.

### Ikiform est-il gratuit ?

Non, il n'y a pas d'offre gratuite. Les tests sont gratuits : vous pouvez envoyer 50 soumissions de test par mois depuis localhost avant de payer. Pour passer en production, Pro commence à 6 $/mois pour 500 soumissions, ou vous pouvez payer une seule fois 10 000 soumissions pour 49 $ ou 50 000 soumissions pour 149 $, avec des crédits qui n'expirent jamais.

## Autres guides

- [Inscription à un événement](https://ikiform.com/fr/guides/event-registration.md): Recevez les RSVP sur votre page d'événement : formulaire, limite d'invités, décompte fiable, clôture quand c'est complet et liste d'accueil, sans billetterie.
- [Sans Eventbrite](https://ikiform.com/fr/guides/event-registration/without-eventbrite.md): Gérez les inscriptions d'un événement associatif gratuit sur votre site : choix de sessions, e-mail de confirmation par votre outil, effectifs par salle et liste d'accueil.
- [Inscription des bénévoles](https://ikiform.com/fr/guides/event-registration/volunteer-signup.md): Un formulaire d'inscription de bénévoles avec choix de créneaux et téléphone pour le jour J, et un script qui repère les créneaux en manque et bâtit le planning.
