Pour thautheme

Fermé
DD4477 - 16 déc. 2016 à 09:42
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 19 déc. 2016 à 13:48
Bonjour,

Je ne veux pas abuser mais comme je n'arrive pas à généraliser un bout de code, j'aimerais si possible que vous m'apportiez votre aide :

Range("1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10,11:11,12:12,13:13,14:14,15:15,16:16").Select
Range("A16").Activate

ceci permet de selectionner une partie active d'une feuille de calcul.

Or, cette petie active est variable en fonction du contenu de cette feuille.

Serait-il possible de faire une boucle genre While "cellule non vide", la prendre en compte dans la selection sachant qu'il faut tenir compte et du nombre de lignes et colonnes non vides donc a priori deux while imbriquees du genre :
se mettre en cellule A1, si celle-ci n'est pas vide, prendre son contenu dans la selection finale
se decaler d'une ligne vers le bas
si cellule vide se decaler d'une colonne etc...

Le but est de faire une transposée du contenu de la feuille 1 sur la feuille 3

J'ai essayé de selectionner toutes les cellules mais c'est trop pour VBA

Merci de votre aide.

7 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
16 déc. 2016 à 10:33
Bonjour

Probablement avec UsedRange !
0
fonction inconnue de Excel, merci quand même
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
16 déc. 2016 à 11:48
Ah bon? https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.usedrange?redirectedfrom=MSDN
UsedRange, copier la plage et coller spécial (transposée) en feuille 3. Utilise l'enregistreur de macro pour obtenir la syntaxe.
0
J'ai essayé mais c'est pas encore ca :

Sub TRANSFO()

'
' TRANSFO Macro
'

'
'Worksheets("Sheet1").Activate
ActiveSheet.UsedRange.Select
Application.Run "'traitement automatique générique.xlsm'!transposée"
Application.CutCopyMode = False
Application.Run "'traitement automatique générique.xlsm'!Feuil3.DelLigne"
End Sub




Sub transposée()
'
' transposée Macro
'

'
'Sheets("Feuil1").Select

'ActiveWindow.LargeScroll ToRight:=-4
Selection.Copy
Sheets("Feuil3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
End Sub
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
16 déc. 2016 à 16:00
Re,

Simplement :
Option Explicit
Public Sub TRANSFO()
  Worksheets("Feuil1").UsedRange.Copy
  Worksheets("Feuil3").[A1].PasteSpecial xlPasteAll, , , True
  Application.CutCopyMode = False
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Un grand merci à tous :
j'avais pensé selectionner toute la feuille 1 et faire une copie mais il refusait le trop grand nombre de colonnes et lignes
je me suis inspiré de ton code pour écrire cela qui n'est pas tres different :

Worksheets("Feuil1").UsedRange.Copy

Sheets("Feuil3").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True


ce qui permet en effet de selectionner toutes les donnees à la souris avant de proceder à la transposee.

Si je peux me permettre de te poser un autre question au sujet de ton code:
A quoi cela sert il de preceder le sub <fonction> par public et aussi par option explicit ?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 19/12/2016 à 10:24
Bonjour,

Public défini la portée du code contenu dans un module : il est visible de l'ensemble des projets ouverts et donc utilisable depuis tous leurs modules. On peut limiter cette portée aux modules du projet qui contient le code, et donc interdire son emploi depuis les autres projets ouverts, en ajoutant Option Private Module au début du module concerné.

Option Explicit, toujours placé en début de module, rend obligatoire la déclaration de toutes les variables utilisées dans ce module. Lorsque cette instruction est omise, les variables sont déclarées de manière implicite lors de leur première utilisation, cela réserve souvent des surprises lors de l'exécution du code, notamment des erreurs du genre "Incompatibilité de type". Toujours commencer tous ses modules par Option Explicit est une excellente méthode qui évite ces problèmes et rend le code plus compréhensible.

La touche F1 : en utilisant l'éditeur visual basic, lorsqu'on place le curseur texte sur un mot dans le code , permet d'obtenir l'aide sur ce mot. Assez complet, cet aide t'aurais donné les renseignements demandés !
Cordialement
Patrice
0
Merci beaucoup, si ces infos viennent d'un manuel, puis-je en avoir les références ? je reconnais tout à fait mes erreurs mais apprends vite et bien !

Certaines fonctions Excel donnent des résultats erronés comme RECHERCHEV
et je pense qu'en ayant le bon manuel, je saurais trouver l'origine de l'erreur, je suis allé sur le forum Microsoft mais en appliquant à la lettre j'ai le fameux N/A alors que la valeur recherchee dans deux tableaux differents sont identiques et de meme format. Evidemment, en specifiant le parametre VRAI, j'ai une valeur de retour non voulue. Pour essayer de comprendre le resultat obtenu, j'ai changé le numero de colonne mais c'est completement à proximatif là où je n'attends qu'une seule valeur.
Merci et bonne journée.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié par Patrice33740 le 19/12/2016 à 13:50
Ces informations proviennent de l'aide VBA (la touche F1). Edit :F1 fonctionne aussi avec Excel et avec pratiquement tous les programmes.

N/A n'est pas a proprement dit une erreur mais une réponse de la recherche pour dire "je n'ai pas trouvé"
0