Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1631 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] [VBA] Remplacement valeur via listbox

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] [VBA] Remplacement valeur via listbox

n°2225422
vb_user
Le partage de l'info...
Posté le 17-04-2014 à 19:50:27  profilanswer
 

Bonjour à tous,
 
Voici ma demande :
 
Je souhaite selon l'information d'une cellule la remplacer par une autre via une listbox.
 
Pour être clair, lorsque je clique sur un bouton :
 1) une macro se lance avec boucle
 2) La donnée de la cellule est stockée (ex : 011601615601 Tarte aux pommes XDDFSFF54546).
C'est là que je souhaite  
3) Afficher une listbox avec des choix (ex: Tartes aux pommes ou Fenêtres ou Avion ou Magasin) , choisir "Tartes aux pommes"
4) La valeur de la cellule change et passe à la cellule suivante.
 
Est-ce possible ou pas?
 
Merci pour vos réponses.


Message édité par vb_user le 06-05-2014 à 11:29:33
mood
Publicité
Posté le 17-04-2014 à 19:50:27  profilanswer
 

n°2225447
Marc L
Posté le 18-04-2014 à 09:38:00  profilanswer
 

 
           Bonjour,
 
           pas clair du tout !
 
           Et une ListBox est utile en saisie manuelle, pas d'intérêt dans un code.
 
           Il y a des fonctions texte s'il est seulement question d'extraire le texte entre le premier et le dernier espace …
 

n°2225452
vb_user
Le partage de l'info...
Posté le 18-04-2014 à 10:15:03  profilanswer
 

Je fais des extractions de mon compte bancaire.
Et je me retrouve avec des lignes contenant des chiffres et des lettres.
Mon but est de reformater la colonne libellée.
Donc mon document excel, j'ai un bouton que j'ai appelé "Reformatage_fichier", il analyse ligne par lignes les libellés et reformate mes lignes via un Case Select.  
Je voudrais changer la totalité du contenu de la cellule par un nouveau texte. Le problème est que selon les dates, le libellé sera différent. Mais avec une listbox, je pourrai sélectionner le nouveau texte qui correspond aux libellés.


Message édité par vb_user le 18-04-2014 à 10:23:58
n°2225457
Marc L
Posté le 18-04-2014 à 11:55:43  profilanswer
 

 
           Sans voir le code (avec l'icône dédiée pour le baliser) ni d'exemples précis, toujours un peu flou !
 
           ListBox -> saisie manuelle, pas dans le cadre d'un automatisme …
 

n°2225899
vb_user
Le partage de l'info...
Posté le 23-04-2014 à 15:58:23  profilanswer
 

voici le code mon bouton :
--------------------------------------------------------------------
Sub Replace_btn_Click()
 
    Dim i As Integer
    Dim Valcel As Variant
    Dim max_boucles As Integer
    Dim IndexTab As Integer
    Dim Info As Integer
    Dim TabRech
    Dim NbCellTab As Integer
   
    max_boucles = 40 'limite de répétitions de la boucle est définie
    On Error Resume Next
     
      'Alimente les éléments du tableau
        TabRech = Array("VIRMT COMPTE ", _
        "CARTE ", ...)
 
     
    NbCellTab = UBound(TabRech)
 
    For i = 2 To 39 'Boucles prévues : 39
         
        Range("A" & i).Select
        If (i > max_boucles) Or (Range("A" & i).Value = "" ) Then 'Si A1 est vide ou contient un nombre < 7, diminution du nb de boucles
           Exit For 'Si condition vraie, on quitte la boucle For
        End If
        Valcel = Range("A" & i).Value
       
        For IndexTab = 0 To NbCellTab
            Info = InStr(Valcel, TabRech(IndexTab))
             
            Select Case TabRech(IndexTab)
               Case TabRech(0)
                    ActiveCell.Replace What:=TabRech(0), Replacement:="VIRMT-", _
                        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
                        False, ReplaceFormat:=False
                    Cells.Find(What:=TabRech(0), After:=ActiveCell, LookIn:= _
                        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
                        xlNext, MatchCase:=False, SearchFormat:=False).Activate
               Case TabRech(1)
      ...
      Case TabRech(2)
      ...
                 
            End Select
             
        Next
    Next
 
End Sub
 
--------------------------------------------------------------------
C'est cette partie qui m'ennnuie :
 Select Case TabRech(IndexTab)
               Case TabRech(0)
                    ActiveCell.Replace What:=TabRech(0), Replacement:="VIRMT-", _
                        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
                        False, ReplaceFormat:=False
                    Cells.Find(What:=TabRech(0), After:=ActiveCell, LookIn:= _
                        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
                        xlNext, MatchCase:=False, SearchFormat:=False).Activate
 
            End Select
 
Car je suis obligé à chaque ligne d'extraction, d'alimenter manuellement mon tableau + mon select.
 
Aujourd'hui j'ai mis 15 éléments dans mon tableau avec le select (qui lancement l'opération de remplacement du libellé) qui s'accompagne; Le problème est que les dates changent. On aura pour le 15/04 une opération avec BLABLA 15/04 BLABLA et le lendemain BLABLA 16/04 BLABLA et le renommage devient caduc.
 
est-ce plus précis?

n°2225927
Marc L
Posté le 23-04-2014 à 19:40:32  profilanswer
 

 
           Heu … En clair, sans décodeur ?
 

n°2225941
vb_user
Le partage de l'info...
Posté le 23-04-2014 à 20:58:43  profilanswer
 

Au vu des efforts pour formuler vos réponses, je pense me débrouiller par moi-même.

n°2226037
Marc L
Posté le 24-04-2014 à 13:54:47  profilanswer
 

 
           La qualité des réponses dépend de la qualité de la présentation !
 
           Dans  l'initiale comme celle de l'avant dernier message - du reste déjà où est le rapport entre les deux ?  :sarcastic:  -
           ce n'est franchement pas évident à décrypter, en particulier dans l'avant dernier message …
 
           L'effort doit être du côté du demandeur et du reste, aucun autre intervenant ne s'est manifesté …
           Ne pas s'étonner alors que des sujets de ce genre restent sans réponse !
 
           A consulter …
 
           

n°2226112
vb_user
Le partage de l'info...
Posté le 24-04-2014 à 17:45:07  profilanswer
 

J'ai essayé d'être le plus précis possible !
 
Je vais tenter de l'être encore plus.
 
Sur Excel :
 
Colonne A : Contient des libellés de type (VIRT BLABLA, CB  120414,...)
 
J'ai créé un bouton via le menu "Développeur" auquel je lui ai rattaché une macro.
 
Aujourd'hui dans ma macro, j'ai créé une variable tableau qui recense un certains nombre de libellé sur mon code :  
    'Alimente les éléments du tableau
        TabRech = Array("VIRMT COMPTE ", _
        "CARTE ", ...)  
 
Ensuite je lance un select case qui remplace le texte de la cellule active :
       Select Case TabRech(IndexTab)
               Case TabRech(0)
                    ActiveCell.Replace What:=TabRech(0), Replacement:="VIRMT-", _
                        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
                        False, ReplaceFormat:=False  
 
Le truc que je voulais faire c'était d'automatiser le script (renommer les libellés de manière + clair)  au maximum. La seule idée qui m'est venue au lieu d'alimenter mon tableau puis ajouter le case correspondant, était d'ouvrir une fenêtre de type popup mais contenant une liste de libellé à choisir et une fois le choix fait. La cellule active était modifié selon mon choix sur la listbox.

n°2226117
Marc L
Posté le 24-04-2014 à 17:58:01  profilanswer
 

 
           Je suis peut-être bouché mais je ne vois pas comment avec une ListBox (à moins que cela n'en soit pas une !) …
 
           Si tous les libellés sont du genre "011601615601 Tarte aux pommes XDDFSFF54546" à transformer en "Tarte aux pommes",
           suffit soit juste de supprimer la référence avant le premier espace et celle après le dernier espace
           ( est-ce vraiment si difficile à formuler ? Quel effort ‼  :sarcastic: )  
           soit de comparer la présence d'un mot au sein d'une liste par exemple dans une variable tableau …
 
           Bref, en donnant des exemples de libellés sources puis leurs correspondances après modification …
 
           Pourquoi la cellule active ?
 

mood
Publicité
Posté le 24-04-2014 à 17:58:01  profilanswer
 

n°2226131
vb_user
Le partage de l'info...
Posté le 24-04-2014 à 18:32:48  profilanswer
 

J'ai pris le choix d'une listbox qui me semblait simple dans ma reflexion.
 
--------------------------------------------------------------------
suffit soit juste de supprimer la référence avant le premier espace et celle après le dernier espace  -----------------------------------------------
ça c'est si le libellé est toujours le même sauf que pour certains libellés ont uen composition particulière  : ex : CB *46454 03042014 PAYPAL 91PARIS ou  CB *46454 03042014 XMSXS APPLE 02 PARIS 2e.
Comment feras-tu?  
Si dans le 1ere exemple, avec une commande de type split avec séparateur " " (espace) , je vais récupérer CB + PAYPAL, ca donnera Decoupe(0) + Decoupe(3)
Alors que dans le 2e exemple,  avec une commande de type split avec séparateur " " (espace) , je vais récupérer CB + APPLE, ca donnera Decoupe(0) + Decoupe(4)
Pour le déterminer de manière automatique, c'est compliqué.
 
Pourquoi la cellule active ? => avec Excel, dans le code, il faut activer la cellule avec NomCellule.Activate pou sélectionner la cellule sur laquelle on souhaite travailler.
 

n°2226138
Marc L
Posté le 24-04-2014 à 19:41:44  profilanswer
 

 
           Un bon code n'utilise pas ces affreux ralentisseurs  Select  &  Activate  !   Exemple ici
 
           Sinon solution sans code en utilisant le B-A-BA d'Excel !
 
           Dans une feuille de paramétrage du classeur ou dans un coin d'une feuille qui ne risque pas d'être effacé,
           saisir dans une colonne quelques libellés type. Sélectionner les saisies puis nommer cette liste par exemple LIBELLES …
           Ensuite, sélectionner la colonne source des libellés à modifier puis cliquer sur  Validation…  
           soit sur son icône soit via un menu (tout dépend de la version d'Excel, rechercher dans l'aide si besoin) …
           Y autoriser une Liste en spécifiant la Source =LIBELLES …   Décocher les options si besoin dans les autres onglets.
 
           Lorsqu'une cellule est sélectionnée dont la validation a été définie, une flèche apparaît afin d'ouvrir la liste …
           Quand un libellé ne figure pas, l'ajouter dans la zone du nom LIBELLES …
 

n°2227175
vb_user
Le partage de l'info...
Posté le 05-05-2014 à 14:24:07  profilanswer
 

Bonjour,
 
Désolé pour la réponse tardive.
 
Je ne souhaite pas utiliser le système de liste, je préfère l'automatisation.
 
J'ai regardé ton lien. Mais je ne vois pas par quoi les remplacer?
 
Te faut-il un bout de code pour voir ce qui pourrais les remplacer?

n°2227193
Marc L
Posté le 05-05-2014 à 16:43:52  profilanswer
 

 
           Bonjour,
 
           le lien sert juste à démontrer l'inutilité et le ralentissement de Select
 
           Utiliser une ListBox n'est pas de l'automatisation et la Validation est plus simple à mettre en œuvre !
 
           Sinon il y a plusieurs manières de l'effectuer : utiliser un filtre par libellé type, l'opérateur Like ou encore la fonction Instr
           Tout dépend de l'architecture de la feuille de calculs, du tableau des libellés type et du code déjà entrepris …
 

n°2227266
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 09:08:17  profilanswer
 

J'ai oublié de préciser que j'ai abandonné l'idée de la listbox.
Je pense retravaillé mon code pour travaillé comme tu le dis sur la feuille complète plutôt que cellule par cellule.
 
Autre demande :
J'aimerai mettre dans ma feuille, un code me permettant de connaitre la dernière cellule non vide tout en évitant de planter mon document, si l'opération est trop longue.
 
Merci pour tes réponses.

n°2227274
Marc L
Posté le 06-05-2014 à 09:42:19  profilanswer
 

 
           Opération longue ? C'est instantané !
           Au moins trois méthodes pour trouver la dernière cellule non vide mais tout dépend par rapport à quoi ?
 
           Une colonne (infos ici et exemple là),
           la plage utilisée (via la méthode UsedRange et la propriété Count ou encore via la méthode Find), … ?
 
           De la précision nait la solution !
 

n°2227275
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 09:48:19  profilanswer
 

Pour deux choses :
- Connaitre le début et la fin d'un tableau, exemple de résultat A1:D30.
- Connaitre la dernière cellule d'une colonne précise.

n°2227277
Marc L
Posté le 06-05-2014 à 09:59:44  profilanswer
 

 
           Pour le tableau, il y a la propriété Address, la propriété Range, …  - tout dépend si c'est un tableau déclaré
           et de la version d'Excel … -  et avec la fonction  Split  sur le ":" pour séparer début & fin …
 
           Pour la colonne c'est soit avec la propriété  End  comme dans les liens de mon précédent message
           soit via la méthode  Find  …
 

n°2227278
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 10:00:25  profilanswer
 

Pour la 2e demande, j'ai vu ton lien. C'est parfait. Je m'attentait à une boucle de type For... qui lorsqu'il y a trop de donnée pourrait planter mon document. Tu as raison , c'est très rapide.
 
En revanche pour la 1ere, il faut plusieurs commandes?
Merci de ta réponse.

n°2227280
Marc L
Posté le 06-05-2014 à 10:08:19  profilanswer
 

 
           En fait pour la première je suis dans le brouillard par manque d'informations concrètes !
           Ne pas oublier que je suis en aveugle, donc sans précision, je ne vais pas sortir la liste des possibles …
           En VBA il y a souvent différentes méthodes pour une même problématique sans compter la version ou le contexte !
 
           Tableau : déclaré dans Excel (version ?) ou pas ? Ou un simple bloc contigu de saisies ?
 
           Sinon mettre un lien sur un classeur exemple …
 

n°2227285
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 10:26:23  profilanswer
 

Non pas du tout.
Je parle d'une feuille Excel classique avec des données.
Pas d'un tableau excel créé via un code.
j'utilise Excel 2010 pourinfo.
Dans mon cas, je récupère un fichier txt que j'importe dans excel. Mais le tableau peut contenir 10 lignes comme il peut en contenir plus. Et avec cette commande, je pourrais connaitre les coordonnées exactes du tableau.

n°2227286
Marc L
Posté le 06-05-2014 à 10:33:24  profilanswer
 

 
           Toujours un peu flou mais j'en déduis donc l'adresse de début est forcément connue :  A1  !
 
           Donc dans le cas d'un bloc contigu,  [A1].CurrentRegion.Address  renvoie ses coordonnées.
 
           Info dans un lien et dans mes messages, suffit d'assembler …

n°2227289
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 10:41:11  profilanswer
 

Ok merci pour l'information.  
 
Je vais mettre la feuille en résolu.
 
Même si les débuts ont été difficiles, merci pour ton aide.

n°2227291
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 10:48:39  profilanswer
 

Dernière question....comment marquer en résolu?
 
Je suis aller sur ce lien  : http://wiki.atlas.doctissimo.fr/pa [...] Id=2491028
 
Mais je n'ai pas le "Marquer comme résolu" à coté de mon imprimante comme sur l'eemple., j'ai rien.

n°2227292
Marc L
Posté le 06-05-2014 à 10:53:03  profilanswer
 

 
           Cela dépend des forums, ici il n'y a pas un tel bouton …
 
           Modifier le titre du sujet du premier message en y insérant [Résolu] par exemple et merci d'y avoir pensé.
 

n°2227300
vb_user
Le partage de l'info...
Posté le 06-05-2014 à 11:50:16  profilanswer
 

C'était bien ça. Modification du premier message.
Bonne journée à toi.

n°2227302
Marc L
Posté le 06-05-2014 à 11:54:44  profilanswer
 

 
          Merci, à toi aussi.
 
         N'hésite pas à revenir en présentant tenants & aboutissants.  :sol:  
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] [VBA] Remplacement valeur via listbox

 

Sujets relatifs
Macro VBA utilisant 2 WorkbooksVBA Excel : série de label_x_click()
VBA - Comment cacher le contenu d'une cellule grace au format de celluVBA EXCEL Choisir la boite mail d'envoi lors d'un envoi via Outlook
Prévision demande Besoin d'aide VBA EXCELimportation de valeur de cellule dans un texte sous excel
supprimer des lignes contenant une valeur donnéeBesoin d'aide pour VBA
[RESOLU] [VBA] Test d'existence d'une feuille[VBA] Fermer une fenêtre excel ouverte dans IE
Plus de sujets relatifs à : [RESOLU] [VBA] Remplacement valeur via listbox


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR