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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Excel - concatener en fonction d'un Tag

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA Excel - concatener en fonction d'un Tag

n°2030817
ephene
Posté le 20-10-2010 à 11:27:30  profilanswer
 

J'aimerais pouvoir concatener du texte à partir du moment où il y a un tag=1 dans la case d'à côté...
 
ex:
 
1    TexteA
1    TexteB
0    TexteC
1   TexteD
1   TexteE
1   TexteF
0   TexteG
 
Dans cet exemple les 1 et 0 sont dans une colonne à gauche du texte. J'aimerais pouvoir concatener Texte A et Texte B car il y a une suite de 1 par contre ne rien fairte pour le texte avec les 0. Ensuite, concatener le texte D, E, F car encore une fois il y a une suite de 1... etc..
 
Voici une partie de mont code... dur dur!
 
 
 
Dim conc As String
Dim i, j, n, p As Integer
 
j = 1
i = 1
 
'tant que le tag est egal à 1 faire le reste'
Do While Cells(j, 7) = 1
 
conc = ""
 
 
 
For i = 1 To "derniere ligne"
 
if cells(i,12)=1 then
 
'concatener les cases lorsque le tag 1 est dans la case à gauche'
conc = conc & Chr(10) & Range("I" & (i + 1)).Value
 
 
'mettre le résultat dans une case'
Range("O" & i + 1) = conc

End If
 
Next
 
j = j + 1
 
Loop
'
End Sub


Message édité par ephene le 20-10-2010 à 12:04:44
mood
Publicité
Posté le 20-10-2010 à 11:27:30  profilanswer
 

n°2030862
ephene
Posté le 20-10-2010 à 13:54:53  profilanswer
 

HELP!!!

n°2030884
Arwon
Posté le 20-10-2010 à 14:21:01  profilanswer
 

Essaie le code ci-dessous
 
a remplacer les valeurs des constantes par les vrais n° de colonne de tes données ainsi que le début de la boucle si sur ton fichier les données ne commencent pas a la ligne 1
 
ce code va supprimer les lignes en trop après la concaténation.
 
 
Const COLONNETAG As Integer = 1
Const COLONNETEXTE As Integer = 2
 
Dim ligneDébut As Long
Dim ligneActuelle As Long
Dim ligneFin as Long
 
Dim conc As String
Dim i As Long
 
ligneActuelle = 1
 
Do While ligneActuelle <= ligneFin
 
If Cells(ligneActuelle, COLONNETAG).Value = 1 Then
conc = Cells(ligneActuelle, COLONNETEXTE).Value
ligneDébut = ligneActuelle
 
Do While Cells(ligneActuelle + 1, COLONNETAG).Value = 1 And ligneActuelle <= ligneFin
ligneActuelle = ligneActuelle + 1
conc = conc & Cells(ligneActuelle, COLONNETEXTE).Value
Loop
 
For i = ligneActuelle To ligneDébut + 1 Step -1
Rows(i).Delete
ligneFin = ligneFin - 1
Next i
 
ligneActuelle = ligneDébut
Cells(ligneActuelle, COLONNETEXTE).Value = conc
conc = ""
 
End If
 
ligneActuelle = ligneActuelle + 1
Loop


Message édité par Arwon le 20-10-2010 à 19:47:26
n°2030899
ephene
Posté le 20-10-2010 à 14:39:20  profilanswer
 

Merci pour ce premier jet qui resout une partie du probleme.
 
Par contre, je ne veux pas que les lignes avec les 0 soient surpprimées! Au contraire, elle doivent rester à leur place.
 
J'aimerais que la concatenation se fasse dans la case du premier 1 de chaque serie de 1... dans l'exemple Texte D E F dans la case ou se trouve Texte D (ou dans une case à côté mais au même niveau).
 
Merci pour ton aide

n°2030913
Arwon
Posté le 20-10-2010 à 15:02:24  profilanswer
 

les lignes avec des 0 ne sont pas supprimés avec ce code, juste les lignes en trop avec le tag 1
 
dans ton exemple, la case ou se trouve D aura la concaténation de D E F et les lignes E et F seront supprimés. Si tu veux les garder il faudra modifier un peu le code  
 
t'auras :
 
1    TexteATexteB  
0    TexteC  
1   TexteDTexteETexteF  
 0   TexteG


Message édité par Arwon le 20-10-2010 à 15:03:49
n°2030923
ephene
Posté le 20-10-2010 à 15:28:57  profilanswer
 

Du coup si je veux garder les cases du texte E et F mais effecer leur contenu, que dois-je modifier?
 
Je vois que tu as l'air d'en connaitre un rayon donc si tu as une idee... Merci.

n°2030986
Arwon
Posté le 20-10-2010 à 19:41:49  profilanswer
 

comme ceci :
 
 
Const COLONNETAG As Integer = 1
Const COLONNETEXTE As Integer = 2
 
Dim ligneDébut As Long
Dim ligneActuelle As Long
Dim ligneFin As Long
 
Dim conc As String
Dim i As Long
 
ligneFin = Cells(ActiveSheet.Rows.Count, COLONNETAG).End(xlUp).Row
 
ligneActuelle = 1
 
Do While ligneActuelle <= ligneFin
 
If Cells(ligneActuelle, COLONNETAG).Value = 1 Then
conc = Cells(ligneActuelle, COLONNETEXTE).Value
ligneDébut = ligneActuelle
 
Do While Cells(ligneActuelle + 1, COLONNETAG).Value = 1 And ligneActuelle <= ligneFin
ligneActuelle = ligneActuelle + 1
conc = conc & Cells(ligneActuelle, COLONNETEXTE).Value
Cells(ligneActuelle, COLONNETEXTE).ClearContents
Loop
 
Cells(ligneDébut, COLONNETEXTE).Value = conc
conc = ""
 
End If
 
ligneActuelle = ligneActuelle + 1
Loop
 
 
si tu veux écrire dans une autre colonne le texte, il te suffit de modifier cette ligne :
 
Cells(ligneDébut, COLONNETEXTE).Value = conc


Message édité par Arwon le 20-10-2010 à 19:49:01

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

  VBA Excel - concatener en fonction d'un Tag

 

Sujets relatifs
Fonction récursive: combinaisons possibles entre plusieurs tableauxAPI Google Maps version 2 (fonction google.load)
as3 stopper fonction vidéo dans un child swf chargé dynamiquementExcel : Fonction si
date en fonction de la tachefonction offset sous vba/excel
Requête en fonction d'un choixModifier des labels en fonction des changements d'une textbox
Fonction Javascript pour slideup / slidedown multiplesFonction de débug
Plus de sujets relatifs à : VBA Excel - concatener en fonction d'un Tag


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