VBA - Cellule et plage de variables
Résolu
Aline
-
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 :
Merci d'avance pour vos retours !
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 !
A voir également:
- VBA - Cellule et plage de variables
- Excel compter cellule couleur sans vba - Guide
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
- Image de manchots sur une image de plage ✓ - Forum Graphisme
- Excel si cellule contient partie texte ✓ - Forum Excel
9 réponses
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?
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?
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))
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 ?
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 ?
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...
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...
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:
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...
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...
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 !
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 !
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
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
Re,
Il y a TARIF 2022 et Feuil1.
Quelle est la table importee et la feuille a ecrire avec les donnees redistribuees
Il y a TARIF 2022 et Feuil1.
Quelle est la table importee et la feuille a ecrire avec les donnees redistribuees
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.
Macro testée et validée sur différents fichiers, aucun bug. Merci beaucoup pour votre support à tous les deux !
Aline