VBA - Cellule et plage de variables

Résolu/Fermé
Aline - Modifié le 12 janv. 2022 à 09:44
 Aline - 13 janv. 2022 à 12:17
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
Modifié le 12 janv. 2022 à 15:58
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
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
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 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 4 735
Modifié le 12 janv. 2022 à 01:42
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
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 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 4 735 > Aline
12 janv. 2022 à 09:39
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
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
Modifié le 12 janv. 2022 à 10:24
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
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
12 janv. 2022 à 10:43
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
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
12 janv. 2022 à 11:19
Re,

Il y a TARIF 2022 et Feuil1.
Quelle est la table importee et la feuille a ecrire avec les donnees redistribuees
0
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
Modifié le 12 janv. 2022 à 11:58
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
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 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
12 janv. 2022 à 14:43
Re,

Je continue
0