VBA macro afficher nom de cellule dans colonne à  côté

Voici une petite macro qui permet d’afficher les noms de cellule d’une colonne dans une autre colonne.

Pratique pour le développement.

Macro excel liste des cellules et plages nommées d’un classeur excel

Une petite macro vraiment intéressante.

Explication  : La macro suivante liste les cellules et les plages nommées, dans l’ordre d’index des feuilles, et crée une table des matières avec liens hypertextes.

Attention à  l’exécuter sur une feuille vierge  !

Git : astuces

Installation

apt-get install git-core

 

Configuration

 

  • Fichier /etc/gitconfig  : Contient les valeurs pour tous les utilisateurs et tous les dépôts du système. Si vous passez l’option –system à  git config, il lit et écrit ce fichier spécifiquement.
  • Fichier ~/.gitconfig  : Spécifique à  votre utilisateur. Vous pouvez forcer Git à  lire et écrire ce fichier en passant l’option –global.
  • Fichier config dans le répertoire Git (c’est à  dire .git/config) du dépôt en cours d’utilisation  : spécifique au seul dépôt en cours. Chaque niveau surcharge le niveau précédent, donc les valeurs dans .git/config surchargent celles de /etc/gitconfig.

Sur les systèmes Windows, Git recherche le fichier .gitconfig dans le répertoire $HOME (C:\Documents and Settings\$USER la plupart du temps). Il recherche tout de même /etc/gitconfig, bien qu’il soit relatif à  la racine MSys, qui se trouve o๠vous aurez décidé d’installer Git sur votre système Windows.

 

Collé à  partir de <http://git-scm.com/book/fr/D%C3%A9marrage-rapide-Param%C3%A9trage-%C3%A0-la-premi%C3%A8re-utilisation-de-Git>

 

configurer un utilisateur

afin d’identifier qui fait quoi

git config –global user.name   « Guillaume Jacquemoud »

git config –global user.email « g.jacquemoud@ultimeo.com »

git config –global core.editor nano

git config –global –add color.ui true

git config alias.st status

git config alias.ct commit

git config alias.ck checkout

git config alias.br branch

 

lister la config

git config –list

 

alias]

st = status

ct = commit

ck = checkout

br = branch

 

 

 

Ignorer les fichiers inutiles

 

Le fait d’indiquer à  Git d’ignorer des fichiers inutiles permet de ne conserver la trace que des modifications apportés au code lui-même.

 

Les changements dans les fichiers temporaires par exemple sont trop fréquents et inintéressants. Nous allons donc tout bonnement ignorer ces fichiers.

Voici une liste non exhaustive de fichiers à  ignorer :

 

  •       des fichiers temporaires : logs, cache…
  •       des fichiers uploadés par les utilisateurs
  •       des fichiers dépendant de l’environnement : configuration de la base de données, index.php, .htaccess…

 

Git stocke la liste des fichiers à  ignorer dans un fichier .gitignore situé à  la racine de l’application. Nous créons ce fichier et y ajoutons le contenu suivant :

 

# .gitignore

tmp/**/*

tmp/**/**/*

.htaccess

config/core.php

config/config.php

config/database.php

webroot/.htaccess

webroot/index.php

webroot/test.php

!.gitignore

 

La syntaxe avec les étoiles permet d’ignorer tous les sous-répertoires de tmp.

Enfin, dernière chose, nous devons également indiquer à  Git de ne pas ignorer les fichiers .gitignore présents dans les répertoires vides. Nous ajoutons pour cela en fin de fichier .gitignore la ligne

 

!.gitignore

 

 

Configurer un dépôt privé

  • Il faut avoir déjà  un projet de créé dans un dossier ex : /var/www/projet1/
  • Avoir fait un git init et des commits
  • Allez dans votre dossier o๠stocker les repositories ex : /var/repos/
  • Faire

git clone –bare /var/www/projet1/.git   /var/repos/mondepot.git

 

Collé à  partir de <http://www.alexgirard.com/git-book/4_configurer_un_d%25C3%25A9p%25C3%25B4t_priv%25C3%25A9.html>

 

Configurer un serveur remote

git remote add ‘prod’ /var/www/repository/ultimeo/tgit/master.git

 

Les commandes

 

Initialisation

 

Sur un projet

Allez dans un dossier de développement (/var/www/projet1/) et en shell taper :

git init

 

Pour un repository

Initialise un repo git vide

Allez dans un dossier de accessible (/home/phpuser/git/) et en shell taper :

mkdir projet1.git

cd projet1.git

git –bare init

 

Ajouter un remote (repository) à  son instance git

git remote add prod /var/www/repository/ultimeo/tgit/master.git

git remote add   origin ssh://phpuser@web1.toto.fr:1987/home/phpuser/git/projet1.git

 

 

Commit

 

git add .

 

git commit -am « message du commit »

 

Réparer une erreur non-committée

Si vous vous êtes embrouillé dans votre répertoire de travail, mais que vous n’avez pas encore committé vos erreurs, vous pouvez retrouver l’état dans lequel était votre répertoire après le dernier commit en utilisant  :

 

$ git reset –hard HEAD

Cela effacera toutes les modifications que vous avez ajouté à  l’index git ainsi que les changements qui sont présents dans votre répertoire de travail mais qui n’ont pas été ajoutés à  l’index. En d’autres termes, après cette commande, le résultat de git diff et git diff –cached sera vide.

Si vous ne voulez restaurer qu’un seul fichier, par exemple hello.rb, utiliser plutôt git checkout  :

 

$ git checkout — hello.rb
$ git checkout HEAD hello.rb

La première commande restaure hello.rb à  la version de l’index afin que git diff hello.rb ne retourne aucune différence. La seconde commande restaurera hello.rb à  la version de la révision HEAD afin que git diff hello.rb et git diff –cached hello.rb ne retourne aucune différence.

 

Réparer une erreur committée

Si vous avez déjà  committé ce que vous n’auriez pas dà», il y a deux faà§ons fondamentalement différentes de régler le problème  :

  1. Vous pouvez créer un nouveau commit qui annule les changements du dernier commit. C’est la manière correcte de s’y prendre si votre erreur est déjà  publique.
  2. Vous pouvez revenir en arrière et modifier l’ancien commit. Vous ne devriez jamais faire à§a si vous avez déjà  rendu l’historique public. Git n’est pas conà§u pour que l’historique d’un projet change et ne peut pas effectuer correctement des fusions répétés sur depuis une branche qui a vu son historique modifié.

 

Réparer une erreur sur un nouveau commit

Il est facile de créer un nouveau commit qui annule les changements d’un commit précédent. Utilisez la commande git revert avec la référence du mauvais commit, par exemple, pour revenir au commit le plus récent  :

 

$ git revert HEAD

Cela créera un nouveau commit qui annulera les changements dans HEAD. Vous pourrez éditer le message de ce nouveau commit.

Vous pouvez aussi revenir sur des changements plus anciens, par exemple, sur l’avant-dernier changement  :

 

$ git revert HEAD^

Dans ce cas, git essayera d’annuler l’ancien changement en gardant intactes les modifications faites depuis. Si plus d’un changement se superpose sur les changements à  annuler, vous aurez à  régler les conflits manuellement, de la même faà§on que quand vous réglez une fusion.

 

Réparer une erreur en modifiant le commit

Si vous venez de committer quelque chose mais que vous vous rendez compte que vous devez réparer ce commit, les versions récentes de git commit vous donnent accès à  l’option –amend qui demande à  git de remplacer le commit de HEAD par un autre, basé sur le contenu actuel de l’index. Cela vous donne l’opportunité d’ajouter de fichiers que vous avez oubliés ou de corriger des erreurs de typo dans le message du commit, avant de publier les changements pour les autre développeurs.

 

Si vous trouvez une erreur dans un ancien commit, mais que vous ne l’avez toujours pas publié, utilisez le mode interactif de git rebase, avec git rebase -i en marquant les changements qui doivent être corrigés avec edit. Cela vous permettra de modifier le commit pendant le processus de recombinaison.

 

Collé à  partir de <http://www.alexgirard.com/git-book/4_r%25C3%25A9paration_avec_git_%25E2%2580%2594_reset%252C_checkout_et_revert.html>

 

 

 

Branches

 

Lister les branches existantes

  •  en local

git branch

  • local + celles des remotes

git branch -a

 

Créer une branche

git banch mabranche

 

Changer de branche

git checkout mabranche

 

pousser une branche

git push prod mabranche

 

tirer une branche (sur la branche en cours)

git pull prod mabranche

 

Merger une branche depuis une autre

ex : on a la branche master et une branche de dev mabranche. On corrige un bug sur le master pour remonter cette correction sur mabranche on fait:

 

se mettre sur la branche de destination

git checkout mabranche

git merge master

 

Dans la plus part des cas on sera dans le cas inverse : le dev sur mabranche est fini, on le fusionne avec le master:

 

git checkout master

git merge mabranche

 

Recombinaison (rebase)

 

Cette commande va retirer chacun de vos commit sur ‘mywork’, en les sauvegardant temporairement comme des patches (dans le dossier « .git/rebase »), puis mettre à  jour la branche ‘mywork’ avec la dernière version de la branche ‘origin’, et enfin appliquer chaque patch sauvegardé à  cette nouvelle version de ‘mywork’.

 

Une fois que la référence (‘mywork’) est mise à  jour jusqu’au dernier objet commit créé, vos anciens commits seront abandonnés. Ils seront sà»rement effacer si vous lancer la commande de ramasse-miettes. (voir git gc)

 

Dans le processus d’une recombinaison, des conflits peuvent se produire. Dans ce cas, le processus s’arrêtera et vous permettra de réparer ces conflits; après les avoir fixés, utilisez « git-add » pour mettre à  jour l’index avec ce nouveau contenu, puis, au lieu de lancer git-commit, lancez juste:

 

$ git rebase –continue

 

et git continuera d’appliquer le reste des patches.

à€ n’importe quel moment, vous pouvez utiliser l’option –abort pour annuler le processus et retourner au même état de ‘mywork’ qu’au démarrage de la recombinaison:

 

$ git rebase –abort

 

Collé à  partir de <http://alx.github.com/gitbook/4_recombinaison_(rebase).html>

 

 

 

 

Supprimer une branche

  • se mettre sur une autre branche !

git branch -d mabranche

 

 

 

Afficher les logs formatés :

git log –pretty=format: »%h par %an, %ar, => %s »

git log –pretty=format: »%h par %an, %ar, => %s » –graph

 

http://www.alexgirard.com/git-book/3_analyser_l%25E2%2580%2599historique_%25E2%2580%2594_git_log.html

http://git-scm.com/book/fr/Les-bases-de-Git-Visualiser-l%27historique-des-validations

 

=> pour sortir de git log : q

 

Git Status

La commande git status vous indique les fichiers que vous avez modifiés récemment

 

 

Cloner un repo

git clone monrepo

 

clone une branche spécifique

git clone -b nomdebranche monrepo

 

Virer les infos git :

find $TARGET -name .git | xargs rm -rf –

find $TARGET -name .gitignore | xargs rm -rf –

find $TARGET -name .gitmodules | xargs rm -rf –

find $TARGET -name .svn | xargs rm -rf –

 

Collé à  partir de <http://www.alexgirard.com/git-book/3_analyser_l%25E2%2580%2599historique_%25E2%2580%2594_git_log.html>

Time lapse : compte à  rebours javascript pour les interros

J’ai développé ce petit script pour ma femme qui est professeur et qui en avait marre, pendant ses interros, que ses élèves lui demandent :

– Il reste combien de temps ?

Le principe est simple vous entrez l’heure de fin de l’examen, puis vous cliquez sur commencer.

Le compte à  rebours commence. A la fin l’écran clignote rouge !

=> Télécharger le script : timelapses <=

Ref technique :

 

VBA : changer nom cellule de manière récursive

Petite macro VBA qui permet de changer de manière récursive le nom des cellules (le nom pas les valeurs).

Cette exemple

  • Boucle sur la première ligne A1, B2, C3 …
  • Vérifie si le contenu de ce champ
  • Si non vide, il renomme la cellule juste en dessous (A2, B2, C2 …) avec le contenu de la cellule initiale.
Nota la fonction offset(x,y) permet de se déplacer de de x,y depuis la cellule en focus.

Installation d’un serveur ubuntu lamp

Installer ubuntu normalement (ne pas faireles pré-installations proposé (ex : lamp))

 

Activer le compte root

Installer ssh

Mettre une IP statique

Modifier comme suit :
redémarrer le service réseau :

Installer le LAMP

Créer un utilisateur php (ex : phpuser)

Personnellement je me crée un utilisateur phpuser qui appartient au groupe www-data et qui à  le droit de se connecter en ssh.
Ensuite pour développer je me connecte avec ce compte il suffit que dans le www
– les dossiers soient en chmod 775 au lieu de 755
– les fichiers soient en chmod 664 au lieu de 644
on résout ainsi les problèmes de droit d’exécution des fichiers tout en maintenant la sécurité

PROCEDURE :

#créer le user :

#Ajouter le user dans le groupe www-data :
#Pour vérifier les groupes du user :
#forcer le user phpuser à  écrire en 775/664 plutôt que 755/644
#forcer le user www-data à  écrire en 775/664 plutôt que 755/644
#on se déplace vers /var
#on change le groupe du www
#On positionne le GID bit : les fichiers et dossiers créés appartiendront au groupe www-data
on met à  jour les droits sur les fichiers & dossier existant s’il y en a

OPTIONNEL : ajout du de votre certificat ssl pour le user

#copier la clé publique

Import et mappage de xml dans fichier excel 2010

Il est intéressant d’importer des fichiers xml dans un fichier excel pour les consulter et travailler sur leurs données.

Pour ce faire il vous faut

Voici une macro qui lié à  un bouton vous permet de mettre à  jour les données du fichier excel à  partir d’un xml qui respecte le mappage créé ci-dessus et dont l’url est connu dans par exemple  la cellule excel de votre classeur que l’on nommera « xmlUrl »

PHP TCPDF : connaitre la hauteur d’un multicell

L’excellente classe PHP TCPDF  qui permet de générer des documents pdf m’a donné l’autre jour du fil à  retordre.

Je travaillais sur la génération de facture en pdf donc avec des colonnes de largeur fixe mais dont le contenu doit pouvoir retourner à  la ligne. Pour ce faire j’utilise la fonction

$pdf->MultiCell()  qui fonctionnent à  merveille, cependant il me fallait (pour d’obscure question de bordure de cellule et de paginnation connaitre la hauteur des cellules générées et ce avant de les écrire afin de pouvoir forcer la même hauteur pour toutes les cellules de la même ligne. En simplifier voilà  ce que je fais:

$data = array(col1,col2,col3); // tableau des cellules d'une même ligne
$maxHeight=5; // c'est la hauteur minimum de mes lignes
foreach($data as $c => $v){
    $tmp= monastucepourconnaitrelahauteur($v);
    if($tmp>$maxHeight) $maxHeight = $tmp;
}


j’ai maintenant $maxHeight qui contient la hauteur de la plus grande cellule de ma ligne
il ne me reste plus qu’à  ecrire ma ligne avec cette hauteur

foreach($data as $c => $v) {
    $this-> MultiCell (
        $w, $maxHeight, trim($v), $border="RL", $align="L", $fill=0, $ln=1, 
        $x, $y, $reseth=true, $stretch=0, $ishtml=0, 
        $autopadding=false, $maxh=0, $valign='T', $fitcell=false
    );
}


Et donc maintenant l’astuce qui est sur le site de tcpdf mais bien cachée :

Il faut remplacer le 1er foreach de cet article par celui ci-dessous :

$maxHeight = 5; // c'est la hauteur minimum de mes lignes
foreach ($data as $c => $v) {
    
    // store current object 
    $this->startTransaction();
    // store starting values 
    $start_y    = $this->GetY();
    $start_page = $this->getPage();
    // call your printing functions with your parameters
    
    $this->MultiCell($w, $maxHeight, trim($v), $border = "RL", $align = "L", $fill = 0, $ln = 1, $x, $y, $reseth = true, $stretch = 0, $ishtml = 0, $autopadding = false, $maxh = 0, $valign = 'T', $fitcell = false);
    // get the new Y 
    $end_y    = $this->GetY();
    $end_page = $this->getPage();
    // calculate height 
    $height   = 0;
    if ($end_page == $start_page) {
        $height = $end_y - $start_y;
    } else {
        for ($page = $start_page; $page <= $end_page; ++$page) {
            $this->setPage($page);
            if ($page == $start_page) {
                // first page 
                $height = $this->h - $start_y - $this->bMargin;
            } elseif ($page == $end_page) {
                // last page 
                $height = $end_y - $this->tMargin;
            } else {
                $height = $this->h - $this->tMargin - $this->bMargin;
            }
        }
    }
    // restore previous object 
    $this->rollbackTransaction(true);
    $height = ceil($height); //je ne m'embête pas de virgule
    if ($height > $maxHeight) {
        $maxHeight = $height;
    }
}


SHELL : chmod/chown recursif que sur dossier ou fichier

Il peut arriver, moi assez souvent en fait, de vouloir changer les droits et propriétaires sur une arborescence de dossier/fichier.

Le problème c’est que l’on souhaite généralement un type de droit (ex:755) pour le dossier et un type de droit pour les fichiers (644).

Ci-dessous une astuce qui peut remédier ce problème. Elle peut d’ailleurs être utiliser pour bien des problèmes grà¢ce à  la puissance de la fonction find.

Pour les dossiers :

Pour les fichiers :