Macro Excel convertir cellules format pourcentage

Aurélie85

Membre expert
Club iGen
23 Juillet 2005
2 929
1 353
38
Lausanne
Bonjour !

Débutante dans le monde merveilleux de la syntaxe sous SPSS, je me retrouve à faire des copier-coller d'output SPSS dans Excel.

Or, si le formatage des cellules en "pourcentage" est bien respectée lorsqu'on exporte l'output d'SPSS en format .xls, ce n'est apparemment pas le cas lorsqu'on copie-colle des tableaux depuis SPSS dans un fichier excel. Le format "pourcentage" des cellules sous SPSS devient un nombre sous excel.

Donc, en possession de plusieurs feuilles excel contenant plusieurs tableaux (un grand nombre), j'aimerai pouvoir convertir certaines cellules de chaque tableau en pourcentage.

Or, il se trouve que ce ne sont pas toutes les cellules de chaque tableau qu'il faut convertir :rateau: , mais seulement les deuxièmes rangées (ou ligne) de chaque tableau :hosto:.

Je me demandais s'il n'y avait pas quelqu'un qui aurait l'idée ou sous la main une macro pour effectuer cette opération rapidement ?

J'ai trouvé qu'on pouvait appliquer à une plage de donnée définie le nouveau format:

P.ex:

Range("D48,E48,F48,D50,E50,F50,D52,E52,F52").Select

Range("F52").Activate
Selection.NumberFormat = "0.0%"



Mais j'aimerais pouvoir lui dire à la macro si elle veut bien m'entendre que c'est la deuxième rangée de chaque tableau seulement à laquelle il faut appliquer le nouveau format.

Encore faut-il que cela soit possible qu'une macro reconnaisse "un tableau" comme une entité en soi... Mais j'ai encore un espoir !:cool:


Merci infiniment pour vos nombreuses réponses !:love:
 
Ben en remplaçant le "Range("F52").Activate" par un "Range("2:2").select", ça devrait le faire, non ?
 
Coucou pascal septante-sept ! :coucou:

C'est presque ça mais...

Dans l'exemple que j'ai tiré ci-dessus, j'avais sélectionné au préalable les cellules dont je voulais changer le format. Ce que je souhaite faire, c'est justement de ne pas avoir à sélectionner les plages, mais que cela soit fait automatiquement à l'intérieur de chaque tableau... mais plus j'écris, plus je pense que je suis en train de rêver pour une solution ! :D
 
Ben en remplaçant le "Range("F52").Activate" par un "Range("2:2").select", ça devrait le faire, non ?
Beurk "Select" !

Personnellement je me contenterais de Range("2:2").NumberFormat = "0.00%" ;)

Reste que, si j'ai bien suivi, quand on parle de deuxième ligne de chaque tableau, il semble qu'il y aie plusieurs tableaux dans une même feuille de calcul. Il faut donc identifier ces tableaux, plus exactement déterminer les lignes correspondant aux deuxièmes lignes des tableaux. Il serait utile de connaître la structure exacte du classeur...
 
Justement ! Il n'y a pas de structure dans le classeur ! Les tableaux ont des tailles différentes (en nombre de lignes, je veux dire) et donc il est bien difficile de trouver une logique style "toutes les x lignes, cela marque le début du tableau.

je pense qu'il n'y a en fait pas de solution, car j'imaginais qu'excel pouvait "reconnaître" un tableau, de n'importe quelle taille...
 
j'imaginais qu'excel pouvait "reconnaître" un tableau, de n'importe quelle taille...
On peut faire retrouver pas mal de chose via une macro, mais il faut connaître un minimum la structure. Si avant chaque nouveau tableau on a, par exemple, une ligne vide (ou plusieurs) puis une ligne de titre avec un intitulé particulier...
 
ah oh ! Voilà une précision intéressante ! Je vais réfléchir à copier-coller mes tableaux d'une façon systématique (comme tu l'expliques par exemple, avec une ligne vide entre chaque tableau) et je reviens si je trouve pas comment faire cette macro ! :)

merci !
 
Pour se positionner sur la dernière ligne d'un tableau (plus exactement sur la dernière cellule non vide d'une colonne) tu peux utiliser :
Range("A1").End(xlDown)

Pour connaître la ligne sur laquelle se trouve la première cellule vide d'une colonne dans un tableau qui commence sur la 12e ligne, par exemple, tu peux utiliser :
MaRangee = Range("A12").End(xlDown).Offset(1, 0).Row

Une fois que tu as atteint grâce à End(xlDown) la dernière cellule non-vide de la colonne A de ton tableau, tu te positionnes sur la cellule suivante (qui est donc la première vide) grâce à Offset(1, 0) qui déplace d'une ligne vers le bas et de zéro colonne vers la droite (c'est en format LC, donc inversé par rapport à l'écriture "A1"). Row te retourne le numéro de ligne, bien sûr...