VBA like et variable

bonjour,

je viens de trouver une feuille qui comporte toutes les marques de cigarettes existantes apparemment.

je debute en vba et mon but est de rechercher un marque et de la copier sur une autre feuille (voir sur le fichier)

j ai à peu pres trouvé comment faire pour trouver une marque avec une partie de son nom et le signe generique *

mon souhait serait de savoir s'il est possible de faire une liste deroulante comportant les marques qui

pourrait ensuite servir de parametre à like.

exemple

x= range("liste")

cel.value=x

enfin j espere etre assez clair...

merci de votre aide bonne journée

JN

19cigarettes.xlsm (38.41 Ko)

Bonjour,

Pas besoin de passer par du VBA pour ta problématique, un simple filtre avancé, ou même un filtre, suffit à ton besoin, j'ai mis le critère du filtre dans la feuille "filtre", et son résultat dans la feuille "CAMEL", je t'encourage à visiter l'aide office sur la fonction "Filtre avancé".

merci pour ta reponse au secours, mais je connaissais deja cette solution là, j'aurais voulu le faire en vba pour m'exercer simplement

encore merci pour la rapidité de ta réponse c est sympa.

JN

Bonjour,

Ah, tu n'avais pas précisé que c'était pour t'entrainer, ça change tout du coup!

Donc tu veux une liste déroulante qui permette de sélectionner la marque que tu veux extraire de ta base de données, c'est ça?

Comme on est sur une partie développement, c'est le moment de se demander comment tu voudrais que ça fonctionne, tu parles d'une liste déroulante, tu peux faire une liste déroulante directement sur la feuille, où tu mets manuellement la liste, ou encore sur un formulaire qui s'ouvrira dans une fenêtre. Ensuite il faut voir ce que tu veux demander à l'utilisateur, peut-t-il sélectionner plusieurs marques? Est-ce qu'on limite la recherche à "contient la marque", ou bien tu veux pouvoir choisir "commence par", "finit par" également?

Merci de me dire ce que tu en penses

ben en fait mon souhait est tres simple, je voudrais mettre une liste deroulante sur la feuille, cette liste comporterait les marques de cigarettes. ensuite avec un bouton "ok", s'il y a deja une liste dans la seconde feuille, alors on efface la liste qui existe et on affiche celle demandée et si il n y en a pas alors on affiche la liste

d'ou ma question "de mettre une variable dans ce fameux(like....)

bonne journée et merci de ton interet pour mon entrainement assez rudimentaire pour toi surement... mais deja bien compliqué pour moi

JN

Re,

Je ne sais pas si ce que tu souhaites est une solution qui fonctionne afin que tu puisses t'inspirer, mais c'est ce que j'ai fait, je t'ai fait une liste et avec ça, un bouton Go, qui d'après moi n'est pas nécessaire, comme tu peux intercepter le changement de valeur de la cellule k1 via un worksheet change.

Voici le fichier avec ma proposition:

Voilà!!!!! c'est exactement ce que je souhaitais... merci beaucoup c est genial!!!

je vais voir un peu comment tu as fait...

merci encore !!!

bonne journée

JN

De rien

Merci d'avoir passé le sujet en résolu (j'ai toujours les notifications pour le sujet même une fois résolu, contacte moi sur ce sujet, et non en message privé si tu as des questions à poser).

Bonjour c'est encore moi...

rire

voilà, je suis heureux que tu m'ais aidé mais je vais oser te demander s'il serait possible que tu mettes dans tes lignes de code des commentaires, en effet vu que pour moi c'est une exercice, et que je suis loin d'avoir ton niveau (le mien plutot sous-sol)

ca me permettrait de comprendre absolument tout ce que tu as bien voulu ecrire et m'aiderait encore plus.

merci!!!

bon samedi

JN

Bonjour,

Oui je peux commenter mon programme, j'espère ne pas l'avoir trop commenté par contre...

Sub likeetc()
'permet de désactiver la mise à jour automatique de l'écran, accélère le temps de traitement d'une macro
Application.ScreenUpdating = False

'Initialisations
critere = Range("k1")
ligne = 2
Range("a2:i" & Rows.Count) = "" 'on efface toutes les cellules de la cellule a2 à la cellule colonne i,
    'dernière ligne du classeur
With Feuil1 'permet de ne pas répéter Feuil1 en permanence,on peut appelr une feuille de plein de façons:
    'Sheets("nomfeuille"), Feul1 etc...
    der_lig = .Range("a" & Rows.Count).End(xlUp).Row 'on part de la dernière ligne du classeur en colonne A, vers le haut,
    'et on s'arrête à la première ligne remplie et on renvoie son numéro de ligne avec .Row
    tableau = .Range("a1", "i" & der_lig) 'on enregistre les valeurs du tableau... dans un tableau
End With

'on parcourt toutes les lignes du tableau
For i = LBound(tableau, 1) To UBound(tableau, 1)
    If tableau(i, 1) Like critere & "*" Then 'si le contenu du tableau commence par le critère qu'on a choisit
        For J = LBound(tableau, 2) To UBound(tableau, 2) 'on parcourt toutes les colonnes du tableau
            'afin d'extraire les valeurs dans la feuille active
            Cells(ligne, J) = tableau(i, J)
        Next J
        ligne = ligne + 1 'comme on a remplit une ligne, on se décale d'une ligne pour la prochaine écriture
    End If
Next i

'réactivation de la mise à jour automatique de l'écran
Application.ScreenUpdating = True
End Sub

'Programme qui a été utilisé pour extraire le premier mot de chaque ligne de la colonne A sur la colonne B
'j 'en avais besoin pour faire la liste sans trop m'embêter
Sub test()
tableau = Range("a1", Range("a1").End(xlDown))
    'Range("a1").End(xlDown), permet de trouver la dernière ligne remplie en partant de A1 vers le bas
    'Range("A1","B2") équivaut à Range("A1:B2")
'On va parcourir toutes les lignes du tableau qu'on vient d'enregistrer
'Comme on l'a initialisé avec une plage de cellules, c'est un tableau avec au moins une ligne et une colonne
'Il faut toujours préciser la colonne
For i = LBound(tableau, 1) To UBound(tableau, 1)
    'LBound(tableau,1) = limite inférieur de la dimension 1 du tableau "tableau", en clair, le premier numéro de ligne
    'du tableau, ubound = dernier numéro de ligne, ici on va parcourir toutes les lignes, de la première à la dernière
    tableau(i, 1) = extract(Split(tableau(i, 1), " ")) 'tableau(i, 1) = dans le tableau, ligne i, colonne 1
        'extract(Tabl) avec Tabl = Split(tableau(i, 1), " ")
        'Ici j'appelle une fonction à laquelle je passe une valeur qui s'appelle Tabl dans le programme de la fonction,
        'je passe à la fonction le résultat de la fonction Split
        'la fonction Split(tableau(i, 1), " ") permet de séparer des valeurs dans un texte en plusieurs "cases/cellules"
        'ici, si tableau(i,1) = "pomme tarte", split renverra un tableau de ce type: tab(0) = "pomme", tab(1) = "tarte"
        'la fonction extract va ensuite se charger de prendre seulement la valeur de la première case: "pomme"
Next i

Range("b1", "b" & UBound(tableau, 1)) = tableau
End Sub

Function extract(Tabl As Variant)
extract = Tabl(LBound(Tabl)) 'la fonction prend la valeur de la première case du tableau
End Function

Bonne lecture

bonjour,

ecoute c est clair precis pour un debutant comme moi c est genial...

bravo!!! et encore merci

JN

Re,

De rien

Rechercher des sujets similaires à "vba like variable"