Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Concaténer une plage avec une condition

5 réponses
Avatar
T Fred
Bonjour,
J'aurais 2 questions :

Tout d'abord, j'ai beau chercher mais je ne trouve pas le moyen de
regrouper dans la m=EAme cellule toutes les valeurs qui se trouvent sur
une plage (contenant parfois des cellules vides), s=E9par=E9es par un seul
espace.
La technique " =3DB1&" "&A2 " fonctionne bien mais lorsque j'ai 10 cases
de vides =E0 la suite =E7a me fait un gros blanc.


Et pour compliquer un peu l'affaire, j'aimerais ins=E9rer le texte
uniquement si la cellule d'=E0 c=F4t=E9 correspond =E0 un crit=E8re d=E9fin=
i.

Pour illustrer =E7a avec un exemple :
En colonnes A1:A100 des crit=E8res de s=E9lection : H / F
En colonnes B1:B100 des pr=E9noms (multitude de possibilit=E9s) : Pierre
Paul Jacques Marie C=E9cile etc ...

J'aimerais regrouper dans la m=EAme cellule (s=E9par=E9s par des espaces)
tous les pr=E9noms de sexe masculin.

Merci pour votre aide

Fred

5 réponses

Avatar
FFO
Salut à toi
à partir de la ligne 2
Colonne A le critère
Colonne B les Prénoms

Je te propose ce code à mettre dans un module standard :

i = 2
Do While i < Range("A65535").End(xlUp).Row + 1
If Range("A" & i) = "H" Then
If Range("B" & i) <> "" Then
Liste1 = Liste1 & " " & Range("B" & i)
End If
End If
If Range("A" & i) = "F" Then
If Range("B" & i) <> "" Then
Liste2 = Liste2 & " " & Range("B" & i)
End If
End If
i = i + 1
Loop
Range("C2") = Liste1
Range("C3") = Liste2

Résultat en C2 et C3

Fais des essais et dis moi !!!!!!
Avatar
FS
Bonjour,

Une autre approche avec une fonction perso :

'=Úns un module standard du classeur qui t'intéresse
Function TEXTE_SI(PlageCritère, Critère, PlageRecherche)
Dim cell, x&, S$
x = 1
For Each cell In PlageCritère
If cell.Value = Critère Then
If PlageRecherche.Range("A" & x).Value <> "" Then _
S = S & PlageRecherche.Range("A" & x).Value & " "
End If
x = x + 1
Next cell
TEXTE_SI = Trim(S)
End Function
'=====================================================
Dans la cellule où tu veux ta liste, pour récupérer les prénoms (dans la
plage B1:B10) masculins (sexe en A1:A10) :

=texte_si(A1:A10;"h";B1:B10)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

T Fred a écrit :
Bonjour,
J'aurais 2 questions :

Tout d'abord, j'ai beau chercher mais je ne trouve pas le moyen de
regrouper dans la même cellule toutes les valeurs qui se trouvent sur
une plage (contenant parfois des cellules vides), séparées par un seul
espace.
La technique " ±&" "&A2 " fonctionne bien mais lorsque j'ai 10 cases
de vides à la suite ça me fait un gros blanc.


Et pour compliquer un peu l'affaire, j'aimerais insérer le texte
uniquement si la cellule d'à côté correspond à un critère défini.

Pour illustrer ça avec un exemple :
En colonnes A1:A100 des critères de sélection : H / F
En colonnes B1:B100 des prénoms (multitude de possibilités) : Pierre
Paul Jacques Marie Cécile etc ...

J'aimerais regrouper dans la même cellule (séparés par des espaces)
tous les prénoms de sexe masculin.

Merci pour votre aide

Fred


Avatar
T Fred
On 23 juil, 14:34, FFO wrote:
Salut à toi
à partir de la ligne 2
Colonne A le critère
Colonne B les Prénoms

Je te propose ce code à mettre dans un module standard :

i = 2
Do While i < Range("A65535").End(xlUp).Row + 1
If Range("A" & i) = "H" Then
If Range("B" & i) <> "" Then
Liste1 = Liste1 & " " & Range("B" & i)
End If
End If
If Range("A" & i) = "F" Then
If Range("B" & i) <> "" Then
Liste2 = Liste2 & " " & Range("B" & i)
End If
End If
i = i + 1
Loop
Range("C2") = Liste1
Range("C3") = Liste2

Résultat en C2 et C3

Fais des essais et dis moi !!!!!!



Salut FFO et merci pour ta réponse.

Je viens d'éssayer et il y a un bug à cet endroit là :
If Range("A" & i) = "H" Then

Malheureusement je n'y connais rien à ce language donc je ne sais pas
du tout commment réparer ça =(
Avatar
T Fred
On 23 juil, 15:20, FS wrote:
Bonjour,

Une autre approche avec une fonction perso :

'=Úns un module standard du classeur qui t'intéresse
Function TEXTE_SI(PlageCritère, Critère, PlageRecherche)
Dim cell, x&, S$
   x = 1
   For Each cell In PlageCritère
     If cell.Value = Critère Then
       If PlageRecherche.Range("A" & x).Value <> "" Then _
         S = S & PlageRecherche.Range("A" & x).Value & " "
     End If
     x = x + 1
   Next cell
   TEXTE_SI = Trim(S)
End Function
'======================== ========================= =====

Dans la cellule où tu veux ta liste, pour récupérer les prénoms ( dans la
plage B1:B10) masculins (sexe en A1:A10) :

=texte_si(A1:A10;"h";B1:B10)

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :http://frederic.sigonneau.free.fr/

T Fred a écrit :



> Bonjour,
> J'aurais 2 questions :

> Tout d'abord, j'ai beau chercher mais je ne trouve pas le moyen de
> regrouper dans la même cellule toutes les valeurs qui se trouvent sur
> une plage (contenant parfois des cellules vides), séparées par un s eul
> espace.
> La technique " ±&" "&A2 " fonctionne bien mais lorsque j'ai 10 case s
> de vides à la suite ça me fait un gros blanc.

> Et pour compliquer un peu l'affaire, j'aimerais insérer le texte
> uniquement si la cellule d'à côté correspond à un critère d éfini.

> Pour illustrer ça avec un exemple :
> En colonnes A1:A100 des critères de sélection : H / F
> En colonnes B1:B100 des prénoms (multitude de possibilités) : Pierr e
> Paul Jacques Marie Cécile etc ...

> J'aimerais regrouper dans la même cellule (séparés par des espace s)
> tous les prénoms de sexe masculin.

> Merci pour votre aide

> Fred- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Merci beaucoup Fred ça marche nickel =)
Avatar
FFO
Rebonjour à toi

Peux tu me transmettre ton document avec la macro qui Bug par ce biais
http://www.cijoint.fr/index.php
Enlèves les données confidentielles
Communiques moi le lien pour le récupérer
Merci


"T Fred" wrote:

On 23 juil, 14:34, FFO wrote:
> Salut à toi
> à partir de la ligne 2
> Colonne A le critère
> Colonne B les Prénoms
>
> Je te propose ce code à mettre dans un module standard :
>
> i = 2
> Do While i < Range("A65535").End(xlUp).Row + 1
> If Range("A" & i) = "H" Then
> If Range("B" & i) <> "" Then
> Liste1 = Liste1 & " " & Range("B" & i)
> End If
> End If
> If Range("A" & i) = "F" Then
> If Range("B" & i) <> "" Then
> Liste2 = Liste2 & " " & Range("B" & i)
> End If
> End If
> i = i + 1
> Loop
> Range("C2") = Liste1
> Range("C3") = Liste2
>
> Résultat en C2 et C3
>
> Fais des essais et dis moi !!!!!!

Salut FFO et merci pour ta réponse.

Je viens d'éssayer et il y a un bug à cet endroit là :
If Range("A" & i) = "H" Then

Malheureusement je n'y connais rien à ce language donc je ne sais pas
du tout commment réparer ça =(