Affichage sélectif d'une colonne concatene avecnombre de caractères variables

  • Initiateur de la discussion Initiateur de la discussion matteopacino
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

matteopacino

Guest
Bonjour,

Merci de votre attention !

J'ai mis un document joint en exemple.

J'ai une colonne I dans mon document que j'ai concaténé, et que je voudrais utiliser pour une lookup fonction.
Le problème est que je ne dois voir affiché dans ma cellule ("I1") par exemple que les mots avant la ",".

J'ai essayé avec une fonction LEFT ( ou Right) , mais le nombre de caractères n'étant pas le même pour chaque cellule, cela n'a pas fonctionné.


Merci de votre aide
 

Pièces jointes

Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Bonsoir le fil, bonsoir le forum,

En piece jointe le code modifié ci-dessous. J'ai remplacé VlookUp par Find... :
Code:
Sub test(x As String)
Dim caract As Integer
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim li As Integer 'déclare la variable li (Ligne)

On Error GoTo ErrMsg
With Sheets("ActiveTemplates") 'prend en compte l'onglet "ActiveTemplates"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "ActiveTemplates"
'définit la recherche r (cherche la valeur de la cellule active dans la plage pl)
Set r = pl.Find(Sheets("CREDI-Config").Range(x).Value, , xlValues, xlWhole)
If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence
    pa = r.Address 'définit l'adresse de la première occurrence trouvée
    Do 'exécute
        'condition 2 : si la cellule adjacente à la cellule active est identique à la cellule adjacente à l'occurrence trouvée
        If r.Offset(0, 1).Value = Range(x).Offset(0, 1).Value Then
            li = r.Row 'définit la ligne li
            Exit Do 'sort de la boucle Do... Loop
        End If 'fin de la condition 2
        Set r = pl.FindNext(r) 'redéfinit la recherche r (occurrence suivante)
    Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en pa
End If 'fin de la cndition 1
    
message = Sheets("CREDI-Config").Range(x).Value & Chr(10) & Chr(10)
caract = 66
With Sheets("ActiveTemplates")
    For i = 2 To 13
        'utilise les variables i & li pour récupérer les données
        message = message & .Cells(1, i) & " : " & .Cells(li, i) & Chr(10)
        ' .Range(Chr(caract) & "1").Value = WorksheetFunction.VLookup(.Range(X).Value, Workbooks("test2.xlsx").Sheets("Feuil1").Range("A1:I8"), i, False)
        caract = caract + 1
    Next
End With
'MsgBox (message), , "Document CREDI info"
UserForm2.teste (message)
UserForm2.Show
Exit Sub
ErrMsg:
    MsgBox ("No data indexed for this document type."), , Range(x).Value
End Sub

Le fichier :
 

Pièces jointes

Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Bonjour Robert,

merci beaucoup pour cette nouvelle macro.

cela fonctionne bien, mais si j'ajoute des lignes identiques dans chacun de mes onglets, le lien ne se fait plus.

Il y a en fait 3000 lignes en tout sur le premier onglet.

Je vous envoie un exemple dans peu de temps.
 
Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Pardon, en fait si j'ajoute juste une ligne, cela fonctionne mais lorsque je copie et colle les 3000 autres, cela ne fonctionne plus...


une suggestion ?

merci
 
Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Hmmm
Je ne comprends pas trop...

Avec des valeurs type Data 1, Data 2, cela fonctionne et le lien se fait...

Mais avec mes vraies valeurs, cela ne fonctionne plus... je ne peux malheureusement pas vous transmettre un document avec ces vraies valeurs...
 
Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

En fait, pour une ligne, je viens de copier un format, et cela a marché, mais quand je le fais à une autre ça ne marche pas... vraiment trop frustrant...
 
Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Désolé de revenir encore avec ça... mais c'est vraiment dommage de ne pas réussir à terminer cela...


tout fonctionne très bien dans le document de robert... mais si j'ajoute des lignes par copier-coller, alors excel ne les considèrent plus comme des cellules éditées, et du coup ne les incluent pas dans la plage définie dans la macro.

Si quelqu'un peut m'aider ce serait vraiment super...

Il me semble que le problème se situe dans la partie du code que j'ai grossi :

Sub test(x As String)
On Error GoTo ErrMsg
Dim caract As Integer
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)

Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim li As Integer 'déclare la variable li (Ligne)

With Sheets("ActiveTemplates") 'prend en compte l'onglet "ActiveTemplates"

dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A) [/SIZE] [/SIZE]

Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "ActiveTemplates"
'définit la recherche r (cherche la valeur de la cellule active dans la plage pl)
Set r = pl.Find(Sheets("CREDI-Config").Range(x).Value, , xlValues, xlWhole)
If Not r Is Nothing Then 'condition 1 : si il existe au moins une occurrence
pa = r.Address 'définit l'adresse de la première occurrence trouvée
Do 'exécute
'condition 2 : si la cellule adjacente à la cellule active est identique à la cellule adjacente à l'occurrence trouvée
If r.Offset(0, 1).Value = Range(x).Offset(0, 1).Value Then
li = r.Row 'définit la ligne li
Exit Do 'sort de la boucle Do... Loop
End If 'fin de la condition 2
Set r = pl.FindNext(r) 'redéfinit la recherche r (occurrence suivante)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrences ailleurs qu'en pa
End If 'fin de la cndition 1

message = Sheets("CREDI-Config").Range(x).Value & Chr(10) & Chr(10)
caract = 66
With Sheets("ActiveTemplates")
For i = 2 To 13
'utilise les variables i & li pour récupérer les données
message = message & .Cells(1, i) & " : " & .Cells(li, i) & Chr(10)
' .Range(Chr(caract) & "1").Value = WorksheetFunction.VLookup(.Range(X).Value, Workbooks("test2.xlsx").Sheets("Feuil1").Range("A1:I8"), i, False)
caract = caract + 1
Next
End With
'MsgBox (message), , "Document CREDI info"

UserForm2.teste (message)
UserForm2.Show
Exit Sub
ErrMsg:
MsgBox ("No data indexed for this document type."), , Range(x).Value
End Sub
 
Dernière modification par un modérateur:
Re : Affichage sélectif d'une colonne concatene avecnombre de caractères variables

Bonjour le fil, bonjour le forum,

Une variable déclarée comme Integer est limitée à 32 767. Si tu as plus de lignes que ça, le code va planter.
Remplace :
Code:
Dim dl As Integer
par:
Code:
Dim dl As Long
qui est limité à 2 147 483 647 (je ne sais pas combien il y a de lignes dans Excel 2007 ou 2010 mais ça devrait faire l'affaire...)

Sinon le problème est ailleurs et sans pièce jointe... tu connais ma réponse...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
3
Affichages
643
Retour