Récupérer des données d'une colonne VBA

Bonjour,

j'ai posé maintenant plusieurs question sur ce forum pour compléter toujours le même code.

Je voudrais savoir un moyen facile de récupérer dans vba toutes les données d'une colonne.

Je suis désolé, je peux malheuresement pas vous envoyer mon fichier, j'essaye d'être le plus claire possible.

Je travaille sur un configurateur de voiture et j'ai des feuilles de plusieurs langues différentes qui sont des offres. Elles sont toutes pareilles ( références, positions de cellules et de colonnes, etc) la seule chose qui change est le texte. Dans ces offres, j'ai des options et des sous-options.

Je voudrais récupérer les références et la position de mes options de toutes mes offres qui se trouvent dans la colone A.

Je ne peux pas faire de currentRegion car entre mes options il y a des lignes vides. Existe-t-il un moyen pour récupérer toutes les données et positions de ma colonne A jusqu'à ma dernière options. ( sachant qu'il n'y a pas un nombre prédéfinie d'options, cela peut varier donc je ne peux pas faire un plage prédéfini)

Je vous remerci énormément,

Maurer

Bonjour,

Voici quelques lignes de codes qui permettent d'avoir la dernière ligne, colonne, d'un tableau de donnée en partant de la fin du fichier, et à partir de ces informations, enregistre la zone dans un tableau :

der_lig = Range("A" & Rows.Count).End(xlUp).Row
der_col = Cells(1, Columns.Count).End(xlToLeft).Column
Tableau = Range("A1", Cells(der_lig, der_col).Address)

Salut,

Je te remerci beaucoup pour ta réponse,

j'essaie de récupérer toutes mes colonnes "A" de mes offres (qui ont le même début de nom). Cependant, cela ne passe pas, pourrais-tu me dire ce qu'il ne joue pas ?

Je passe au travers d'un tableau dans mon onglet "Interface" pour connaitre les options qu'on veut masquer et ceci me permet de savoir de quelles références et de quelles positions ont-elles.

le but de cette procédure est que si l'on souhaite masquer des options dans les offres. ( si on masque une option dans l'interface alors toutes les options dans les offres seront masquer, a savoir que chaque options possèdent une référence clée. C'est justement mon aTabInterface(i, 1) que tu trouveras par la suite )

Si l'on veut masquer les options, cet appel de procédure ce lance.

voici ce que j'ai essayé de faire :

( je sais que c'est un peu "farfeulu" mais j'essaie de transcrire en code ce que j'ai dans la tete)

Sub Masquage(ByVal aTabInterface As Variant, ByVal i As Integer)

Dim aTableau() As Variant
Dim ws As Worksheet
Dim j As Integer
Dim der_lig As Variant
Dim der_col As Variant

    For Each ws In ActiveWorkbook.Worksheets
        If ws <> "Interface" Then
            der_lig = ws.Range("A" & Rows.Count).End(xlUp).Row
            der_col = ws.Cells(1, Columns.Count).End(xlToLeft).Column
            aTableau = ws.Range("A1", Cells(der_lig, der_col).Address)

        End If

    Next

    For j = LBound(aTableau) To UBound(aTableau)
        If aTableau(j, 1) = aTabInterface(i, 1) Then
            Rows(j).CurrentRegion.Hidden
        End If
    Next

End Sub

Hum difficile de t'aider plus que ça sans pouvoir voir le fichier

Je vais quand même essayer mais je ne pourrai que donner des conseils ou des pistes...

De ce que tu m'as dis tu vas d'abord devoir enregistrer quelque part les références que tu vas vouloir masquer, dans ton aTabInterface

Pour faire cet enregistrement, tu peux faire un With Sheets("Interface) end With, dedans, aller chercher les dimensions du tableau, puis enregistrer le tableau.

Ensuite sur la feuille où tu veux les masquer :

Tu vas parcourir ton aTabInterface et dès que tu croises une référence que tu veux masquer, tu la cherches via une boucle For avec un If référence = aTabInterfaceReference

Si c'est le cas ET que ta cellule n'est pas cachée Range().entirerow.hidden = false

Tu peux la cacher en mettant = true

Avant de cacher quoi que ce soit, réinitialise l'état de la feuille via :

activeWorksheet.ShowAllData

J'espère que tout ça t'avancera.

Resalut,

je t'ai préparé un fichier du meme style dont je suis entrain de travailler dessus

(bien entendu j'ai du supprimer toutes les données confidentielles et changer les prix )

Il y a un onglet interface, c'est ici qu'on doit venir remplir la quantité et s'il l'on veut masquer le prix, avec l'indice "m".

Il y a aussi des onglets Offres, ce sont exactement les meme pour l'instant, dans le future elles seront de langues différentes.

quand je viens mettre un "m" dans une option de mon interface, je voudrais que cet option soit masquer de mes offres ( de toutes les langues).

C'est pour cela que j'avais parlé de tableauInterface et tabLangue dans le code d'avant.

En plus clair,

Dans ma sub main () je viens récupérer les données que je souhaite masquer ( il y a d'autres options que le masquage que j'ai du supprimer)

S'il trouve un "m" dans la colonne de sélection, je lui envoie dans ma sub masquage pour faire justement le masquage. Dans l'envoie je lui envoie le tableau et i pour avoir les données a traiter et la position qu'on se trouve.

ensuite je voulais faire le traitement sur tous les onglets offres de langues différentes en comparant la référence dans mes offres et celle de l'interface, faire un currentregion jusqu'a la fin de l'option et faire un masquage.

J'espère que tu arrives a voir un peu plus clair, je coince vraiment la dessus...

je te remercie,

Maurer

53copie.xlsm (47.11 Ko)

Est-ce que c'est un peu plus compréhensible ?

Meilleures salutations,

Maurer

Bonjour,

Oui c'est déjà bien plus facile de comprendre la problématique, et je comprends mieux pourquoi tu avais fait ton programme de la sorte, par contre je souhaiterais avoir une precisión...

Si tu souhaites masquer l'option 3,01, je suppose que tu veux masquer toutes les sous options qui lui appartiennent c'est bien ça?

C'est normal que dans ton tableau interface tu ai 3.01 et dans offre 3,01, ce qui n'est pas pareil aux yeux d'Excel? ou simple faute de frappe?

Si cette erreur est voulue ou que tu es sûr(e) qu'elle revienne, je peux y prendre en compte dans le programme en choisissant de rajouter une ligne de code qui remplace les virugles qu'elle trouve par des points, j'aurai juste besoin de ces précisions pour commencer, j'ai déjà une idée de comment proceder pour la suite

Salut,

Je te remercie beaucoup. En effet, c'est une erreur de ma part pour la virgule et le point.

Ce serait grandement apprécié s'il y a une ligne qui pourrait changer les virgules en points, car si dans l'avenir on viendrait faire la même erreur que moi, le code fonctionnera toujours.

Meilleures salutations,

Maurer

D'accord,

je regarde pour faire ça alors, et commenter le programme une fois celui-ci finis bien sûr

En revancha tu ne m'as pas répondu pour le fonctionnement du masquage des sous options, si l'option 3.01 est masquée, toutes ses sous options doivent se masquer aussi, ou sont elles indépendantes?

Si ça te semble plus facile de masquer toute l'option, on peut aller dans ce chemin.

Sinon ce serait un peu mieux si on pouvait masquer indépendemment les sous-options des options. Par contre si l'on masque l'option, toutes les sous-options doivent être masquées. Contrairement, si on veut masquer seulement une sous-option.

Je te remerci encore !!

Ce n'est pas plus facile, c'est surtout plus logique pour moi

Bon...

Je pensé être arrivé à un résultat pas trop mal, je l'ai testé avec le 3.01 par exemple, et ça fonctionne

Également testé avec 2.0 en masqué, ça cache bien tout le chapitre

Voici le résultat commenté :

37copie-de-copie.xlsm (49.93 Ko)

j'en ai profité pour corriger certaines erreurs que tu avais mis dans ton programme, nottament sur Demasquage qui appelait TW.Rows().hidden = false

Tu pourras voir ce qui fonctionne, je l'ai utilisé au début du main afin de tout afficher

Je te remerci énormemment !!!!!!!!

Tu me sauves, j'étais coincé très longtemps dessus.

Juste une petite question qui me vient a l'esprit ( je sais je suis chiant)

J'avais réussi a masquer l'option que sur une seule page avant de te poser la question hier après-midi. Une chose que je voudrais rendre automatique est la mise-en-page. Quand tu caches par exemple dans ton fichier l'option 2.02, toute les options en dessous vont monter.

Existe-t-il un moyen de faire un row.count du nombre de ligne qu'il a masquer pour les ajouter a la fin de la page, de cette facon les options 3 restent en bas et le reste aussi.

Merci encore mille fois!!!

Si tu as pas le temps de m'aider sur la dernière question, il n'y a pas de soucis le plus gros est fait grace a toi.

Si je comprends bien tu veux masquer les cellules mais sans décalage? avec un gros blanc au milieu?

Non ton code de masquage cest exactement ce que je voulais.

Si on masque une option de 3 lignes par exemple. A la fin de la page de l'option masquer, il rajoute 3 lignes. Pour empecher les options de la page suivante de monter.

J'ai déjà appliquer ton code dans mon fichier, il fonctionne parfaitement.

salutations,

Rebonjour

Je pensé avoir trouvé quelque chose, merci de me dire si ça te convient :

J'ai encore trouvé quelque chose de bizarre par contre, dans ta feuille Interface n'apparaissent pas les sous options de l'option 2

à la place tu as un 2.06.01 et 2.06.02 qui n'existent pas dans les offres, vérifie que tout correspond bien, sinon ça risque de ne jamais rien masquer....

Merci Ausecour,

Désolé pour les erreurs, les références sont fausses et les options aussi car ce n'est pas du tout le meme fichier, j'ai plus de 200 options et plus de 10 onglets.

Dans l'exemple que j'avais préparé hier pour toi, il faut changer l'option 2.02 à 2.06 sur les offres.

Pour de ce qui s'agit de ton code, c'etait un peu près ça... je voulais justement que le vide vienne se mettre a la fin de la page et en-dessous de l'option masquée. Dans le cas ou tu viens masquer 2.01. Si tu as le format Excel comme le mien où les pages A4 s'affiche sur excel avec en-tête et pied de page. Le vide doit se mettre a la fin de la page. Est-ce possible ?

je te remerci encore pour ta aide et tes bons conseils,

Maurer

Sinon faire un "saut de page" entre chaque option ça t'irait?

Ce serait plus joli que d'avoir des options qui commencent en fin de page je trouve

Je pense pas qu'un saut de page serait utile car sinon il y aura une option par page. Ce que j'ai pensé ce serait que si on masque une option de 3 lignes, ces 3 lignes vont s'ajouter vide en fin de page d'ou elle a ete masquée. Comme ça les options des pages suivantes restes toujours à la meme position

Bonjour,

Voici une version qui colle plus à ce que tu veux faire, le temps de traitement est long par contre, je ne sais pas si c'est posible d'enregistrer là propriété pagebreak dans un tableau en une fois...

Enfin ça mache, c'est l'essentiel

Rechercher des sujets similaires à "recuperer donnees colonne vba"