Parcourir une plage sur feuille A et présenter colonne sur feuille B

Bonjour je suis nouvelle sur le forum et complètement débutante en vba.

Est-ce qu'une âme charitable pourrait m'aider ?

J'ai sur une feuille A ceci :

REF1 toto tata titi

REF2 tutu

REF3 titi tata

REF4 toto

et je cherche à avoir sur ma feuille B ceci (sur 2 colonnes)

REF 1 toto

REF1 tata

REF1 titi

REF2 tutu

REF3 titi

REF3 tata

REF4 toto

Quelqu'un a une idée de comment faire cela ?

Casmer lulu

bonjour

joins le fichier avec le résultat attendu (3 colonnes et 5 lignes)

à te relire

C'est du rapide chez vous ^^

Voilà ce que j'ai en feuille A

actuel

Ce que je cherche à obtenir en feuille B (et en VBA)

voulu

Merci de votre aide.

Bonsoir Lulu, jmd,

je te propose ce fichier Excel :

7exo-casmer.xlsm (15.21 Ko)

* tu peux voir que la feuille "B" est entièrement vide

* va sur la feuille "A" : tu peux voir toutes tes données

* fais Ctrl e ➯ travail effectué !


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour,

C'est vraiment super ce que tu as fait, ça marche du tonnerre !!!

Pour me coucher moins bête ce soir peux-tu m'expliquer comment tu as fait ?

J'ai quelques notions en développement mais le VBA c'est un autre univers pour moi, j'ai du mal avec la syntaxe, il y a tellement de possibilités

Lulu

Bonjour Lulu,

merci pour ton retour, et pour le !

j'suis vraiment ravi d'avoir pu t'aider !

pour l'explication, j'la ferai plus tard, quand qu'j'aurai un moment d'libre,

ça s'ra pas avant ce soir, ou p't'être même demain (mais c'est noté).

dhany

Bonjour Lulu,

voici l'explication détaillée du code VBA :

If ActiveSheet.Name <> "A" Then Exit Sub : si le nom de la feuille active n'est pas "A", on sort de la sub

Dim ref$, mot$, dlig&, lg1&, lg2&, col% : déclaration de 6 variables ; ref$ : idem que ref As String ;

dlig& : idem que dlig As Long ; col% : idem que col As Integer

dlig = Cells(Rows.Count, 1).End(3).Row : dernière ligne utilisée, selon la colonne A

idem que : dlig = Cells(Rows.Count, "A").End(xlUp).Row ; dlig = 4 (n° ligne dernière référence)

With Worksheets("B") .. End With : avec la feuille "B"

.Range("A:B").Columns.ClearContents : sur feuille "B", effacer les colonnes A et B

oups, y'avait plus simple (à préférer) : .Columns("A:B").ClearContents

lg2 = 1 : n° ligne pour écrire en feuille "B" (destination) ; on écrira donc les résultats

sur la feuille "B" à partir de la ligne n° 1

Application.ScreenUpdating = 0 : désactive la mise à jour de l'écran ➯ l'exécution du code est plus rapide

For lg1 = 1 To dlig .. Next lg1 ; lg1 : n° ligne pour lire la feuille "A" (source) ; boucle de 1 à dlig ➯ de 1 à 4

c'est donc ce qui permet de parcourir toutes les lignes de références, et la suite est pour chacune d'elles

ref = Cells(lg1, 1) ; idem que ref = Cells(lg1, "A") ; ref : référence de la ligne lg1

If ref <> "" Then .. End If : pour éviter de traiter une ligne où la référence serait manquante (sécurité)

col = 2 ; n° colonne : 2, donc colonne B ; car pour chaque ligne de référence, tes mots style "toto"

sont à partir de la colonne B, puis vers la droite

Do .. Loop : boucle infinie ; mais t'inquiètes pas ; y'aura quand même une porte de sortie !

mot = Cells(lg1, col) : mot de la ligne lg1, colonne col (mot très stylisé de 4 lettres )

If mot = "" Then Exit Do : là voilà, l'issue d'secours qui permet de sortir de la boucle infinie !

* les lignes sont de longueur variable ; on va lire les mots vers la droite, et s'arrêter dès qu'on trouve une cellule vide

* note bien que faire ce test d'emblée évite de traiter une ligne qui aurait une référence mais aucun mot !

With .Cells(lg2, 1) .. End With : avec la cellule en ligne lg2 et colonne A ... de la feuille "B",

car note bien que ce 2ème With est un complément du 1er With

.Value = ref : référence écrite dans la cellule référencée par le With

c'est donc cela qui écrit la colonne A des résultats

.Offset(, 1) = mot : mot écrit une colonne à droite

c'est donc cela qui écrit la colonne B des résultats

col = col + 1 : n° colonne col augmenté de 1 pour lire le prochain mot vers la droite

lg2 = lg2 + 1 : n° ligne lg2 augmenté de 1 pour écrire le prochain résultat (réf / mot)

une ligne en dessous

.Select : cette instruction est après le Next de la boucle For, et dépend du 1er With

c'est donc pour sélectionner la feuille "B", afin de pouvoir lire les résultats


j'espère que ma longue explication détaillée ne t'aura pas trop ennuyée,

et j't'en voudrai pas si tu t'es endormie en chemin.

dhany

Kikoo !

Super mais t'es un grand malade de poster ça à 4h du mat' lol

Tu dors pas la nuit ?

Merci beaucoup en tout cas pour le script et les explications.

J'y serai pas arrivée, trop sympa

hello Lulu,

cette nuit, j'ai joué les prolongations pour que tu puisses avoir ton explication au p'tit matin à ton réveil !

sinon, tu aurais dû patienter jusqu'en début d'après-midi, ou même ce soir !


je savais qu'une bonne explication devait être détaillée, et donc longue ; et hier, j'avais vraiment pas

l'temps d'la faire juste après ta demande !

en tout cas, j'suis vraiment ravi qu'tu l'aies beaucoup appréciée !


merci pour le , et pour avoir passé le sujet en résolu !

bonne continuation !

dhany

Rechercher des sujets similaires à "parcourir plage feuille presenter colonne"