diff --git a/cranspasswords.py b/cranspasswords.py
index b798c44c518fd2c655edd0f151951a4c45cf2a94..9c2de2bc8362807cfec48b58117df14e9973f18b 100755
--- a/cranspasswords.py
+++ b/cranspasswords.py
@@ -273,6 +273,11 @@ def show_roles():
         if role.endswith('-w'): continue
         print " * " + role 
 
+def show_servers():
+    print """Liste des serveurs disponibles"""
+    for server in config.servers.keys():
+        print " * " + server
+
 old_clipboard = None
 def saveclipboard(restore=False):
     global old_clipboard
@@ -472,6 +477,9 @@ if __name__ == "__main__":
     action_grp.add_argument('--list-roles',action='store_const',dest='action',
         default=show_file,const=show_roles,
         help="Lister les rôles des gens")
+    action_grp.add_argument('--list-servers',action='store_const',dest='action',
+        default=show_file,const=show_servers,
+        help="Lister les rôles serveurs")
     action_grp.add_argument('--recrypt-role',action='store_const',dest='action',
         default=show_file,const=update_role,
         help="Met à jour (reencode les roles)")
diff --git a/cranspasswords_bash_completion b/cranspasswords_bash_completion
new file mode 100644
index 0000000000000000000000000000000000000000..6b9aced48c0697b54016077ce394d83987dbfd44
--- /dev/null
+++ b/cranspasswords_bash_completion
@@ -0,0 +1,90 @@
+# Fonction de notre auto completion
+
+contain(){
+  local i
+  for i in $2; do
+      if [[ "$i" = "$1" ]]; then
+        return 0
+      fi
+  done
+  return 1
+}
+
+
+if [[ "$EDITOR" = "" ]]; then
+    export EDITOR="nano";
+fi
+
+_cranspasswords(){
+  # declaration des variables locales
+  local argc first last prev cur cur_first_char opts_short opts role_dir pass_dir server server_list role_list pass_list timeout
+  
+  role_dir="/tmp/cranspasswords-$USER-role/"
+  pass_dir="/tmp/cranspasswords-$USER-passwords/"
+  # Combien de temps on garde les réponses du serveur en cache (en minutes)
+  timeout=5
+
+  #COMPREPLY désigne la réponse à renvoyer pour la complétion actuelle
+  COMPREPLY=()
+  # argc : vaut le nombre d'argument actuel sur la ligne de commande
+  argc=${COMP_CWORD};
+
+  # cur  : désigne la chaine de caractère actuelle pour le dernier mot de la ligne de commande
+  first="${COMP_WORDS[1]}"
+  last="${COMP_WORDS[$(($argc - 1 ))]}"
+  prev="${COMP_WORDS[$(($argc - 2 ))]}"
+  cur="${COMP_WORDS[argc]}"
+  cur_first_char=${cur:0:1}
+  opts_short="-h -v -c -f -l"
+  opts="--help --server --verbose --clipboard --noclipboard --force --edit --view --remove --list --check-keys --update-keys --list-roles --recrypt-roles --roles --list-servers"
+
+
+  mkdir -p -m 700  "$role_dir"
+  mkdir -p -m 700 "$pass_dir"
+  
+  find "$role_dir" -type f -mmin +$timeout -exec rm -f {} \;
+  find "$pass_dir" -type f -mmin +$timeout -exec rm -f {} \;
+
+  # On détermine si on utilsie un serveur alternatif
+  if contain "--server" "${COMP_WORDS[*]}"; then
+    if [[ "$prev" = "--server" ]]; then
+      server=$last;
+    fi
+  else
+    server="default";
+  fi
+
+  # les options possibles pour notre auto-complétion
+  if [[ $cur_first_char = "-" ]]; then
+    COMPREPLY=( $(compgen -W "$opts" -- $cur ) )
+    return 0
+  fi
+  
+  if [[ "$last" = "--server" ]]; then
+    server_list="`cranspasswords --list-servers | grep -- "*" | awk '{print $2}'`"
+    COMPREPLY=( $(compgen -W "$server_list" -- $cur ) )
+    return 0
+  fi
+  
+  if [[ "$last" = "--roles" ]]; then 
+    if  [ ! -f "${role_dir}$server" ]; then
+      echo "`cranspasswords --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server"
+    fi
+    role_list="`cat "${role_dir}$server"`"
+    COMPREPLY=( $(compgen -W "$role_list" -- $cur ) )
+    return 0
+  fi
+  
+  if true; then
+    if  [ ! -f "${pass_dir}$server" ]; then
+      echo "`cranspasswords --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}$server"
+    fi
+    pass_list="`cat "${pass_dir}$server"`"
+    COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )
+    return 0
+  fi
+
+}
+
+# On active l'auto-completion
+complete -F _cranspasswords cranspasswords