www.toiture24.ch Open in urlscan Pro
2a06:98c1:3120::3  Public Scan

Submitted URL: https://toiture24.ch/
Effective URL: https://www.toiture24.ch/fr/
Submission: On December 16 via api from CH — Scanned from CH

Form analysis 4 forms found in the DOM

<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
  <div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
    <input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
  </div>
  <div class="flex-even">
    <button type="submit" class="btn-arrow-tail" id="go">Ok</button>
  </div>
</form>

Name: formScope.leadform

<form name="formScope.leadform" class="form form-horizontal ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-valid-pattern ng-valid-email" novalidate="">
  <input type="hidden" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required" ng-model="data.lead_version" name="data.lead_version" required="" ng-init="data.lead_version = 'v1'">
  <!-- ngIf: loadingState.showMatchingLoader -->
  <!-- ngIf: loadingState.showSuccessMatchMessage -->
  <loading-state form-step="formScope.step" form-data="data" form-id="8773" loading-state="loadingState" sanitize-params="sanitizeParams(params)" update-loading-state="updateLoadingState(state)" class="ng-isolate-scope">
  </loading-state>
  <div class="row">
    <div class="col-centered col-sm-8 col-md-7">
      <fieldset ng-disabled="formScope.step !== 1">
        <div ng-form="" name="step1" ng-show="formScope.step === 1" class="ng-pristine ng-invalid ng-invalid-required">
          <p class="form-heading">
          </p>
          <div class="form-group" sd-field-id="data.postcode" ng-class="{'has-error has-feedback': getErrorClassForField('data.postcode'), 'has-success has-feedback': getField('data.postcode').$touched &amp;&amp; getField('data.postcode').$valid}">
            <label for="data.postcode" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Code postal </label>
            <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
              <input type="text" class="input-sm form-control upper hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-invalid ng-invalid-required" placeholder="Code postal" ng-model="data.postcode" name="data.postcode"
                id="data.postcode" required="" clearable="" sd-postcode-validator="https://skyapi.skydreams.com/1.0/postcode/validate/CH" sd-postcode-auto-complete="" url="https://skyapi.skydreams.com/1.0/postcode/autocomplete/CH/" city="data.city"
                cityctrl="formScope.leadform.step1[&quot;data.city&quot;]" address="data.address" addressctrl="formScope.leadform.step1[&quot;data.address&quot;]" administrativearea="data.administrative_area"
                administrativeareactrl="formScope.leadform.step1[&quot;data.administrative_area&quot;]">
              <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.postcode'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.postcode').$touched &amp;&amp; getField('data.postcode').$valid,
        'sd-pending form-control-feedback': getField('data.postcode').$pending
    }
    "></span>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.postcode')" ng-show="getErrorClassForField('data.postcode')">
                <div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer un code postal valide </div>
                <div class="error" sd-message="postcode" style="display: none;"> Veuillez indiquer un code postal valide </div>
              </div>
            </div>
          </div>
          <div class="form-group" sd-field-id="data.city" ng-class="{'has-error has-feedback': getErrorClassForField('data.city'), 'has-success has-feedback': getField('data.city').$touched &amp;&amp; getField('data.city').$valid}">
            <label for="data.city" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Ville </label>
            <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
              <input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" placeholder="Ville" ng-model="data.city" name="data.city" id="data.city" required="" clearable=""
                data-autocomplete-city="">
              <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.city'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.city').$touched &amp;&amp; getField('data.city').$valid,
        'sd-pending form-control-feedback': getField('data.city').$pending
    }
    "></span>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.city')" ng-show="getErrorClassForField('data.city')">
                <div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer votre ville </div>
              </div>
            </div>
          </div>
          <div class="form-group" sd-field-id="data.address" ng-class="{'has-error has-feedback': getErrorClassForField('data.address'), 'has-success has-feedback': getField('data.address').$touched &amp;&amp; getField('data.address').$valid}">
            <label for="data.address" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Rue </label>
            <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
              <input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" placeholder="Rue" ng-model="data.address" name="data.address" id="data.address" required="" clearable=""
                data-autocomplete-address="">
              <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.address'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.address').$touched &amp;&amp; getField('data.address').$valid,
        'sd-pending form-control-feedback': getField('data.address').$pending
    }
    "></span>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.address')" ng-show="getErrorClassForField('data.address')">
                <div class="error" sd-message="required" style="display: inline;"> Veuillez indiquer le nom de votre rue </div>
              </div>
            </div>
          </div>
          <div class="form-group" sd-field-id="data.address_number"
            ng-class="{'has-error has-feedback': getErrorClassForField('data.address_number'), 'has-success has-feedback': getField('data.address_number').$touched &amp;&amp; getField('data.address_number').$valid}">
            <label for="data.address_number" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> N°/Nom de la résidence </label>
            <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
              <input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-valid ng-empty" placeholder="N°/Nom de la résidence" ng-model="data.address_number" name="data.address_number" id="data.address_number"
                clearable="12">
              <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.address_number'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.address_number').$touched &amp;&amp; getField('data.address_number').$valid,
        'sd-pending form-control-feedback': getField('data.address_number').$pending
    }
    "></span>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.address_number')" ng-show="getErrorClassForField('data.address_number')">
              </div>
            </div>
          </div>
          <div class="form-group">
            <div class="col-xs-12 col-sm-offset-4 col-md-offset-5 col-md-7 col-sm-8">
              <button type="button" id="proceed-to-step-2" class="btn-arrow-tail button upper" ng-class="{'loading':submitting}" ng-click="progress()"> Etape 2 </button>
            </div>
          </div>
          <div class="free form-group">
            <div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
              <div class="free text-center">
                <span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
              </div>
            </div>
          </div>
        </div>
      </fieldset>
      <fieldset ng-disabled="formScope.step !== 2" disabled="disabled">
        <div ng-form="" name="step2" ng-show="formScope.step === 2" class="ng-pristine ng-invalid ng-invalid-required ng-valid-minlength ng-hide">
          <input type="hidden" class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required" ng-model="data.lead_version" name="data.lead_version" required="" ng-init="data.lead_version = &quot;v3&quot;">
          <div class="form-group form-group-radio" sd-field-id="data.type" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.type').$invalid}">
            <label for="data.type" class="col-sm-4 col-md-5 control-label
    "> Type de projet </label>
            <div class="col-xs-12 col-sm-8 col-md-7">
              <div class="radio-btns-container">
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="tiled_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Pose des tuiles <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.type').$invalid}"></span>
                    </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="asphalt_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Installation d'un toit en bitume </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="synthetic_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Installation d'un toit synthétique/EPDM </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="guttering_downpipes" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Remplacer ou réparer les gouttières / tuyaux de descente </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="gutter_cleaning" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Nettoyage des gouttières </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="sink_roof" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Installation d'un toit en zinc </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="straw_roofing" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Installation d'un toit de chaume </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.type" value="roof_cleaning_demossing" ng-model="data.type" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Nettoyage des toits / démoussage </span>
                  </label>
                </div>
              </div>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.type')" ng-show="getErrorClassForField('data.type')">
                <div class="error " sd-message="required" style="display: none;"> Veuillez sélectionner le type de projet </div>
              </div>
            </div>
          </div>
          <!-- ngIf: data.type === 'tiled_roof' || data.type === 'asphalt_roof' || data.type === 'synthetic_roof' || data.type === 'straw_roofing' || data.type === 'sink_roof' -->
          <!-- ngIf: data.type === 'gutter_cleaning' || data.type === 'guttering_downpipes' -->
          <!-- ngIf: (data.type_of_job === 'roof_placement' && (data.type === 'tiled_roof' || data.type === 'asphalt_roof' || data.type === 'synthetic_roof' || data.type === 'straw_roofing' || data.type === 'sink_roof')) || data.type === 'roof_cleaning_demossing' -->
          <div class="form-group form-group-radio" sd-field-id="data.project_date" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.project_date').$invalid}">
            <label for="data.project_date" class="col-sm-4 col-md-5 control-label
    "> Date de début </label>
            <div class="col-xs-12 col-sm-8 col-md-7">
              <div class="radio-btns-container">
                <div class="radio">
                  <label>
                    <input type="radio" name="data.project_date" value="0-1_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Dans un délai d'un mois <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.project_date').$invalid}"></span>
                    </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.project_date" value="1-3_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Dans un délai de 1 à 3 mois </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.project_date" value="3-6_month" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Dans les 3 à 6 mois </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.project_date" value="unknown" ng-model="data.project_date" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Sans préférence </span>
                  </label>
                </div>
              </div>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.project_date')" ng-show="getErrorClassForField('data.project_date')">
                <div class="error" sd-message="required" style="display: none;"> Veuillez indiquer une date de début souhaitée </div>
              </div>
            </div>
          </div>
          <div class="form-group form-group-radio" sd-field-id="showOptionalFileInput" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('showOptionalFileInput').$invalid}">
            <label for="showOptionalFileInput" class="col-sm-4 col-md-5 control-label
    "> Souhaitez-vous ajouter des photos ? <label class="sub-label">Aucune photo à portée de main? Aucun problème</label>
            </label>
            <div class="col-xs-12 col-sm-8 col-md-7">
              <div class="radio-btns-container">
                <div class="radio">
                  <label>
                    <input type="radio" name="showOptionalFileInput" value="false" ng-model="showOptionalFileInput" required="" ng-init="showOptionalFileInput = &quot;false&quot;"
                      class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required">
                    <span class="radio-label"> Non <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('showOptionalFileInput').$invalid}"></span>
                    </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="showOptionalFileInput" value="true" ng-model="showOptionalFileInput" required="" ng-init="showOptionalFileInput = &quot;false&quot;"
                      class="ng-pristine ng-untouched ng-valid ng-not-empty ng-valid-required">
                    <span class="radio-label"> Oui </span>
                  </label>
                </div>
              </div>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('showOptionalFileInput')" ng-show="getErrorClassForField('showOptionalFileInput')">
                <div class="error " sd-message="required" style="display: none;"> showOptionalFileInput.error </div>
              </div>
            </div>
          </div>
          <div class="form-group form-group-radio">
            <div class="col-xs-12 col-sm-offset-4 col-sm-8 col-md-offset-5 col-md-7">
              <!-- ngIf: showOptionalFileInput === 'true' -->
            </div>
          </div>
          <script type="text/ng-template" id="image-upload.html"> <div class="file-input">
        <button class="sd-mt-0_5 btn-default btn-block file-browse" type="button"
                ng-click="$ctrl.browseFile()"
                ng-disabled="$ctrl.uploadFiles.length >= $ctrl.maximumFiles">{{ $ctrl.buttonLabel }}
        </button>
        <input type="file" sd-ng-files ng-model="$ctrl.selectedFile" ng-change="$ctrl.fileChanged()"
               ng-disabled="$ctrl.uploadFiles.length >= $ctrl.maximumFiles" accept="{{ $ctrl.acceptedMimeTypes }}">
        <span ng-if="$ctrl.isFileInvalid" ng-class="{'error': $ctrl.isFileInvalid}"
              class="file-sub-label">{{ $ctrl.buttonSubLabel }}</span>
    </div>
    <div class="uploaded-files" ng-if="$ctrl.uploadFiles.length > 0">
        <div class="uploaded-file-item" ng-repeat="uploadFile in $ctrl.uploadFiles">
            <div class="upload-file-name">{{ uploadFile.name }}</div>
            <div ng-click="$ctrl.removeFile(uploadFile)" ng-if="uploadFile.status === $ctrl.uploadedStatus"
                 class="upload-file-delete"></div>
            <div ng-if="uploadFile.status === $ctrl.uploadingStatus" class="upload-file-loader"></div>
        </div>
    </div>
</script>
          <div class="form-group form-group-radio" sd-field-id="data.buyer_intention" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.buyer_intention').$invalid}">
            <label for="data.buyer_intention" class="col-sm-4 col-md-5 control-label
    "> Avez-vous l'intention d'exécuter ce projet ? </label>
            <div class="col-xs-12 col-sm-8 col-md-7">
              <div class="radio-btns-container">
                <div class="radio">
                  <label>
                    <input type="radio" name="data.buyer_intention" value="yes" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Oui, après avoir comparé les artisans <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.buyer_intention').$invalid}"></span>
                    </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.buyer_intention" value="unknown" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Je ne suis pas encore sûr, cela dépend des informations que j'obtiens </span>
                  </label>
                </div>
                <div class="radio">
                  <label>
                    <input type="radio" name="data.buyer_intention" value="no" ng-model="data.buyer_intention" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                    <span class="radio-label"> Non, je cherche seulement des informations </span>
                  </label>
                </div>
              </div>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.buyer_intention')" ng-show="getErrorClassForField('data.buyer_intention')">
                <div class="error" sd-message="required" style="display: none;"> Veuillez sélectionner l'une des réponses ci-dessus. </div>
              </div>
            </div>
          </div>
          <!-- ngIf: data.buyer_intention === 'unknown' -->
          <div class="form-group" sd-field-id="data.project_description" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.project_description').$invalid}">
            <label for="data.project_description" class="col-sm-4 col-md-5 control-label
            col-xs-12
    "> Description du projet <label class="sub-label">Décrivez brièvement votre projet et recevez des devis plus précis</label>
            </label>
            <div class="col-xs-12 col-sm-8 col-md-7">
              <textarea class="form-control input-sm ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-minlength" placeholder="Décrivez votre projet. (Au moins 10 caractères)" ng-model="data.project_description"
                name="data.project_description" rows="5" id="data.project_description" required="" ng-minlength="10" ng-model-options="{ updateOn:'change keyup', allowInvalid: true }"></textarea>
              <div class="text-danger ng-hide" sd-messages="getErrorForField('data.project_description')" ng-show="getErrorClassForField('data.project_description')">
                <div class="error" sd-message="required" style="display: none;"> Veuillez décrire votre projet. Utilisez au moins 10 caractères. </div>
                <div class="error" sd-message="minlength" style="display: none;"> Veuillez décrire votre projet. Utilisez au moins 10 caractères. </div>
              </div>
            </div>
          </div>
          <div class="form-group">
            <div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
              <button type="button" id="proceed-to-final-step" class="btn-arrow-tail button upper" ng-class="{'loading':submitting}" ng-click="progress()"> Etape finale </button>
            </div>
          </div>
          <div class="free form-group">
            <div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
              <div class="free text-center">
                <span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
              </div>
            </div>
          </div>
        </div>
      </fieldset>
      <fieldset ng-disabled="formScope.step !== 3" disabled="disabled">
        <div ng-form="" name="step3" ng-show="formScope.step === 3" class="ng-pristine ng-hide ng-invalid ng-invalid-required ng-valid-pattern ng-valid-email">
          <!-- ngIf: loadingState.showMatchEncourageMessage -->
          <dynamic-step3><!-- ngInclude: --><ng-include src="step3Url" class="ng-scope">
              <!-- ngIf: data.type === "commercial"
        || data.type === "zakelijk"
        || data.type === "business"
        || data.business === "zakelijk"
        || data.request_type === "commercial"
        || data.business === "commercial"
        || data.business_type === "commercial"
        || data.type2 === "zakelijk" -->
              <div class="visible-xs ng-scope">
                <div class="form-group sd-mb-0">
                  <div class="col-xs-12 col-sm-8 col-sm-offset-4">
                    <p class="font-weight-bold p-large sd-mb-0">Nom et Coordonnées</p>
                  </div>
                </div>
              </div>
              <div class="form-group form-group-radio ng-scope" sd-field-id="data.gender" ng-class="{'has-error has-feedback': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.gender').$invalid}">
                <label for="data.gender" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Civilité </label>
                <div class="col-xs-12 col-sm-8 col-md-7">
                  <div class="radio-btns-container">
                    <div class="radio">
                      <label>
                        <input type="radio" name="data.gender" value="1" ng-model="data.gender" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                        <span class="radio-label"> M. <span ng-class="{'glyphicon glyphicon-remove': (submitted.indexOf(formScope.step) >= 0) &amp;&amp; getField('data.gender').$invalid}"></span>
                        </span>
                      </label>
                    </div>
                    <div class="radio">
                      <label>
                        <input type="radio" name="data.gender" value="2" ng-model="data.gender" required="" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required">
                        <span class="radio-label"> Mme </span>
                      </label>
                    </div>
                  </div>
                  <div class="text-danger ng-hide" sd-messages="getErrorForField('data.gender')" ng-show="getErrorClassForField('data.gender')">
                    <div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre civilité </div>
                  </div>
                </div>
              </div>
              <div class="form-group ng-scope" sd-field-id="data.firstname"
                ng-class="{'has-error has-feedback': getErrorClassForField('data.firstname'), 'has-success has-feedback': getField('data.firstname').$touched &amp;&amp; getField('data.firstname').$valid}">
                <label for="data.firstname" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Prénom </label>
                <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
                  <input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern" placeholder="Prénom" ng-model="data.firstname" name="data.firstname"
                    id="data.firstname" required="" clearable="" pattern="([.-0-9A-zÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿ' ]){2,}">
                  <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.firstname'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.firstname').$touched &amp;&amp; getField('data.firstname').$valid,
        'sd-pending form-control-feedback': getField('data.firstname').$pending
    }
    "></span>
                  <div class="text-danger ng-hide" sd-messages="getErrorForField('data.firstname')" ng-show="getErrorClassForField('data.firstname')">
                    <div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre prénom </div>
                    <div class="error" sd-message="pattern" style="display: none;"> Veuillez indiquer un prénom valide </div>
                  </div>
                </div>
              </div>
              <div class="form-group ng-scope" sd-field-id="data.name" ng-class="{'has-error has-feedback': getErrorClassForField('data.name'), 'has-success has-feedback': getField('data.name').$touched &amp;&amp; getField('data.name').$valid}">
                <label for="data.name" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Nom </label>
                <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-text">
                  <input type="text" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required ng-valid-pattern" placeholder="Nom" ng-model="data.name" name="data.name" id="data.name" required=""
                    clearable="" pattern="([.-0-9A-zÀ-ÖØ-öø-įĴ-őŔ-žǍ-ǰǴ-ǵǸ-țȞ-ȟȤ-ȳɃɆ-ɏḀ-ẞƀ-ƓƗ-ƚƝ-ơƤ-ƥƫ-ưƲ-ƶẠ-ỿ' ]){2,}">
                  <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.name'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.name').$touched &amp;&amp; getField('data.name').$valid,
        'sd-pending form-control-feedback': getField('data.name').$pending
    }
    "></span>
                  <div class="text-danger ng-hide" sd-messages="getErrorForField('data.name')" ng-show="getErrorClassForField('data.name')">
                    <div class="error" sd-message="required" style="display: none;"> Veuillez indiquer votre nom </div>
                    <div class="error" sd-message="pattern" style="display: none;"> Veuillez indiquer un nom valide </div>
                  </div>
                </div>
              </div>
              <div class="form-group ng-scope">
                <div class="col-xs-12 col-sm-8 col-md-7 col-md-offset-5 col-sm-offset-4">
                  <p class="font-weight-bold p-large sd-mb-0_25 sd-mb-sm-0_5">Coordonnées</p>
                  <p class="sd-m-0">Nos artisans vous contactent souvent d'abord par téléphone afin de vous établir un devis personnalisé. Cette démarche est sans engagement.</p>
                </div>
              </div>
              <div class="sd-mb-1_5 sd-mb-md-0 ng-scope">
                <div class="form-group" sd-field-id="data.phone_number"
                  ng-class="{'has-error has-feedback': getErrorClassForField('data.phone_number'), 'has-success has-feedback': getField('data.phone_number').$touched &amp;&amp; getField('data.phone_number').$valid}">
                  <label for="data.phone_number" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> Numéro de téléphone </label>
                  <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-tel">
                    <input type="tel" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-invalid ng-invalid-required" placeholder="Numéro de téléphone" ng-model="data.phone_number"
                      name="data.phone_number" id="data.phone_number" required="" remote-validation="https://skyapi.skydreams.com/1.0/form/validate/phone/CH">
                    <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.phone_number'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.phone_number').$touched &amp;&amp; getField('data.phone_number').$valid,
        'sd-pending form-control-feedback': getField('data.phone_number').$pending
    }
    "></span>
                    <!-- ngIf: !getErrorClassForField('data.phone_number') -->
                    <div class="description ng-scope" ng-if="!getErrorClassForField('data.phone_number')">
                      <div ng-class="{'text-danger': getErrorClassForField('data.phone_number')}" class="animated">
                        <div>Votre numéro de téléphone est uniquement partagé avec les sociétés Nous vous enverrons un SMS ou vous appellerons pour vérifier votre numéro.</div>
                      </div>
                    </div><!-- end ngIf: !getErrorClassForField('data.phone_number') -->
                    <div class="text-danger ng-hide" sd-messages="getErrorForField('data.phone_number')" ng-show="getErrorClassForField('data.phone_number')">
                      <div class="error" sd-message="required" style="display: none;"> Veuillez entrer votre numéro de téléphone </div>
                      <div class="error" sd-message="remote" style="display: none;"> Veuillez entrer un numéro de téléphone valide </div>
                    </div>
                  </div>
                </div>
                <div class="form-group" sd-field-id="data.email" ng-class="{'has-error has-feedback': getErrorClassForField('data.email'), 'has-success has-feedback': getField('data.email').$touched &amp;&amp; getField('data.email').$valid}">
                  <label for="data.email" class="col-sm-4 col-md-5 control-label
            hidden-xs
    "> E-mail </label>
                  <div class="placeholder-container col-xs-12 col-sm-8 col-md-7 input-email">
                    <input type="email" class="input-sm form-control hide-placeholder ng-pristine ng-untouched ng-isolate-scope ng-empty ng-valid-email ng-invalid ng-invalid-required" placeholder="E-mail" ng-model="data.email" name="data.email"
                      id="data.email" required="" remote-validation="https://skyapi.skydreams.com/1.0/form/validate/email" clearable="">
                    <span aria-hidden="true" ng-class="
    {
        'glyphicon glyphicon-remove form-control-feedback': getErrorClassForField('data.email'),
        'glyphicon glyphicon-ok form-control-feedback': getField('data.email').$touched &amp;&amp; getField('data.email').$valid,
        'sd-pending form-control-feedback': getField('data.email').$pending
    }
    "></span>
                    <!-- ngIf: !getErrorClassForField('data.email') -->
                    <div class="description ng-scope" ng-if="!getErrorClassForField('data.email')">
                      <div ng-class="{'text-danger': getErrorClassForField('data.email')}" class="animated">
                        <div>Les sociétés vous enverront leur devis par email</div>
                      </div>
                    </div><!-- end ngIf: !getErrorClassForField('data.email') -->
                    <div class="text-danger ng-hide" sd-messages="getErrorForField('data.email')" ng-show="getErrorClassForField('data.email')">
                      <div class="error" sd-message="required" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
                      <div class="error" sd-message="email" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
                      <div class="error" sd-message="remote" style="display: none;"> Veuillez entrer votre adresse e-mail </div>
                    </div>
                  </div>
                </div>
              </div>
            </ng-include></dynamic-step3>
          <div class="form-group">
            <div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
              <button type="button" id="request-quotes" class="btn-block button upper d-flex justify-content-center align-items-center" ng-class="{'loading':submitting}" ng-click="progress(true)" ng-disabled="submitting">
                <div>Recevez des devis</div>
              </button>
            </div>
          </div>
          <div class="free form-group">
            <div class="col-xs-12 col-md-offset-5 col-md-7 col-sm-offset-4 col-sm-8">
              <div class="free text-center">
                <span class="glyphicon glyphicon-ok checkmark"></span> Gratuit - Aucune Obligation
              </div>
            </div>
          </div>
        </div>
      </fieldset>
    </div>
  </div>
</form>

<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
  <div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
    <input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
  </div>
  <div class="flex-even">
    <button type="submit" class="btn-arrow-tail" id="pagecenter-cta">Ok</button>
  </div>
</form>

<form ng-submit="openForm()" class="d-flex flex-column flex-sm-row ng-pristine ng-valid">
  <div class="sd-mb-0_5 sd-mb-sm-0 lead text-gray sd-mr-sm-0_5 flex-even">
    <input ng-model="data.postcode" ng-class="{ 'invalid-state': showErrorMessage() }" name="postcode" class="form-control upper ng-pristine ng-untouched ng-valid ng-empty" type="text" ng-change="formScope.step = 1" placeholder="Votre code postal">
  </div>
  <div class="flex-even">
    <button type="submit" class="btn-arrow-tail" id="pagecenter-cta">Ok</button>
  </div>
</form>

Text Content

Nous utilisons des cookies pour offrir et améliorer nos services. En fermant cet
avis ou en continuant à naviguer sur le site, vous acceptez l'utilisation de
cookies. En savoir plus.

1 million de clients satisfaits
230+ sociétés de toiture
Enregistrer une société de toiture



COMPAREZ DEVIS TOITURE


TROUVEZ LE COUVREUR POUR VOTRE PROJET

Ok
Gratuit - Aucune Obligation
1
Localisation

2
Projet

3
Envoyer la demande



OÙ SERA RÉALISÉ VOTRE PROJET ?


QUELS SONT LES DÉTAILS DE VOTRE PROJET ?


RECEVEZ DES DEVIS GRATUITS DE SOCIÉTÉS DE TOITURE

Code postal
Veuillez indiquer un code postal valide
Veuillez indiquer un code postal valide
Ville
Veuillez indiquer votre ville
Rue
Veuillez indiquer le nom de votre rue
N°/Nom de la résidence

Etape 2
Gratuit - Aucune Obligation
Type de projet
Pose des tuiles
Installation d'un toit en bitume
Installation d'un toit synthétique/EPDM
Remplacer ou réparer les gouttières / tuyaux de descente
Nettoyage des gouttières
Installation d'un toit en zinc
Installation d'un toit de chaume
Nettoyage des toits / démoussage
Veuillez sélectionner le type de projet
Date de début
Dans un délai d'un mois
Dans un délai de 1 à 3 mois
Dans les 3 à 6 mois
Sans préférence
Veuillez indiquer une date de début souhaitée
Souhaitez-vous ajouter des photos ? Aucune photo à portée de main? Aucun
problème
Non
Oui
showOptionalFileInput.error

Avez-vous l'intention d'exécuter ce projet ?
Oui, après avoir comparé les artisans
Je ne suis pas encore sûr, cela dépend des informations que j'obtiens
Non, je cherche seulement des informations
Veuillez sélectionner l'une des réponses ci-dessus.
Description du projet Décrivez brièvement votre projet et recevez des devis plus
précis
Veuillez décrire votre projet. Utilisez au moins 10 caractères.
Veuillez décrire votre projet. Utilisez au moins 10 caractères.
Etape finale
Gratuit - Aucune Obligation

Nom et Coordonnées

Civilité
M.
Mme
Veuillez indiquer votre civilité
Prénom
Veuillez indiquer votre prénom
Veuillez indiquer un prénom valide
Nom
Veuillez indiquer votre nom
Veuillez indiquer un nom valide

Coordonnées

Nos artisans vous contactent souvent d'abord par téléphone afin de vous établir
un devis personnalisé. Cette démarche est sans engagement.

Numéro de téléphone
Votre numéro de téléphone est uniquement partagé avec les sociétés Nous vous
enverrons un SMS ou vous appellerons pour vérifier votre numéro.
Veuillez entrer votre numéro de téléphone
Veuillez entrer un numéro de téléphone valide
E-mail
Les sociétés vous enverront leur devis par email
Veuillez entrer votre adresse e-mail
Veuillez entrer votre adresse e-mail
Veuillez entrer votre adresse e-mail
Recevez des devis
Gratuit - Aucune Obligation
Le site web de toiture numéro 1 en Suisse

Dernière demande générée il y a 7 minutes

189 demandes générées aujourd'hui

1 million de clients ravis

SSL Site Sécurisé


COMPAREZ DES SOCIÉTÉS DE TOITURE TELLES QUE:





POURQUOI TOITURE24.CH?

ECONOMISEZ 40%

Sur votre projet

GAGNEZ DU TEMPS

Seulement 1 minute

RECEVEZ PLUSIEURS DEVIS

De sociétés locales de confiance


RECEVEZ DES OFFRES GRATUITES ET ÉCONOMISEZ JUSQU'À 40%

Ok


CE QU'EN PENSENT NOS UTILISATEURS


"SERVICE GÉNIAL ET DE CONFIANCE !"

Définitivement le meilleur endroit pour trouver un professionel qualifié. Ce
service est très efficace et facile d'utilisation. Il m'a suffi de sélectionner
le devis qui me convenait le mieux ! Excellent service. Encore merci !

- Pierre Martin


"UNE TRÈS BONNE VALEUR AJOUTÉE"

Toiture24.ch m'a aidé à trouver un très bon professionel pour mon projet. Après
avoir comparé différentes entreprises j'ai pu choisir le meilleur devis en
seulement quelques minutes !

- M. Lambert


RECEVEZ DES OFFRES GRATUITES ET ÉCONOMISEZ JUSQU'À 40%

Ok


POURQUOI NOUS CHOISIR ?

#1 Site de toiture
1 million de clients ravis
+ de 15 ans d'expérience
+ de 230 sociétés de toiture


ETES-VOUS UNE SOCIÉTÉ DE TOITURE?

Obtenez votre Essai Gratuit maintenant
×
Accueil Ce que nous faisons Confidentialité Contact
Enregistrer une société de toiture


Envoyez une demande pour recevoir des devis gratuits. Comparez jusqu'à 5
sociétés et sélectionnez le devis qui répond le plus à vos attentes.

POUR LES CLIENTS

 * Accueil
 * Ce que nous faisons
 * Confidentialité
 * Mentions légales
 * Contact

POUR LES SOCIÉTÉS

 * Fonctionnement
 * Essai gratuit

BESOIN DE RENSEIGNEMENTS?


info@toiture24.ch

© Copyright 2023 - Toiture24.ch. Tous droits réservés