Blog

Get SharePoint Document Library Size

On 09/10/2025

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function GetFolderSize(siteUrl, listUrl1, query) {
    // Fetch options with headers for authentication and response format
    const fetchOptions = {
        method: 'GET',
        headers: {
            'Accept': 'application/json;odata=verbose'
        }
    };
    // get web relativeUrl
    var req = `${siteUrl}/_api/web?$select=ServerRelativeUrl`;
    const webServerRelativUrl = (await (await fetch(req, fetchOptions)).json()).d.ServerRelativeUrl;
    let query1 = "";
    if (`${query}`.trim() !== "") {
        query1 = `&$filter=${query}`;
        query = ` and ${query}`;
    }
    // get firstId
    req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id asc`;
    console.log("req", req);
    const firstId = 0;
    console.log("firstId", firstId);
    // get lastId
    req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id desc`;
    console.log("last", req);
    const lastId = (await (await fetch(req, fetchOptions)).json()).d.results[0].Id;
    console.log("lastId", lastId);
    let startId = firstId;
    let endId = firstId + 5000;
    var allItems = [];
    console.log(`startId ${startId} endId ${endId} lastId ${lastId}`);
    console.log("query", query);
    const startDate = new Date();
    let endDate = new Date();
    let diffMinutes = 0;
    let queryNumber = 0;
    do {
        // to avoid 429 error
        if(queryNumber % 10 == 0){
            await sleep(60000); // 60 000 ms = 1 minute
        }
        var select = "?$select=File/Length";
        req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items${select}&$filter=Id ge ${startId} and Id lt ${endId}${query}&$orderby=Id asc&$top=5000&$expand=File`;
        console.log("req", req);
        let respList1 = null;
        try {
            respList1 = await fetch(req, fetchOptions);
            if (!respList1.ok) {
                const errorDetails = await respList1.text();
                console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
                let err = JSON.parse(errorDetails);
                console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
                console.log(err.error.message.value);
                throw new Error(`HTTP error! Status: ${respList1.status}`);
            }
            endDate = new Date();
            queryNumbercatch (error) {
            console.log("error", error);
            return null;
        }
        const items = (await respList1.json()).d.results;
        allItems.push(...items);
        startId += 5000;
        endId += 5000;
        const diffMs = endDate - startDate;
        diffMinutes = Math.floor(diffMs / (1000 * 60));
        console.log(`startId ${startId} endId ${endId} lastId ${lastId} diffMinutes ${diffMinutes} queryNumber  ${queryNumber}`)
    }
    while (endId < lastId);
    console.log("queryNumber", queryNumber);
    return allItems;
}
let totalSize = 0
const siteUrl = "Your site Url";
const items = await GetFolderSize(siteUrl, "Your doclib Name", "startswith(ContentTypeId,'0x0101')");
// calculate file Size
for (let i = 0; i < items.length; i++) {
    if (items[i].File != undefined && items[i].File.Length != undefined) {
        totalSize += parseInt(items[i].File.Length);
    }
}
const totalSizeGB = (totalSize / (1024 * 1024 * 1024)).toFixed(2);
console.log("totalSize   B", totalSize);
console.log("total size MB", (totalSize / (1024 * 1024)).toFixed(2));
console.log("total size GB", totalSizeGB);
console.log("items length", items.length);

        


function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function GetFolderSize(siteUrl, listUrl1, query) {
    // Fetch options with headers for authentication and response format
    const fetchOptions = {
        method: 'GET',
        headers: {
            'Accept': 'application/json;odata=verbose'
        }
    };

    //get web relativeUrl
    var req = `${siteUrl}/_api/web?$select=ServerRelativeUrl`;
    const webServerRelativUrl = (await (await fetch(req, fetchOptions)).json()).d.ServerRelativeUrl;

    let query1 = "";
    if (`${query}`.trim() !== "") {
        query1 = `&$filter=${query}`;
        query = ` and ${query}`;
    }
    //get firstId
    req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id asc`;
    console.log("req", req);
    const firstId = 0;
    console.log("firstId", firstId);
    //get lastId
    req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items?$select=Id&$top=1&$orderby=Id desc`;
    console.log("last", req);
    const lastId = (await (await fetch(req, fetchOptions)).json()).d.results[0].Id;
    console.log("lastId", lastId);


    let startId = firstId;
    let endId = firstId + 5000;
    var allItems = [];

    console.log(`startId ${startId} endId ${endId} lastId ${lastId}`);//FileSizeDisplay
    console.log("query", query);//_UIVersionString File_x0020_Size
    const startDate = new Date();
    let endDate = new Date();
    let diffMinutes = 0;
    let queryNumber = 0;
    do {
        //to avoid 429 error
        if(queryNumber % 10 == 0){
            await sleep(60000); // 60 000 ms = 1 minute
        }
        var select = "?$select=File/Length";
        req = `${siteUrl}/_api/web/getlist('${webServerRelativUrl}/${listUrl1}')/items${select}&$filter=Id ge ${startId} and Id lt ${endId}${query}&$orderby=Id asc&$top=5000&$expand=File`;
        console.log("req", req);
        // Send the asynchronous GET request to the REST API endpoint /_api/site/usage
        let respList1 = null;
        try {
            respList1 = await fetch(req, fetchOptions);

            if (!respList1.ok) {
                const errorDetails = await respList1.text(); // Get error details from the response
                console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
                let err = JSON.parse(errorDetails);
                console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
                console.log(err.error.message.value);
                throw new Error(`HTTP error! Status: ${respList1.status}`);
            }
            endDate = new Date();
            queryNumber++;
        } catch (error) {
            console.log("error", error);
            return null;
        }
        const items = (await respList1.json()).d.results;
        allItems.push(...items);
        startId += 5000;
        endId += 5000;
        const diffMs = endDate - startDate;
        diffMinutes = Math.floor(diffMs / (1000 * 60));
        console.log(`startId ${startId} endId ${endId} lastId ${lastId} diffMinutes ${diffMinutes} queryNumber  ${queryNumber}`)
    }
    while (endId < lastId);

    //console.log("allItems", allItems);
    console.log("queryNumber", queryNumber);
    return allItems;
}
let totalSize = 0


const siteUrl = "Your site Url";

const items = await GetFolderSize(siteUrl, "Your doclib Name", "startswith(ContentTypeId,'0x0101')");


//calculate file Size
for (let i = 0; i < items.length; i++) {

    if (items[i].File != undefined && items[i].File.Length != undefined) {
        totalSize += parseInt(items[i].File.Length);
    }
}
const totalSizeGB = (totalSize / (1024 * 1024 * 1024)).toFixed(2);
console.log("totalSize   B", totalSize);
console.log("total size MB", (totalSize / (1024 * 1024)).toFixed(2));
console.log("total size GB", totalSizeGB);


console.log("items length", items.length);
//console.log("items", items);

Get Sharepoint Site Size

On 09/10/2025

const fetchOptions = {
    method: 'GET',
    headers: {
        'Accept': 'application/json;odata=verbose'
    }
};
let respList1 = await fetch(`yoursiteUrl/_api/site/usage`, fetchOptions);
if (!respList1.ok) {
    const errorDetails = await respList1.text(); // Get error details from the response
    console.error(`HTTP error! Status: ${respList1.status}, Details: ${errorDetails}`);
    let err = JSON.parse(errorDetails);
    console.error(`HTTP error! Status: ${respList1.status}, Details: ${err.error.message.value}`);
    console.log(err.error.message.value);
    throw new Error(`HTTP error! Status: ${respList1.status}`);
}
const usage = await respList1.json();
console.log("usage", `${usage.d.Usage.Storage/ (1024 * 1024 * 1024)} Gb`);
        
In Tools

Calendrier Annuel Avec numero de Semaine

On 09/10/2025

Calendrier Annuel avec numéro de semaine

 

Sharepoint Web Templates List

On 07/10/2025

Modèles de sites SharePoint modernes (2025)

Code du modèle Nom du modèle Description Type de site associé
STS#3 Site d’équipe (Team Site) Site de collaboration pour les équipes, avec bibliothèques de documents, listes de tâches, calendrier et intégration avec Microsoft Teams. Groupe Microsoft 365/Teams
GROUP#0 Site d’équipe moderne Équivalent moderne de STS#3, toujours lié à un groupe Microsoft 365 (et donc à Teams si activé). Groupe Microsoft 365/Teams
SITEPAGEPUBLISHING#0 Site de communication (Communication Site) Pour diffuser des informations (actualités, rapports, événements) à large audience. Pas lié à Teams. Site autonome
COMMSITE#0 Site de communication moderne Version moderne du site de publication, optimisé pour la communication visuelle et les composants web. Site autonome
STS#0 Site vide (Blank Site) Site SharePoint vide, sans listes ni bibliothèques préconfigurées. Site autonome
BDR#0 Centre de documents Pour gérer et organiser des documents en masse, souvent utilisé comme archive. Site autonome
SRCHCEN#0 Centre de recherche Site dédié à la recherche avancée dans SharePoint. Site autonome
SRCHCENTERLITE#0 Centre de recherche léger Version simplifiée du centre de recherche. Site autonome
EDISC#0 Centre de découverte électronique Pour la gestion des données dans un contexte juridique ou de conformité. Site autonome
POINTPUBLISHING#0 Site de publication Pour publier des pages web avec flux de travail d’approbation (classique). Site autonome

2. Modèles classiques (moins utilisés en 2025, mais toujours disponibles)

Code du modèle Nom du modèle Description
STS#1 Site d’équipe classique Ancienne version du site d’équipe, sans intégration moderne avec Teams.
STS#2 Site d’équipe vide Site d’équipe sans contenu préconfiguré.
WIKI#0 Site Wiki Pour créer une base de connaissances collaborative sous forme de wiki.
BLOG#0 Site de blog Pour publier des articles sous forme de blog.
DEV#0 Site de développement Pour les développeurs, avec des listes de suivi de bugs et de tâches.
PROJECTSITE#0 Site de projet Pour gérer des projets, avec des listes de tâches et des jalons.
COMMUNITY#0 Site communautaire Pour créer une communauté avec forums de discussion.
VISPRJS#0 Référentiel Visio Pour stocker et partager des diagrammes Visio.

Cours Nombres Relatifs

On 02/10/2025

Cours : Les Nombres Relatifs (Addition, Soustraction, Multiplication, Division)

1. Qu’est-ce qu’un nombre relatif ?

Un nombre relatif est un nombre qui peut être positif (+) ou négatif (−). Exemples : +3 (positif), −5 (négatif), 0 (ni positif ni négatif).

 

2. Addition et Soustraction de Nombres Relatifs

Règle 1 : Addition de deux nombres négatifs

Le résultat est toujours négatif. On additionne leurs distances à zéro et on garde le signe −. Exemple : (−3) + (−4) = −7 (On fait 3 + 4 = 7, puis on met le signe −.)

Règle 2 : Si deux signes "−" se suivent, ça devient "+"

C’est la règle des signes qui se suivent :

− (−) devient +

+ (+) reste +

Exemples :

(−5) − (−3) = −5 + 3 = −2 (Les deux "−" deviennent "+".)

(+7) + (+2) = 7 + 2 = 9 (Les deux "+" restent "+".)

Cas particulier :

(+5) − (+3) = 5 − 3 = 2 (Le "+ −" devient "−".)

 

Règle 3 : Addition de deux nombres de signes différents

On soustrait les distances à zéro et on garde le signe du nombre le plus grand. Exemples :

(−6) + (+4) = −2 (6 > 4, donc le résultat est négatif.)

(+8) + (−3) = +5 (8 > 3, donc le résultat est positif.)

 

3. Multiplication et Division de Nombres Relatifs

Règle 1 : Produit de deux nombres négatifs

Le résultat est toujours positif. Exemple : (−2) × (−4) = +8

Règle 2 : Produit d’un nombre positif et d’un nombre négatif

Le résultat est toujours négatif. Exemples :

(+3) × (−5) = −15

(−6) ÷ (+2) = −3

 

Exemples :

(+4) × (+3) = +12

(−6) ÷ (−2) = +3

(+5) × (−2) = −10

(−8) ÷ (+4) = −2

4. Résumé des Règles à Retenir

✅ Addition/Soustraction :

Deux "−" qui se suivent → +

Si les nombres ont le même signe, on additionne et on garde le signe.

Si les nombres ont des signes différents, on soustrait et on prend le signe du plus grand.

✅ Multiplication/Division :

Deux nombres négatifs → Résultat positif.

Un positif et un négatif → Résultat négatif.

5. Exercices d’Application

Calcule :

(−7) + (−5) = ?

(+9) − (−4) = ?

(−3) × (−6) = ?

(+12) ÷ (−4) = ?

(−2) + (+8) = ?

Corrigés :

−12

13

+18

−3

+6

6. Astuce pour Retenir

"Moins par moins, égal plus" (pour × et ÷).

"Deux négatifs s’annulent" (en addition/soustraction, −(−) devient +).

Nombre Relatifs Multiplication Division

On 01/10/2025

Exercice : Multiplications et divisions de nombres relatifs

 

 
 

QCM - Mouvement et Vitesse

On 29/09/2025

 

 

 

Nombre Relatifs Addition Soustraction

On 29/09/2025

Exercice : Additions et soustractions de nombres relatifs