Concatener noms des colonnes si "x"
Résolu/Fermé
excel300817
Messages postés
3
Date d'inscription
mercredi 30 août 2017
Statut
Membre
Dernière intervention
3 septembre 2017
-
Modifié le 30 août 2017 à 16:39
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 4 sept. 2017 à 12:13
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 4 sept. 2017 à 12:13
A voir également:
- Concatener noms des colonnes si "x"
- Comment faire des colonnes sur word - Guide
- Les noms des animaux - Télécharger - Études & Formations
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Concatener deux cellules excel - Guide
- Concaténer des pdf - Guide
6 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
30 août 2017 à 16:44
30 août 2017 à 16:44
Bonjour,
Merci de déposer le fichier xls (réduit au nécessaire et anonymisé et le résultat attendu) sur cjoint.com et coller ici le lien fourni.
Pour ma gouverne, en quoi si quelqu'un te fait ça par formule ça t'empêcherait de l'utiliser en macro ? Ca m'échappe...
eric
Merci de déposer le fichier xls (réduit au nécessaire et anonymisé et le résultat attendu) sur cjoint.com et coller ici le lien fourni.
Pour ma gouverne, en quoi si quelqu'un te fait ça par formule ça t'empêcherait de l'utiliser en macro ? Ca m'échappe...
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 sept. 2017 à 08:48
3 sept. 2017 à 08:48
excel300817
Messages postés
3
Date d'inscription
mercredi 30 août 2017
Statut
Membre
Dernière intervention
3 septembre 2017
Modifié le 3 sept. 2017 à 11:07
Modifié le 3 sept. 2017 à 11:07
Bonjour Eric,
Je suis désolée, je ne savais même pas que des cellules étaient nommées; j'avais modifié les erreurs de référence dans l'éditeur de vba.
Voici le nouveau fichier (j'ai supprimé les noms de cellule, ils ne sont pas utiles) : http://www.cjoint.com/c/GIdjb2OV5fV
Merci pour ton aide! On va bien réussir (enfin "tu"), comme tu le dis dans ta signature :)
Je suis désolée, je ne savais même pas que des cellules étaient nommées; j'avais modifié les erreurs de référence dans l'éditeur de vba.
Voici le nouveau fichier (j'ai supprimé les noms de cellule, ils ne sont pas utiles) : http://www.cjoint.com/c/GIdjb2OV5fV
Merci pour ton aide! On va bien réussir (enfin "tu"), comme tu le dis dans ta signature :)
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 sept. 2017 à 13:39
3 sept. 2017 à 13:39
oui mais là rien ne tournait dans ton fichier. Difficile de deviner le fonctionnement.
Donc détaille une saisie complète et ce que ça doit donner : saisir ça et ça dans telle feuille, telle cellule.
Telle cellule doit alors avoir telle valeur parce que... etc
Et tu complètes avec un fichier contenant tous les cas de figure en exemple et ce qui est retourné en vert qu'on sache ce qu'il y a à faire.
Donc détaille une saisie complète et ce que ça doit donner : saisir ça et ça dans telle feuille, telle cellule.
Telle cellule doit alors avoir telle valeur parce que... etc
Et tu complètes avec un fichier contenant tous les cas de figure en exemple et ce qui est retourné en vert qu'on sache ce qu'il y a à faire.
excel300817
>
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
3 sept. 2017 à 18:05
3 sept. 2017 à 18:05
Eric,
Je t'envoie 2 liens :
http://www.cjoint.com/c/GIdqeajRzyV : Fichier vierge sur lequel tu peux tester d'éditer le tableau final
http://www.cjoint.com/c/GIdqePxURFV : Fichier pré-rempli avec feuille 4 qui précise les anomalies et le résultat attendu
Nous utilisons ce fichier pour chaque activité dans le but d'éditer le tableau de synthèse que nous avons ligne 55 de la feuille 3 à la fin de toutes les saisies.
Nous dupliquons donc le fichier à chaque activité en supprimant les lignes du tableau de synthèse et en recommençant toute la saisie à chaque fois.
Voici la saisie :
Feuille 1 (préparation de la synthèse) :
- Compléter le nb de phases (ex: 3)
- Compléter leur nom (ex: Marcher, courir, sauter)
- Cliquer sur démarrer
Feuille 2 (préparation de la synthèse) :
- Mettre des "x" pour chaque sous-groupe qui participent à une ou plusieurs phases (cellules de la colonne C, D, E voire plus). Par exemple le sous-groupe CC2 peut intervenir pour les phases marcher et courir, on met alors un "x" dans les cellules C20 et D20
- Mettre éventuellement un commentaire (colonne R)
- Cliquer sur valider
Feuille 3 (synthèse) :
Nous avons un tableau synthétique de taille variable par sous-groupes à partir de la ligne 55 que nous éditons.
C'est ici que doit avoir lieu la modification; celui-ci n'affiche pas le noms des phases quand il y en a plus d'un par sous-groupe !
Attention, je reprécise, le fichier peut beuguer quand on refait la saisie si les lignes du tableau de synthèse ne sont pas supprimées.
Merci Eric
Je t'envoie 2 liens :
http://www.cjoint.com/c/GIdqeajRzyV : Fichier vierge sur lequel tu peux tester d'éditer le tableau final
http://www.cjoint.com/c/GIdqePxURFV : Fichier pré-rempli avec feuille 4 qui précise les anomalies et le résultat attendu
Nous utilisons ce fichier pour chaque activité dans le but d'éditer le tableau de synthèse que nous avons ligne 55 de la feuille 3 à la fin de toutes les saisies.
Nous dupliquons donc le fichier à chaque activité en supprimant les lignes du tableau de synthèse et en recommençant toute la saisie à chaque fois.
Voici la saisie :
Feuille 1 (préparation de la synthèse) :
- Compléter le nb de phases (ex: 3)
- Compléter leur nom (ex: Marcher, courir, sauter)
- Cliquer sur démarrer
Feuille 2 (préparation de la synthèse) :
- Mettre des "x" pour chaque sous-groupe qui participent à une ou plusieurs phases (cellules de la colonne C, D, E voire plus). Par exemple le sous-groupe CC2 peut intervenir pour les phases marcher et courir, on met alors un "x" dans les cellules C20 et D20
- Mettre éventuellement un commentaire (colonne R)
- Cliquer sur valider
Feuille 3 (synthèse) :
Nous avons un tableau synthétique de taille variable par sous-groupes à partir de la ligne 55 que nous éditons.
C'est ici que doit avoir lieu la modification; celui-ci n'affiche pas le noms des phases quand il y en a plus d'un par sous-groupe !
Attention, je reprécise, le fichier peut beuguer quand on refait la saisie si les lignes du tableau de synthèse ne sont pas supprimées.
Merci Eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 sept. 2017 à 20:29
3 sept. 2017 à 20:29
Si jamais tu peux avoir le cas d'une feuille 2 avec une seule phase, tu dis, il faudra que je modifie.
Ayant beaucoup de mal avec ton fichier et son utilisation (entre ce qui est manuel et par macro) je suis parti sur une fonction personnalisée.
Comme ça tu peux l'utiliser tout autant sur la feuille qu'en vba.
Je me suis basé uniquement sur l'exemple feuille 4, qui prend les infos feuille 2
A mettre dans un module standard.
Syntaxe sur feuille 4, en B13 :
Tu dis si je suis dans les clous, je ne suis sûr de rien.
eric
Ayant beaucoup de mal avec ton fichier et son utilisation (entre ce qui est manuel et par macro) je suis parti sur une fonction personnalisée.
Comme ça tu peux l'utiliser tout autant sur la feuille qu'en vba.
Je me suis basé uniquement sur l'exemple feuille 4, qui prend les infos feuille 2
Function phase(ssGroupe As String) Dim c1 As Range, c2 As Range, pl As Range With Sheets("2") Set c1 = .Columns(2).Find(ssGroupe, , xlValues, xlWhole) If c1 Is Nothing Then phase = "- ssGroupe inconnu": Exit Function Set pl = Intersect(c1.EntireRow, .Range(.[C3], .[C3].End(xlToRight)).EntireColumn) For Each c2 In pl If LCase(c2) = "x" Then phase = phase & vbLf & "- " & .Cells(3, c2.Column) Next c2 End With phase = Mid(phase, 2) End Function
A mettre dans un module standard.
Syntaxe sur feuille 4, en B13 :
=phase(D13)
Tu dis si je suis dans les clous, je ne suis sûr de rien.
eric
Eric,
Je peux avoir le cas avec une seule phase mais le code VBA que je te demandais devait de toute manière se lancer que s'il y a plus d'une phase. Sinon, ma macro actuelle me retourne bien le nom de la phase (quand il n'y en a qu'une).
Par ailleurs, comment est-ce que je peux faire en sorte que la fonction s'insère dans la cellule par le biais de la macro en sachant que la taille du tableau (feuille 3) est variable ?
A quel moment dois-je coller ce code dans le module 2 ?
PS : si tu regardes le module 2, j'ai fait des retraitements car la première version affiche les sous-groupes par phase et non le contraire. Mon retraitement se base sur la première version du tableau pour le modifier en supprimant les lignes qui comportent la même phase. N'est-il pas possible de faire la même chose pour ma demande et donc une concaténation ? (je pense que ça peut être plus simple, si c'est possible).
Merci par avance
Je peux avoir le cas avec une seule phase mais le code VBA que je te demandais devait de toute manière se lancer que s'il y a plus d'une phase. Sinon, ma macro actuelle me retourne bien le nom de la phase (quand il n'y en a qu'une).
Par ailleurs, comment est-ce que je peux faire en sorte que la fonction s'insère dans la cellule par le biais de la macro en sachant que la taille du tableau (feuille 3) est variable ?
A quel moment dois-je coller ce code dans le module 2 ?
PS : si tu regardes le module 2, j'ai fait des retraitements car la première version affiche les sous-groupes par phase et non le contraire. Mon retraitement se base sur la première version du tableau pour le modifier en supprimant les lignes qui comportent la même phase. N'est-il pas possible de faire la même chose pour ma demande et donc une concaténation ? (je pense que ça peut être plus simple, si c'est possible).
Merci par avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
3 sept. 2017 à 22:59
3 sept. 2017 à 22:59
Module 2 c'est vague, tu n'es pas une adepte de la précision, il va falloir t'y mettre.
De plus je ne vois pas ce que feuille 3 vient faire ici (?) J'ai regardé feuille 4, je suppose que c'est son pendant.
Si tu es vba pas besoin de coller la fonction.
Là où tu mettais "2 phases" qui ne te satisfaisait pas, tu dois connaitre le sous-groupe (c'est impératif). Imaginons que ce soit dans une variable ssG
Si tu avais cells(lig,2)= "2 phases" (en gros), tu mets :
Je suppose que c'est dans ce coin :
Ca te suffit comme explication ?
Mais peut-être as-tu du ménage à faire en plus (?)
Ton style de code personnel (on a chacun le sien), en plus l'absence courante d'indentation ne facilitent pas la lecture...
D'ailleurs en essayant de chercher ta proc j'ai vu que tu avais une variable phase. Renomme la fonction autrement dans ce cas.
Fonction (renommée) pour 1 à x phases :
eric
De plus je ne vois pas ce que feuille 3 vient faire ici (?) J'ai regardé feuille 4, je suppose que c'est son pendant.
Si tu es vba pas besoin de coller la fonction.
Là où tu mettais "2 phases" qui ne te satisfaisait pas, tu dois connaitre le sous-groupe (c'est impératif). Imaginons que ce soit dans une variable ssG
Si tu avais cells(lig,2)= "2 phases" (en gros), tu mets :
cells(lig,2) = phase(ssG)
Je suppose que c'est dans ce coin :
If WorksheetFunction.CountIf(Ligne, "x") > 1 And DD <> "" Then
DD.Offset(0, -2) = WorksheetFunction.CountIf(Ligne, "x") & " phases"
End If
Ca te suffit comme explication ?
Mais peut-être as-tu du ménage à faire en plus (?)
Ton style de code personnel (on a chacun le sien), en plus l'absence courante d'indentation ne facilitent pas la lecture...
D'ailleurs en essayant de chercher ta proc j'ai vu que tu avais une variable phase. Renomme la fonction autrement dans ce cas.
Fonction (renommée) pour 1 à x phases :
Function LPhase(ssGroupe As String) As String Dim c As Range, pl As Range With Sheets("2") Set c = .Columns(2).Find(ssGroupe, , xlValues, xlWhole) If c Is Nothing Then LPhase = "- ssGroupe inconnu": Exit Function If .[D3] = "" Then Set pl = .[C3] Else Set pl = .Range(.[C3], .[C3].End(xlToRight)) For Each c In Intersect(c.EntireRow, pl.EntireColumn) If LCase(c) = "x" Then LPhase = LPhase & vbLf & "- " & .Cells(3, c.Column) Next c End With LPhase = Mid(LPhase, 2) End Function
eric
Eric,
La feuille 4 était un récap, comme tu l'avais demandé mais il reprend le tableau synthèse qui se forme dans la feuille 3.
Je laisse tomber mon histoire de modification du module 2 que j'ai du mal à expliquer.
En revanche, j'ai essayé avec cette fonction en tapant :
If WorksheetFunction.CountIf(Ligne, "x") > 1 And DD <> "" Then
DD.Offset(0, -2) = Lphase(DD)
End If
Ca ne marche pas.. J'ai "type d'argument byRef incompatible"..
Fichier : http://www.cjoint.com/c/GIdvKcofcKV
Pour tester avec ce fichier :
- Démarrer (feuille 1) => Valider (ligne 70 de la feuille 2)
(Bien entendu, la feuille 3 s'affiche lorsque la validation fonctionne)
Merci !!
La feuille 4 était un récap, comme tu l'avais demandé mais il reprend le tableau synthèse qui se forme dans la feuille 3.
Je laisse tomber mon histoire de modification du module 2 que j'ai du mal à expliquer.
En revanche, j'ai essayé avec cette fonction en tapant :
If WorksheetFunction.CountIf(Ligne, "x") > 1 And DD <> "" Then
DD.Offset(0, -2) = Lphase(DD)
End If
Ca ne marche pas.. J'ai "type d'argument byRef incompatible"..
Fichier : http://www.cjoint.com/c/GIdvKcofcKV
Pour tester avec ce fichier :
- Démarrer (feuille 1) => Valider (ligne 70 de la feuille 2)
(Bien entendu, la feuille 3 s'affiche lorsque la validation fonctionne)
Merci !!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
4 sept. 2017 à 09:32
4 sept. 2017 à 09:32
Bonjour,
Je laisse tomber mon histoire de modification du module 2 que j'ai du mal à expliquer.
Mais tu es dedans là non ?
sinon :
eric
Je laisse tomber mon histoire de modification du module 2 que j'ai du mal à expliquer.
Mais tu es dedans là non ?
sinon :
DD.Offset(0, -2) = LPhase(DD.Value)
eric
excel300817
>
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
4 sept. 2017 à 12:00
4 sept. 2017 à 12:00
Eric,
Malgré les incompréhensions et difficultés d'expression dues à la complexité du fichier, tu as réussi à répondre à ma demande. Je te remercie beaucoup !!!!
Je suis désolée mais je n'hésiterai pas faire appel à tes compétences si besoin^^ ;)
Malgré les incompréhensions et difficultés d'expression dues à la complexité du fichier, tu as réussi à répondre à ma demande. Je te remercie beaucoup !!!!
Je suis désolée mais je n'hésiterai pas faire appel à tes compétences si besoin^^ ;)
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié le 4 sept. 2017 à 12:14
Modifié le 4 sept. 2017 à 12:14
Disons que ce n'est pas simple de s'approprier un fichier déjà avancé en code sans éplucher toutes les lignes une à une ;-)
D'où l'idée d'une fonction qui ne répond qu'à la question et facile à greffer.
Bonne continuation.
eric
D'où l'idée d'une fonction qui ne répond qu'à la question et facile à greffer.
Bonne continuation.
eric
30 août 2017 à 16:52
Voici le lien :
http://www.cjoint.com/c/GHEoYKSqw1q
J'ai réduit le tableau au maximum !
Oui, je peux effectivement reprendre la formule dans la macro.
Merci par avance!
30 août 2017 à 17:35
1 sept. 2017 à 14:07
A quoi sert UBound exactement?
Par ailleurs, je pense avoir besoin de tes compétences pour un autre fichier!
Je pensais pouvoir m'aider du premier code pour le réadapter à celui-ci mais il m'a pas l'air si simple que ca en sachant que je suis que débutante en vba et que je m'aide pas mal des forums (notamment de tes réponses, merci !).
Voici le lien : http://www.cjoint.com/c/GIbl4zEx8Ir
Après avoir renseigné le nombre de phases et renseigné les phases correspondant aux sous-groupes par des "x", je voudrais également que dans le tableau synthèse il n'y ait pas "2 phases" mais le nom des phase avec des tirets (feuille 3, ligne 55)
N'hésite pas à m'écrire si le fichier n'est pas clair (La macro qui complète le tableau dans la feuille 3 est e bas de page du module 2).
Je te remercie par avance et espère que tu pourras répondre à mes interrogations!!!
Bonne journée
1 sept. 2017 à 17:28
A quoi sert UBound exactement?
F1 dessus et précise ce que tu n'as pas compris.
Pour le reste tes noms sont bourrés de #REF!, faire le ménage dedans stp.
Et tes explications sont trop sommaires pour comprendre ce que tu veux, où et avec quoi.
eric
Modifié le 3 sept. 2017 à 01:50
Utilisation du fichier : renseigner le nb de phases et leur noms puis cliquer sur "démarrer" (je préremplis ces champs). Dans la nouvelle feuille (2), pour chaque facteur mettre un "x" lorsqu'ils sont concernés par une phase (je préremplis). La feuille 3 s'ouvre avec un tableau (à partir de la ligne 55) qui expose les facteurs qui sont concernés par des phases. (Il faut effacer les lignes du tableau pour relancer la macro.)
Résultat attendu : Dans le tableau de la feuille 3, au lieu d'avoir le nombre de phase (lorsqu'il est supérieur à 1), je souhaiterais avoir le nom exact de toutes les phases (avec des tirets) pour chaque facteur. Par exemple, pour le facteur AA1, si ce sont les phases a et b qui sont cochées avec un "x", je souhaiterais que le tableau affiche :
- a
- b
et non pas "2 phases" dans la colonne 2 du tableau de la feuille 3 (ligne 55)
Précisions : c'est le module 2 qui est à modifier (les dernières modifications sont à la fin du module 2, notamment pour avoir le résultat "2 phases" qui n'est finalement pas assez précis.
Nouveau lien du fichier : http://www.cjoint.com/c/GIcxThzqJaV
Merci pour ton aide Eric !