VBA - Cellule et plage de variables

Résolu
Aline -  
 Aline -
Bonjour à tous,

J'ai rédigé un bout de code d'après ce que j'ai pu voir sur différents forums pour automatiser un collage spécial "transposé" de plusieurs colonnes vers une seule.

Ma problématique :
Mon code actuel implique de déclarer ma plage de colonne de façon fixe (A:U) avec ensuite une recherche de la dernière ligne.
Mes colonnes étant variables, je souhaitais mettre en place une recherche de colonne également.

Vous trouverez ci-dessous le code originel, avec en gras la ligne que j'essaie de modifier et en texte la modification sur laquelle je travaille :

Sub transpose()

    Dim sh As Worksheet, aa, bb, i&, a&, n&
    Dim LastColumn As Long, LastLigne As Long
    
    Application.ScreenUpdating = 0
    
    LastColumn = Cells(3, Cells.Columns.Count).End(xlToLeft).Column
    LastLigne = Range("B" & Rows.Count).End(xlUp).Row
    
    For Each sh In Worksheets
      <bold>  aa = sh.Range("A2:U" & sh.Range("A" & Rows.Count).End(xlUp).Row)</bold>
        '(Cells(2, 1), Cells(LastColumn, LastLigne).Row)

        ReDim bb(1 To UBound(aa) * (UBound(aa, 2) - 2), 1 To 3): n = 1
        
        For i = 2 To UBound(aa)
           For a = 3 To UBound(aa, 2)
             bb(n, 1) = aa(i, 2): bb(n, 2) = aa(1, a): bb(n, 2) = aa(i, a): n = n + 1
           Next a
        Next i
    Next sh
    
    Sheets.Add after:=Sheets(Sheets.Count): ActiveSheet.Name = "TRANSPOSE"
    ActiveSheet.Range("A1").Resize(UBound(bb), UBound(bb, 2)) = bb

End Sub


Merci d'avance pour vos retours !

9 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Une facon de faire: https://www.cjoint.com/c/LAmo3Nuba3f

Par contre feuille TRANSPOSE, la colonne A de 1 a 9 n'est pas avec un 0 comme dans feuille Tarifs.
Doit etre identique a tarif ou pas?
1
Aline
 
Re,

Tout d'abord un immense merci pour cette macro qui fonctionne avec l'exemple. J'essaierai de la tester ce soir ou demain avec d'autres fichiers exemples, mais d'après ce que je comprends du code je ne pense pas avoir de bugs.

Pour la casse de la première colonne, qui correspond aux départements, ce n'est pas un problème puisqu'elle ne sert qu'à titre indicatif pour vérifier rapidement le résultat.
0
Aline
 
Bonjour,

Macro testée et validée sur différents fichiers, aucun bug. Merci beaucoup pour votre support à tous les deux !

Aline
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Dim aa as Range ' aa est une variable de type Range


'  ==> Cells( ligne, colonne )
Set aa = sh.Range(Cells(2,1), Cells(LastLigne,LastColumn))


0
Aline
 
Bonjour Jordane,

J'avais effectivement testé en déclarant la variable via le Set mais sur ce schéma je me retrouve en bug à la ligne suivante avec le Ubound(aa).
Message d'erreur : Erreur de compilation, tableau attendu.

Cette ligne de code est récupérée des forums, je ne la maitrise pas suffisamment pour l'adapter, une idée ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Aline
 
Ce n'est pas le set le plus important dans ce que je t'ai donné...
C'est surtout l'ordre des variables pour les cells ..et le .row qui était en trop
0
Aline
 
Exact, je n'y avais pas prêté attention.
Je reste malgré tout bloquée sur la ligne Ubound depuis que j'ai fait cette modif, sans parvenir à trouver réponse sur les forums...
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour jordane45 et Aline

J'etai entrain de decortiquer le code ne sachant pas si tu suivais la chose vu l'heure matinale de ta premiere reponse
aa est un objet Range donc le Ubound donne une erreur.
Il faut passer par ex:
 a1 = aa.Rows.Count

Ceci dit, le code fonctionne mais le resultat est plutot surprenant

Deja si plusieurs feuilles marchera jamais.
Ensuite, je voudrai bien qu'Aline explique plus en detail ce qu'elle veux avec un ficher exemple

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
0

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

Posez votre question
Aline
 
Bonjour,

Pour expliciter ma demande :
J'ai un lot de grilles tarifaires à importer dans un ERP.
Mes grilles peuvent avoir différentes lignes et différentes colonnes, tandis que l'import dans mon ERP ne se fait qu'en ligne (voir dernière feuille faite manuellement pour le modèle).

Mon premier post présentait mon code tel que j'ai réussi à le rédiger (avec grande aide de différents forums) mais présentait l'inconvénient d'être figé, autrement dit l'utilisateur devait retourner dans le code pour modifier la dernière colonne.

J'ai donc voulu ajouter une recherche de la dernière colonne, d'ù ce post, mais après intégration de la réponse apportée par Jordan45 la suite de ma macro ne fonctionne plus.

Voici le lien vers mon fichier exemple : https://www.cjoint.com/c/LAmjCLIcehh

Merci pour votre aide !
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Tout a fait, mais combien de tables a importer car dans votre code vous creez une feuille TRANSPOSE dans une boucle sh, ce qui n'est pas possible
0
Aline
 
Une seule table à importer, le code originel duquel je me suis inspirée avait plusieurs feuilles et je n'ai pas réussi à retirer cette fonction sans créer des bugs partout.
L'objectif est que l'utilisateur copie/colle ses grilles une par une dans l'onglet tarif.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Il y a TARIF 2022 et Feuil1.
Quelle est la table importee et la feuille a ecrire avec les donnees redistribuees
0
Aline
 
TARIF 2022 est la table dans laquelle l'utilisateur colle son tarif en valeur pour traitement.
Feuil1 est l'onglet qui correspond à TRANSPOSE, fait manuellement dans ce fichier mais créé normalement par la macro.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Donc, il faut transformer Tarif 2022 dans Transpose au format feuil1

Ok


Suite:
Je dois stopper, si personne reprend le sujet, je continuerai apres 14h
0
Aline
 
Re,

C'est exactement ça.
Je verrai si d'ici 14H j'ai d'autres réponses, sinon à tout à l'heure :)
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Je continue
0