Attribution par idclient

Ditch3122 Messages postés 4 Date d'inscription samedi 26 mai 2012 Statut Membre Dernière intervention 26 juin 2012 - 26 juin 2012 à 18:51
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 28 juin 2012 à 21:45
Bonjour,

J'ai besoin d'aide pour un code VBA, j'ai sur la feuille "donnees" une centaine de lignes dont voici un exemple:



J'aimerais obtenir le résultat suivant sur une autre feuille "resultat":




La liste des idclient se trouve en colonne A et j'aimerais leur attribuer la concaténation du numéro et du statut, 1 par case.


Merci d'avance pour votre aide.

12 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juin 2012 à 20:10
Bonjour,
Comme presque toujours, je ne te viendrai personnellement pas en aide tant que je ne t'aurai pas vu "t'y mettre" suffisamment :
Je vais donc me contenter, à ce stade de simple demande sans avoir rien tenté, de donner des pistes (ce que je ferais moi-même) :
1) trier sur la colonne C
2) copier les colonnes A et B à partir de la colonne D
3) détruire les colonnes A et B
4) en boucle sur nouvelle colonne A , en commençant par le bas :
--- Si ligne au-dessus de même valeur : faire une concaténation et utiliser Offset
Je tiens à te voir commencer. Mon aide sera proportionnelle à l'effort réel que je constaterai.
Bon effort, donc, d'abord .


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Ditch3122 Messages postés 4 Date d'inscription samedi 26 mai 2012 Statut Membre Dernière intervention 26 juin 2012 1
26 juin 2012 à 20:56
Bonsoir,

Petite précision, le nombre de colonnes ne se limite pas à 3 mais a une bonne vingtaine, j'aurai certainement besoin de reprendre des informations dans d'autres colonnes par la suite, j'étais donc parti sur un tableau:

Sub test()
Dim Tableau()
Dim a As Integer
Sheets("donnees").Select
With ActiveSheet.Range("A1").CurrentRegion
    ReDim Tableau(.Rows.Count, .Columns.Count)
    Tableau = .Value
End With



For a = 2 To Range("B" & Rows.Count).End(xlUp).Row

    If Tableau(a, 2) <> "" Then
        statut = Tableau(a, 2) & vbLf & Tableau(a, 1) & vbLf & Tableau(a, 3) 'ajout Tableau(a, 3) pour voir si données dans la bonne cellule
        idclient = Tableau(a, 3)
   
        'Debug.Print statut
    End If
Next a

Sheets("resultat").Select


???

End Sub


Avec des boucles For, j'ai réussi à afficher 11111encours 44444encours 55555annule mais tout dans la case B2 au lieu de B2, C2, D2
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juin 2012 à 21:12
Que le nommbre de colonnes soit 2, 3 ou x, ne change rient au problème.
Je ne t'ai pas vu utiliser ce vers quoi je t'ai guidé.
Mais hje comprends . Tu Guides ? ===>> guide-toi donc, dans ce cas.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Ditch3122 Messages postés 4 Date d'inscription samedi 26 mai 2012 Statut Membre Dernière intervention 26 juin 2012 1
26 juin 2012 à 21:29
Bon, il me semblait être dans la catégorie de forum pour les débutants et je pense que ce mot dit bien ce qu'il veut dire sinon j'aurai choisi une autre catégorie...

Concernant la proposition que tu fais, cela ne m'intéresse pas de supprimer des colonnes après concaténation car comme je l'ai expliqué dans le poste précédent, j'aurai certainement besoin d'aller récupérer ces informations.

Je ne comprends pas non plus le fait que tu demandes de voir mon code actuel si c'est pour me reprocher de l'avoir fait comme ça et de vouloir "guider"...

Je vais donc me "guider" vers un autre forum avec une vraie catégorie "débutant" ou j'espère ne pas tomber ce genre de réponse.

Bonne soirée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juin 2012 à 22:35
Bon (comme tu dis).
Je ne vois rien, dans ce que je t'ai dit (et que tu n'as pas tenté) qui te ferait perdre les données d'origine ! Il te suffit de les copier sur la feuille "résultat", puis de traiter la feuille résultat.
Etre débutant ne veut pas dire être en droit d'attendre un code tout cuit. Et ce d'autant que je t'avais donné des pistes (tu n'as même pas tenté le premier pas).
Qu'importe. Il me reste à te souhaiter bonne chance dans tes démarches, ce que je fais.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 juin 2012 à 18:39
Bonjour, Ditch,
A te "voir" revenir sur ce forum pour y chercher ta réponse, je comprends que tu ne l'as pas trouvée ailleurs ...
Je vais donc me "guider" vers un autre forum avec une vraie catégorie "débutant" ou j'espère ne pas tomber ce genre de réponse.

Tu sais quoi, alors ? Je vais te le montrer, ce code (il est écrit depuis mardi dernier) , mais pas avant deux jours de plus, de sorte à te permettre d'obtenir sur les forums de tes espoirs la réponse espérée.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2012 à 17:34
Bon. Il me faut libérer ma machine de ce projet.
Voilà, pour ceux que cette "affaire" intéressait (apparemment plus Ditch) et qui souhaiteraient en connaître la solution.
Je pars de l'exemple donné (données tells que montrées dans l'exmple de Ditch, en colonne A à C et à partir de la ligne 2).
Données : dans la feuille "Données"
Résultat transformé : dans la feuille "Résultat"
Principe : exactement celui que j'avais exposé par mon tout premier message.
Je l'ai volontairement "corsé" un peu pour montrer, dans la foulée, comment on peut également traiter de haut en bas (ce sera facile à comprendre) :
Dim pl_sup As Range, derlig As Long, ou As Long, i As Long, dercol As Long
   Application.ScreenUpdating = False
   With Sheets("Données")
     derlig = .Range("A" & Rows.Count).End(xlUp).Row
     .Range("A2:C" & derlig).Copy Destination:=Sheets("Résultat").Range("A2")
   End With
   With Sheets("Résultat")
     .Range("A2:C" & derlig).Sort key1:=.Range("C2:C" & derlig)
     .Range("A2:B" & derlig).Copy Destination:=.Range("D2")
     ou = 2
     For i = 3 To derlig + 1
     If InStr(.Cells(ou, 4).Value, Chr(10)) 0 Then .Cells(ou, 4).Value .Cells(ou, 4).Value & Chr(10) & .Cells(ou, 5).Value
     dercol = .Cells(ou, Columns.Count).End(xlToLeft).Column + 1
     If .Range("C" & ou).Value = .Range("C" & i).Value Then
       If pl_sup Is Nothing Then
         Set pl_sup = .Range("C" & i)
       Else
         Set pl_sup = Union(pl_sup, .Range("C" & i))
       End If
       .Cells(ou, dercol).Value = Range("D" & i).Value & Chr(10) & .Range("E" & i).Value
     Else
       ou = i
     End If
    Next
    pl_sup.EntireRow.Delete
    Set pl_sup = Union(.Columns(1), .Columns(2), .Columns(5))
    pl_sup.EntireColumn.Delete
    .Range("A1").Value = "CLIENT"
   End With
   Application.ScreenUpdating = True

Voilà voilà !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2012 à 18:20
Gaffe (je ne sais pas comment un point a sauté) ====>> corriger par l'ajout du point en rouge, ici :


End If
.Cells(ou, dercol).Value = .
Range("D" & i).Value & Chr(10) & .Range("E" & i).Value
Else

Car sinon on perd un élément de concaténation en chemin
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
28 juin 2012 à 18:52
Bonjour,

C'est même mieux fait que sur l'exemple de Ditch3122 puisque tu classes les numéros du plus petit au plus grand (ligne 4)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2012 à 19:36
Bonjour, banana32,
Merci, mais bof ... (je lui avais dit d'emblée de faire ainsi).
S'il passe par là (et se montre en intervenant), je lui expliquerai pourquoi je ne le laissais pas continuer avec l'idée d'un tableau dynamique, qui l'aurais nécessairement conduit à un redim preserve ralentisseur, puisque le nombre de colonnes s'accroissait. Plus gênant encore : il aurait eu un tableau inutilement surdimensionné en colonnes (imaginons un idclient avec 200 numéros à lui tout seul, alors même que les autres n'en auraient que 5 au maximum ! ===>> il aurait fallu un tableau de 202 colonnes à cause de ce seul client ! ==>> gênant + lenteurs accrues + mémoire plus importante, etc ...) Et dieu est témoin de ce que je préfère en général utiliser les tableaux dynamiques.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Utilisateur anonyme
28 juin 2012 à 20:12
Le gros problème de VBA pour excel, c'est la facilité relative qu'offre l'enregistreur de macros, certes pratique mais qui alourdit le code d'une multitude de lignes inutiles. Le tout réalisé par programmation séquentielle, longue et pénible à analyser.
Plutôt handicapant pour un débutant finalement, à moins de l'utiliser pour de toutes petites opérations dont on ne sait écrire le code.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2012 à 21:45
Ce que tu dis est tellement vrai !
C'est probablement la raison pour laquelle je ne l'ai que très rarement utilisé, y compris débutant. Le reproche que lui fait l'électron libre que je suis et resterai toute ma vie, c'est le peu de place qu'il laisse à l'esprit créatif personnel (encore que "personnel" et "créatif" = redondance).
Il vaut mieux s'attacher (et prendre pour cela le temps qu'il faut, plutôt que de vouloir immédiatement "développer") à étudier la structure des choses, la cerner, l'épier, la violer, quoi, pour finalement communier avec l'outil tout en en restant maître. Je n'ai jamais rien trouvé d'écrit guidant vers ce genre de démarche et le déplore.
Je crois que je suis fou.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous