DECALER | ||
---|---|---|
Inscription: 31/12/2008
Messages:
55
Système d'exploitation: PC Version Excel utilisée: excel 2003 |
Posté le : 04-10-2010 00h43
bonjour le forum
j'ai des données dans la cellule de ce type "50+42+34+56+12" j'aimerais qu'a la place du + chaque chiffre soit decale d'une cellule a droite. ex:en K2 le 50 en L2 le 42 en M2 le 34..... le code vba ou se trouve le + est: For j = 0 To bs s =s & IIf (i \ (2 ^ j) Mod 2, oDat(j) & "+", "") Next j Par quoi faudrait-il remplacer "+","pour décaler d'une colonne vers la droite. merci |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
Système d'exploitation: PC Version Excel utilisée: 97 à 2016 |
Posté le : 04-10-2010 00h52
Bonjour jad73,
Pourrais-tu joindre un classeur exemple s'il-te-plaît, comme ça les choses seraient plus claires et plus simples. Pour ce faire consulte la page Composer un message à la rubrique Ajouter une pièce jointe. Cordialement, Guy |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 31/12/2008
Messages:
55
Système d'exploitation: PC Version Excel utilisée: excel 2003 |
Posté le : 04-10-2010 11h17
bonjour le forum,guy
voici le fichier avec en h2 mon souhait merci |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
Système d'exploitation: PC Version Excel utilisée: 97 à 2016 |
Posté le : 04-10-2010 12h15
Bonjour jad73,
Vu l'heure à laquelle j'ai parcouru le code (5:10h), je n'ai pas pris la peine d'en faire l'exégèse. Cependant mon petit doigt me dit qu'il y a là vigoureux ménage à faire. Bref. J'ai modifié la procédure toto_1() ainsi : - nouvelle variable de type Range ' Plage des résultats For j = 0 To bs ' Si lors de la distribution des valeurs sont inscrites dans les cellules des résultats Plus de détails suivront si tu as besoin d'explications. Pour l'heure ce brouillon devrait être une piste à suivre. Cordialement, Guy P.S. J'ai monté ce classeur avec Excel 2010. M'avertir si il ne s'affiche pas correctement dans une version antérieure, sait-on jamais. |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 31/12/2008
Messages:
55
Système d'exploitation: PC Version Excel utilisée: excel 2003 |
Posté le : 05-10-2010 17h40
bonjour guy,le forum
n'étant pas très doué en vba je suppose qu'il fallait recopier les ligne de ton code dans le mien;c'est ce que j'ai fait,j'ai gardé les anciennes lignes avec un ' devant lorsque je clique sur calcul j'ai un message avec"erreur de compilation,variable non définie",la ligne "bs = -1" est en bleu. voici le code: Sub toto_1(cible As Range, data As Range, tmin%, tmax%) Dim mgPlageRes As Range 'Dim oDat(), v#, n%, dn%, bs%, i&, j%, tmp#, s$, oCel As Range, oColl As New Collection bs = -1 For Each oCel In data If Not IsEmpty(oCel) Then bs = bs + 1: ReDim Preserve oDat(bs): oDat(bs) = oCel.Value Next oCel tmax = WorksheetFunction.Min(bs, Abs(tmax) - bs * (tmax = 0)) tmin = WorksheetFunction.Min(tmax, WorksheetFunction.Max(1, tmin)) With cible v = Round(cible.Value, 5) If Not IsEmpty(.Offset(1, 0)) Then .Offset(1, 0).Resize(.End(xlDown).Row - 1, 1).ClearContents If bs > -1 Then For i = 0 To bs - 1 For j = i + 1 To bs If oDat(i) < oDat(j) Then tmp = oDat(i): oDat(i) = oDat(j): oDat(j) = tmp Next j Next i For i = 0 To 2 ^ (bs + 1) - 1 tmp = 0 n = 0 For j = 0 To bs dn = i \ (2 ^ j) Mod 2 tmp = tmp + oDat(j) * dn n = n + dn Next j If Round(tmp, 5) = v Then If (tmin <= n) * (n <= tmax) Then s = "=" For j = 0 To bs s = s & IIf(i \ (2 ^ j) Mod 2, oDat(j) & ";", "") 's = s & IIf(i \ (2 ^ j) Mod 2, oDat(j) & "+", "") Next j Application.DisplayAlerts = False On Error Resume Next 'plage des résultats est posée Set mgPlageRes = .Offset(1, 0).Resize(oColl.Count, 1) 'oColl.Add Item:=Left$(s, Len(s) - 1), Key:=Left$(s, Len(s) - 1) 'les données y sont déposées mgPlageRes.Value = oDat 'les données sont distribuées dans les colonnes adjacentes For Each oCel In mgPlageRes.Cells oCel.TextToColumns Destination:=oCel.Offset(0, 1), DataType:=xlDelimited, consecutivedelimiter:=True, semicolon:=True On Error GoTo 0 End If End If Next i If oColl.Count Then ReDim oDat(1 To oColl.Count, 0) For i = 1 To oColl.Count oDat(i, 0) = oColl(i) Next i .Offset(1, 0).Resize(oColl.Count, 1).Value = oDat End If End If End With End Sub Private Sub CommandButton1_Click() 'Syntaxe : 'toto_1 Cellule contenant le nombre à atteindre, Zone des données, Nb.minimum de termes, Nb.maximum de termes toto_1 [J1], Range("A5:H6"), [B2], [B3] End Sub 'Private Sub Worksheet_Change(ByVal Target As Range) ' If Target.Address(0, 0) = "N1" Then toto 'End Sub merci |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
Système d'exploitation: PC Version Excel utilisée: 97 à 2016 |
Posté le : 05-10-2010 23h46
Bonjour jad73,
Quelques points importants :
'Dim oDat(), v#, n%, dn%, bs%, i&, j%, tmp#, s$, oCel As Range, oColl As New Collection Enfin, pourrais-tu expliquer avec des mots ce que ta procédure bricole au juste Cordialement, Guy |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 31/12/2008
Messages:
55
Système d'exploitation: PC Version Excel utilisée: excel 2003 |
Posté le : 06-10-2010 16h01
bonjour guy,le forum
milles excuses guy,je n'avais pas fait attention au fichier joint,je l'ai ouvert et c'est parfait,juste ce qu'il me fallait,merci. quand au but du programme c'est a partir d'une serie de chiffres(A5:H6) obtenir des combinaisons qui totalise la somme du critere(J1) avec pour longueur les criteres(B2 a B3).Les combinaisons étant en K2 je peux maintenant essayer d'adapter d'autres programmes pour éliminer les doublons,supprimer les combinaisons qui ont suivant leur longueur 4,5 ou 6 chiffres identiques. Merci encore |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 31/12/2008
Messages:
55
Système d'exploitation: PC Version Excel utilisée: excel 2003 |
Posté le : 06-10-2010 22h11
bonjour guy,le forum
j'ai un petit problème c'est que quand je fais un deuxieme calcul avec des combinaisons de longueur différentes, les anciennes données ne sont pas éffacees. Que faut-il ajouter dans le code. merci |
|
|
Re: DECALER | ||
---|---|---|
Inscription: 09/01/2008
De Montréal, Québec
Messages:
463
Système d'exploitation: PC Version Excel utilisée: 97 à 2016 |
Posté le : 07-10-2010 00h12
Bonjour jad73,
Il aurait été indiqué de me fournir un petit classeur exemple mais, bon, j'y ai été au pifomètre avec quelques hypothèses. À savoir :
Alors voilà un petit classeur où la plage des résultats est effacée à chaque calcul. Cordialement, Guy
Edité par Guy le 07/10/2010 01:27:54
|
|
|
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
Qui consulte actuellement ce sujet ?
1 Utilisateur(s) anonymes