Tutos geek

Tutoriaux linux, debian, android et autres

Ajouter un script home-made au menu contextuel de Windows

06 décembre 2016 - Aucun commentaire

Pour ajouter un script au menu contextuel de Windows (click-droit sur un fichier ou un dossier) il va falloir passer par le registre.
Créez un fichier .reg comme ci-dessous, exécutez-le et les modifications apparaitront instantanément sans avoir besoin de rebooter.



Avant de démarrer, notez que vous pouvez ajouter un script lors d'un click-droit sur :
- Un dossier
- Tous les fichiers
- Un fichier d'un certain type
- Une zone vide dans un dossier (le "directory background")

et qu'il y a une différence assez importante entre :
- Ajouter un script
- Ajouter un sous-menu qui contiendra plusieurs scripts (comme sur ma capture d'écran au dessus)

Juste un script

Ajouter un script sur un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""
Le %1 enverra le chemin complet du dossier sur lequel vous avez cliqué en paramètre.

Ajouter un script sur une zone vide d'un dossier

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%V\""
Notez l'utilisation de %V à la place de %1 pour passer le chemin du dossier courant.


Ajouter un script pour tous les fichiers et dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\*\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Ajouter un script sur un certain type de fichier

Ici c'est en 2 temps.
Trouvez d'abord le type de fichier auquel vous souhaitez ajouter un script dans HKEY_CLASSES_ROOT Par exemple HKEY_CLASSES_ROOT\.reg
Notez la valeur de la clé, ici regfile, et créer le fichier suivant
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT]
@="Nom du script"

[HKEY_CLASSES_ROOT\regfile\shell\NOM_DU_SCRIPT\command]
@="C:\\CHEMIN_DU_SCRIPT\\script.bat \"%1\""

Un sous-menu contenant plusieurs scripts

Je ne vais pas vous remettre tous les cas de figure, vous déduirez sans peine les modification à apporter pour votre utilisation.

Ajouter un sous-menu sur les dossiers

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%1\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%1\""

A noter qu'en voulant aussi ajouter le sous-menu lors d'un click-droit sur le background d'un dossier je pensais m'en tirer simplement en ajoutant la clé
[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1;NOM_DU_SCRIPT_2"

mais apparemment on ne peut pas faire pointer 2 clés différentes sur le même SubCommands*, j'ai donc du dupliquer tout le fichier .reg et changer NOM_DU_SCRIPT_1 par NOM_DU_SCRIPT_1_BACK pour le résultat suivant :

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\NOM_DU_MENU]
"MUIVerb"="Nom du menu"
"SubCommands"="NOM_DU_SCRIPT_1_BACK;NOM_DU_SCRIPT_2_BACK"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK]
@="Nom du script 1"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_1_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_1.bat \"%V\""

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK]
@="Nom du script 2"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\NOM_DU_SCRIPT_2_BACK\command]
@="C:\\CHEMIN_DU_SCRIPT\\script_2.bat \"%V\""

Pour ajouter une barre de séparation entre 2 scripts ajoutez un pipe.
"SubCommands"="NOM_DU_SCRIPT_1;|;NOM_DU_SCRIPT_2"


*Si quelqu'un a une solution plus élégante je la prend volontiers.


Sources
Superuser
Askvg
Stackoverflow


Version
Windows 7 x64 - SP1

Jouer à Beyond Good & Evil sur Windows 7

06 décembre 2016 - Aucun commentaire

Le jeu Beyond Good & Evil peut subir quelques problèmes lorsqu'on y joue sur Windows 7, comme les cut-scene vidéo qui avancent trop vite et dont le son est décalé, ou les icônes d'action qui clignotent dans tous les sens.
J'ai modifié certains paramètres Nvidia afin de les résoudre.

Ouvrez le panneau de contrôle Nvidia via le menu Windows, Control panel, Nvidia Control panel.
Allez au menu 3D Settings, Manage 3D settings, onglet Program Settings et sélectionnez BGE. Chez moi il s'appelait "BANG! - gunship Elite(bge.exe)"

Icônes qui s'affolent

Passez l'anti-aliasing sur 2 et l'antialiasing - mode sur override any application setting

Vidéo trop rapide / son décalé

Modifiez vertical sync sur adaptative (half refresh rate)

Normalement ça devrait suffire à rendre le jeu fluide, mais en cas de doute j'ai modifié tous les paramètres pour prendre la plus petite valeur possible à chaque fois.
Faites vos propres tests.










source : gogwiki


Versions
Windows 7 x64 - SP1
Beyond Good & Evil 1.1

Carte graphique
GeForce GTX 670
Driver 375.95
DirectX 11
Nvidia GeForce Experience 3.1.2.31

Connexion VPN entre un client Windows et un serveur Linux

10 août 2016 - Aucun commentaire

Il va falloir installer OpenVPN sur votre serveur Linux et générer les certificats puis installer le client OpenVPN sur votre machine Windows.

Sur Linux (serveur)

Mon debian se fait vieux et les nouvelles versions des programmes ne sont plus forcément supportées.
J'ai trouvé un version d'OpenVPN sur le repository suivant

Repository

vi /etc/apt/sources.list
deb http://archive.debian.org/debian squeeze main
deb http://archive.debian.org/debian squeeze-lts main

vi /etc/apt/apt.conf
Acquire::Check-Valid-Until false;

apt-get upgrade
apt-get update

Installation d'OpenVPN

apt-get install openvpn
apt-get install network-manager-openvpn-gnome

Génération des certificats d'OpenVPN

mkdir /etc/openvpn/easy-rsa/
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
#passer en root
su -
cd /etc/openvpn/easy-rsa
. ./vars
./clean-all
./build-ca
./build-key-server server
./build-key client1
./build-dh
exit

cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.crt /etc/openvpn
cp /etc/openvpn/easy-rsa/keys/server.key /etc/openvpn

Configuration

vi /etc/openvpn/tun0.conf
Fichier complet

Paramètres importants :
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
push "redirect-gateway def1 bypass-dhcp" # pour rerouter tout le trafic internet
push "dhcp-option DNS 10.8.0.1"

Lancer le VPN

openvpn --config /etc/openvpn/tun0.conf --verb 6

Rerouter tout le trafic internet

Pour l'instant il ne sera possible que de communiquer entre le client et le serveur.
Pour rerouter tout le trafic internet il faut le spécifier via une règle IPTable.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
10.8.0.0 est le sous-réseau créé précédemment et eth0 le nom de la carte réseau de votre serveur par lequel passe le trafic internet.

Si vous voulez voir les règles nat existantes :
iptables -t nat -L -n -v

Sur Windows (client)

Copier les fichiers ca.crt, client1.crt et client1.key sur la machine locale dans le répertoire [OpenVPN]\config\
Modifier le nom de l'interface réseau "Local Area Connection X" en "tap0" dans "Control Panel\Network and Internet\Network Connections"
Modifier l'interface réseau en désactivant l'IPv6 (sinon ça va saturer de warning, notre version d'OpenVPN ne gérant pas encore l'IPv6)

Configuration

Créer un fichier .ovpn dans [OpenVPN]\config\
Fichier complet

Paramètres importants :
client
dev tap
dev-node "tap0"
ca ca.crt
cert client1.crt
key client1.key
Lancer le client OpenVPN et se connecter


Source : OpenVPN


Version
Windows 7 x64 - SP1
Debian : 6.0.10 (squeeze)

Synology DS415+ : Changer le répertoire par défaut de Photo station

11 mai 2016 - Aucun commentaire

J'ai récemment acheté un NAS Synology DS415+ afin d'y stocker ma musique, mes photos et mes vidéos, attendez-vous donc à plusieurs posts dédiés à cette plateforme, je suis en plein paramétrage.

Première déconvenue : L'application Photo station ne permet pas de paramétrer l'endroit où sont stocké les photos, une hérésie !
Par défaut il regarde dans /volume1/photo
On doit surement pouvoir bidouiller des fichiers de configuration utilisés par l'appli pour modifier ça, mais la solution simple (mais temporaire ?) que j'ai retenu était de faire un lien symbolique vers mes photos.

Tout d'abord arrêtez le processus, pour cela rendez-vous, depuis l'interface web, dans le Centre de paquet, sélectionnez Photo station, bouton Action, Stop.


Ensuite, depuis le panneau de configuration, Dossiers partagés, supprimez le répertoire "photo".


Accédez au NAS en SSH (depuis Putty par exemple) et rendez vous dans le volume où vous souhaitez stocker vos photo, par exemple volume1, puis créez un lien symbolique pointant sur votre dossier actuel.
cd /volume1
sudo ln -s /volume1/DOSSIER_PHOTO photo
sudo chmod -R 777 /volume1/DOSSIER_PHOTO
Important, mettez les droits à 777 sur la racine du dossier de photo, se contenter de les mettre sur le lien symbolique n'aura pas d'effet.


Sources
https://forum.synology.com/enu/viewtopic.php?t=68474


Version
Synology DS415+
DSM 6.0-7321 Update 6

Forcer un mode d'affichage (portrait, paysage) sur Android

31 mars 2016 - Aucun commentaire

La version de CyanogenMOD que j'ai installé sur ma tablette Samsung Galaxy Tab Pro 12 est géniale mais elle souffre d'un défaut : la rotation automatique de l'écran ne fonctionne pas.
C'est un bug connu et je crois qu'ils ne l'ont toujours pas réglé.

Pour palier au problème il existe la petite application Set Orientation

Elle ne demande aucune permission en particulier et fonctionne a merveille.
Le très léger défaut que je lui trouve c'est qu'elle ne garde pas en mémoire les dernières orientations utilisées, il faut à chaque fois scroller pour trouver la bonne.

Activer VT-x/AMD-V pour installer un OS 64 bits dans une VM

09 mars 2016 - Aucun commentaire

En voulant installer une Debian x64 dans une machine virtuelle depuis Windows 7 j'ai obtenu ce message d'erreur : VT-X/AMD-V hardware acceleration has been enabled, but is not operational. Please ensure that you have enabled VT-x/AMD-V properly in the BIOS of your host computer


BIOS

Il faut donc aller dans le BIOS pour activer la fonctionnalité correspondante.
Je possède une carte mère Asus P8Z77-Deluxe, le BIOS pourrait être différent chez vous si vous n'avez pas le même modèle.

1. Rebootez et entrez dans le BIOS.
2. Passez en mode avancé.


3. Entrez dans l'onglet Advanced
4. Allez sur CPU Configuration



5. Activez Intel Virtualization Technology



6. Sauvegarder, quittez et, très important, éteignez complètement votre ordinateur !
Un simple reboot ne prendra pas en compte l'activation de la virtualisation.

Pendant mes pérégrinations sur internet j'ai noté que deux autres choses pouvaient empêcher la machine virtuelle d'utiliser l'accélération matérielle : Hyper-v ou l'antivirus.

Hyper-v

Hyper-v est une fonctionnalité Windows qui empêche les processus d'utiliser l'accélération matérielle.
Pour le supprimer,
1. Ouvrez le panneau de configuration
2. Allez dans Programs and Features
3. Cliquez sur Turn Windows features on or off
4. Décochez Hyper-v si vous le trouvez (moi je ne l'avais pas)


Antivirus

Avast peut éventuellement empêcher d'utiliser l'accélération matérielle, cherchez dans les paramètres et décochez "Enable Hardware-assisted Virtualization" ("activer l'assistance a la virtualisation").


Sources
BIOS
Hyper-v
Hard reboot
Avast


Versions
Carte mère : Asus P8Z77-Deluxe
Bios : 2.10.1208
Oracle VM Virtualbox : 4.2.10
Windows 7 x64 - SP1

Jouer avec des manettes PS3 sur Windows

04 mars 2016 - 2 commentaires

1. Installer les drivers Xbox en 1er, DS3 Tool va se servir de ceux-ci. (via Microsoft, via pumbaa.ch)
File: Xbox360_64Eng.exe
   CRC-32: 04f0468f
   MD4: f6fbefc0e1c7e3032b6b5338f6613f03
   MD5: 4c7fbad5bbebc0d3807129092a1de4b9
   SHA-1: 00f7246437c53f3aba5516ac3fc572181c24c666

2. Installer DS3 Tool (via xinputer, via pumbaa.ch)
File: MotioninJoy_071001_signed.exe
   CRC-32: 1e840493
   MD4: 6b14396f91e0a087b6c3cf6f39f1fe8e
   MD5: 5ae1bf5713cf1f0d682561d34779214d
   SHA-1: 2d1c95e94b86e2a465ce6e39858ab612dc2fafd5

3. Lancer DS3 Tool

4. Brancher la (les) manette(s) avec le câble USB (je ferai un 2ème tuto avec bluetooth si j'y arrive)

5. Dans Driver Manager, sélectionner les manettes et cliquer sur Load drivers.
Windows va mettre un message d'alerte qu'il faut accepter.
Après un petit temps d'attente vous devriez voir un Vu s'afficher à droite.


6. Dans Profiles, sélectionner une manette et cliquer sur Enable pour que joysticks fonctionnent. Recommencer pour chaque manette.


Notez qu'une fois l'installation terminée il ne semble pas requis que DS3 Tool soit lancé pour que les manettes fonctionnent.


Sources
JV #17, page 72


Versions
Windows 7 x64 - SP1 ENG
DS3 Tool 0.7.1001
Driver XBox : Xbox 360 Accessories Software 1.2

Créer un zip en ligne de commande

15 février 2016 - Aucun commentaire

Je cherchais un moyen de créer un fichier zip sous Windows sans passer par un programme tiers (java, exe, python, ...).
Je pensais y arriver uniquement en batch mais en fait il faut faire quelques lignes de VB Script.

Le fichier batch :
@echo off

REM ----- Setup -----
set SRC_DIR=C:\Temp\FolderToZip\
set VBS_FILE=.\zipIt.vbs
set ARCHIVE_FOLDER=c:\Temp\
mkdir %ARCHIVE_FOLDER% 2> nul
set DATE_TIME=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%
set ZIP_FILE="%ARCHIVE_FOLDER%folderZipped_%DATE_TIME%.zip"
REM ------ end -------

REM ----- Execute VBS file (creating ZIP file) -----
CScript %VBS_FILE% %SRC_DIR% %ZIP_FILE%

Le fichier VBS : zipIt.vbs
REM Récupération des arguments
Set args = WScript.Arguments
srcFolder = args(0) REM Dossier source, à zipper
zipFilePath = args(1) REM Chemin du fichier zip à créer

REM Récupération des chemins absolus
set fso = CreateObject("Scripting.FileSystemObject")
srcFolder = fso.GetAbsolutePathName(srcFolder)
zipFilePath = fso.GetAbsolutePathName(zipFilePath)

REM Magie noire...
REM Création du fichier zip (vide)
CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFilePath, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar)

Set objShell = CreateObject("Shell.Application")
Set zip = objShell.NameSpace(zipFilePath)
Set source = objShell.NameSpace(srcFolder)

REM REMplissage du fichier zip
REM Malheureusement cette opération est non-bloquante
zip.CopyHere source.Items

REM il faut donc attendre jusqu'à qu'elle soit terminée.
REM Pour cela on boucle tant que le nombre de fichiers dans le zip n'est pas égal au nombre de fichiers dans le dossier source.
REM http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript
Do Until zip.Items.Count = source.Items.Count
    WScript.Sleep 100
    WScript.Echo "Copie en cours : " & zip.Items.Count & "/" & source.Items.Count
Loop

Pour une raison que j'ignore le script échoue si la source contient, quelque part dans sa hiérarchie, un dossier vide.
J'obtiens le message suivant :
Windows was unable to add one or more empty directories to the Compressed (zipped) Folder.

Si quelqu'un peut m'expliquer pourquoi ou comment y remédier, ça serait sympa.

Si vous voulez un seul fichier qui fasse tout ça il est possible de créer le fichier VBS à la volée, l'exécuter puis le détruire :

@echo off

REM ----- Setup -----
set SRC_DIR=C:\Temp\FolderToZip\
set VBS_FILE=.\zipIt.vbs
set ARCHIVE_FOLDER=c:\Temp\
mkdir %ARCHIVE_FOLDER% 2> nul
set DATE_TIME=%DATE:~-4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,2%.%TIME:~3,2%.%TIME:~6,2%
set ZIP_FILE="%ARCHIVE_FOLDER%folderZipped_%DATE_TIME%.zip"
REM ------ end -------

REM ------ Création du fichier VBS à chaud -----
REM Récupération des arguments
echo Set args = WScript.Arguments>%VBS_FILE%
echo srcFolder = args(0)>>%VBS_FILE% REM Dossier source, à zipper
echo zipFilePath = args(1)>>%VBS_FILE% REM Chemin du fichier zip à créer

REM Récupération des chemins absolus
echo set fso = CreateObject("Scripting.FileSystemObject")>>%VBS_FILE%
echo srcFolder = fso.GetAbsolutePathName(srcFolder)>>%VBS_FILE%
echo zipFilePath = fso.GetAbsolutePathName(zipFilePath)>>%VBS_FILE%

REM Magie noire...
REM Création du fichier zip (vide)
echo CreateObject("Scripting.FileSystemObject").CreateTextFile(zipFilePath, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar)>>%VBS_FILE%

echo Set objShell = CreateObject("Shell.Application")>>%VBS_FILE%
echo Set zip = objShell.NameSpace(zipFilePath)>>%VBS_FILE%
echo Set source = objShell.NameSpace(srcFolder)>>%VBS_FILE%

REM REMplissage du fichier zip
REM Malheureusement cette opération est non-bloquante
echo zip.CopyHere source.Items>>%VBS_FILE%

REM il faut donc attendre jusqu'à qu'elle soit terminée.
REM Pour cela on boucle tant que le nombre de fichiers dans le zip n'est pas égal au nombre de fichiers dans le dossier source.
REM http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript
echo Do Until zip.Items.Count = source.Items.Count>>%VBS_FILE%
echo 	WScript.Sleep 100>>%VBS_FILE%
echo 	WScript.Echo "Copie en cours : " ^& zip.Items.Count ^& "/" ^& source.Items.Count>>%VBS_FILE%
echo Loop>>%VBS_FILE%
REM ------ end -------

REM ----- Execute VBS file (creating ZIP file) -----
CScript %VBS_FILE% %SRC_DIR% %ZIP_FILE%

REM ----- Suppression du fichier VBS ------
del %VBS_FILE%

Notez le caractère d'échappement "^" utilisé pour échapper les "&" à écrire dans le fichier.


Source
Création du zip : http://superuser.com/questions/110991/can-you-zip-a-file-from-the-command-prompt-using-only-windows-built-in-capabili
Attendre que la création du zip se termine : http://stackoverflow.com/questions/149956/how-to-determine-when-copy-finishes-in-vbscript

Publié dans :

Macro VBA - Fractionner une feuille en plusieurs feuilles

16 décembre 2015 - 2 commentaires

Ça ne va pas arriver souvent, vu que je prône l'utilisation de logiciels libres, mais voici un script VBA pour Excel que j'ai du faire au boulot.

La tâche : j'ai une feuille contenant un tas de rapport de ventes, les uns à la suite des autres, séparés par une ligne vide à chaque fois.
Il fallait splitter chaque rapport dans une nouvelle feuille.

Vu que j'ai du écrire 3 lignes de VBA dans ma vie, il y a plus de 15 ans, j'étais passablement rouillé.
Tellement rouillé qu'en fait j'ai juste été pomper des bouts de codes à droite à gauche pour les mélanger ensemble et espérer que ça marche.
Et ça marche !
Par contre pour le style, on repassera. J'ai tenté de nettoyer le code après coup mais il reste probablement des horreurs qui feront bondir les puristes.

Fichier source


Résultat final


Algorithme en 2 mots
Je duplique la feuille de base, je cherche la 1ère ligne vide, je copie la plage jusqu'à la ligne vide dans une nouvelle feuille au nom du client, je supprime la plage sélectionnée et je recommence.
A la fin je supprime la feuille dupliquée.

Code source
Sub split()
    Dim firstPage As Worksheet
    Set firstPage = Sheets(1) ' La page de référence, à parser et spliter
    
    ' https://msdn.microsoft.com/en-us/library/office/ff837784.aspx
    firstPage.Copy After:=firstPage ' On copie la page de base
    
    Dim copyPage As Worksheet
    Set copyPage = Sheets(2) ' La page copiée, qu'on peut modifier
    copyPage.Name = "temp"
    
    Dim nextBlankRow As Long
    nextBlankRow = firstBlankRow(copyPage)

    While (nextBlankRow > 0)
        Dim clientName As String
        clientName = findClientName(copyPage.Range("A:A"))
        
        Sheets.Add After:=Sheets(Sheets.Count) ' crée une nouvelle feuille et l'ajoute à la fin du classeur
        
        Dim newPage As Worksheet
        Set newPage = Sheets(Sheets.Count) ' On récupère la feuille nouvellement créée
        newPage.Name = clientName ' renome la nouvelle feuille
    
        Dim nbCol As Long
        nbCol = copyPage.UsedRange.Columns.Count
        
        Dim currentRange As Range
        Set currentRange = copyPage.Range("A1", copyPage.Cells(nextBlankRow, nbCol))
        
        ' http://stackoverflow.com/questions/21648122/excel-vba-copy-range-and-paste-values-in-another-sheets-specific-range
        currentRange.Copy ' Copie des valeurs de la 1ère page
        newPage.Range("A1").PasteSpecial xlPasteValues ' on colle dans la nouvelle feuille
        newPage.Columns.AutoFit ' ajuster la taille des colones : http://www.extendoffice.com/documents/excel/1174-excel-split-data-into-multiple-worksheets-based-on-column.html
        newPage.Range("A1").Select ' lâche la sélection
        
        currentRange.Delete ' Supprime la plage pour pouvoir recommencer avec la suivante
        nextBlankRow = firstBlankRow(copyPage)
    Wend
    
    Application.DisplayAlerts = False
    copyPage.Delete
    Application.DisplayAlerts = True
    
    firstPage.Select
    firstPage.Range("A1").Select
End Sub

Function findClientName(fullCol As Range) As String
    For Each cell In fullCol.Cells
        If cell.Value <> "" Then
            findClientName = cell.Value
            Exit For
        End If
    Next
End Function

Function firstBlankRow(ws As Worksheet) As Long
'returns the row # of the row after the last used row
'Or the first row with no data in it
'http://stackoverflow.com/questions/12497804/finding-first-blank-row-then-writing-to-it

    Dim rngSearch As Range, cel As Range
    With ws
        Set rngSearch = .UsedRange.Columns(1).Find("") '-> does blank exist in the first column of usedRange
        If Not rngSearch Is Nothing Then
            Set rngSearch = .UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks)
            For Each cel In rngSearch
                If Application.WorksheetFunction.CountA(cel.EntireRow) = 0 Then
                    firstBlankRow = cel.Row
                    Exit For
                End If
            Next
        Else '-> no blanks in first column of used range
            If Application.WorksheetFunction.CountA(Cells(.Rows.Count, 1).EntireRow) = 0 Then '-> is the last row of the sheet blank?
                '-> yeap!, then no blank rows!
                firstBlankRow = -1
                'MsgBox "Whoa! All rows in sheet are used. No blank rows exist!"
            Else
                '-> okay, blank row exists
                firstBlankRow = .UsedRange.SpecialCells(xlCellTypeBlanks).Row + 1
            End If
        End If
    End With
End Function


Le fichier qui contient tout
Fichier

Créer une macro VBA
Menu Outils, Macro, Visual Basic Editor

Lancer une macro VBA
Menu Outils, Macro, Macros, sélectionner Feuil1.split (nom de la feuille original + nom de la méthode Sub)

Notez que, par défaut, si vous ouvrez un fichier avec une macro le programme vous avertira des problèmes de sécurité et les désactivera.
Pour les autoriser, rendez-vous dans le menu Outils, Options, onglet Sécurité, bouton Sécurité des macros et sélectionnez Moyen ou Faible.



Sources
Copier une plage de valeurs
Trouver la prochaine ligne vide
Ajuster la taille des colones
Dupliquer une feuille


Versions
Microsoft Excel 2002 (10.2614.2625)
Microsoft Visual Basic 6.3

Formater un Sony Xperia Z3 Compact

18 août 2015 - 2 commentaires

Il existe plusieurs moyens de formater (flasher) un smartphone, mais quand l'écran est intégralement détruit et qu'on ne voit rien c'est tout de suite plus dur.
Voici la méthode que j'ai utilisé.


Extinction du téléphone

1) Premièrement il faut éteindre le téléphone.
Comme une pression sur le bouton Power ne suffit pas et qu'on ne peut plus retirer la batterie (merci Sony, vous baissez énormément dans mon estime) il faut passer par le petit bouton de hard-reset planqué à côté de la carte SIM.

Source : sony-xperia.mobi

Ne branchez toujours pas le téléphone au PC.

Installation de Flashtool

2) Installez Flashtool 0.9.19.0.
CRC-32: 61e62c1a
   MD4: 7ce2c4ce96c12d3e1659b5a722fe41b1
   MD5: ed374601e368b99aab51a3b94c2bf1ca
 SHA-1: 795c21b9ee81aff747ef6b9324b1054fa55a8056

3) Dans le répertoire d'installation de Flashtool ouvrez le dossier "drivers" et lancez "Flashtool-drivers.exe" pour installer les drivers du téléphone.
Cochez "Flashmode Drivers", "Fastboot Drivers" et "Xperia Z3 Compact Device Driver"


4) Redémarrez le PC.

Flashage

5) Téléchargez la ROM de base (Stock ROM) : D5803_23.0.A.2.93_Generique_FR.ftf ou une plus récente.
CRC-32: c48acb43
   MD4: e41817ce4abf68029e320c272e415d82
   MD5: 74370beacf0cb8676f7efe654cc6bec9
 SHA-1: 2f1216318ea8dfa8d6df5ee929f1e50f541c301d

6) Copiez-la dans le répertoire "C:\Users\[VOTRE_NOM]\.flashTool\firmwares"

7) Lancez "FlashTool.exe" ("FlashTool64.exe" sur système 64 bits), attendez 20 secondes que le programme s'initialise et cliquez sur l'éclair "Flash Device".


Sélectionnez Flashmode et cliquez sur Ok.
Si vous voulez effacer toutes les données présentes sur le téléphone cochez les 3 cases "APPS_LOG", "CACHE" et "USERDATA".


8) Cliquez sur
Flash
et attendez une bonne minute.

9) Une fenêtre va apparaitre indiquant les instructions à suivre pour démarrer l'installation.
Pressez sur le bouton de Volume Bas et, tout en restant pressé, reliez le téléphone au PC via un câble micro-USB.


L'installation devrait démarrer toute seule et durer plusieurs minutes.


Versions
Sony Xperia Z3 Compact (z3c) - D5803
Stock ROM : D5803_23.0.A.2.93_Generique_FR
Flashtool 0.9.19.0-windows
Windows 7 Pro 64 bits - SP1


Sources
http://xperiafirmware.com/8-firmware/116-xperia-flashtool
http://forum.xda-developers.com/z3-compact/general/list-stock-firmwares-d5803-d5833-t2906706
http://www.phonandroid.com/forum/installer-un-firmware-officiel-sur-sony-xperia-z3-compact-d5803-t100583.html