Pour Thierry ou Hervé svp

P

papou

Guest
Bonjour à tous,
j'ai essayer de trouver hier dans les anciennes réponses du forum et je n'ai pas trouver exactement ce que je veux.
SVP pouvez vous me donner un code pour:
ajouter une feuille à une autre dans 1 troisième
et ensuite retirer les doublons
Feuil1('A2:K200') + Feuil2('A2:K200') =
Feuil3('A2:K500') puis trier et retirer les doublons, et remplir ma combo
Private Sub papou_Click()
Dim lign As Integer
Dim x As Byte
lign = papou.ListIndex + 2
For x = 1 To 15
Feuil4.Cells(2, x) = Feuil3.Cells(lign, x)
Next
End Sub
si vous pouvez m'aider, j'ai vu que quand des problèmes de ce type sont demandés c'est toujours vous deux qui répondez, alors si vous pouvez me pondre un code ce sera avec plaisir
merci d'avance
Papou
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Papou, Jean Marie, le Fil, le Forum

Rapidos, en reprenant l'algo de Chti en Option Base 1 ;)


Sub Transfert()
Dim TabTemp As Variant
Dim TabResult() As Variant
Dim DerLgn As Integer, L As Integer, x As Integer
Dim Dercol As Byte, C As Integer, C2 As Integer
Dim Ws As Worksheet
Dim MyString As String
Dim Tmp1 As String, Tmp2 As Variant, Tmp3 As Variant, Tmp4 As String, Tmp5 As Variant, Tmp6 As Variant
Dim Tmp7 As String, Tmp8 As Variant, Tmp9 As Variant, Tmp10 As String, Tmp11 As Variant
Dim Col_String As Collection
Dim Tablo As Variant


Set Col_String = New Collection

For Each Ws In Worksheets
   
If Ws.Name = 'Feuil1' Or Ws.Name = 'Feuil3' Then
       
With Ws
            DerLgn = .Range('A65536').End(xlUp).Row
            TabTemp = .Range(.Cells(2, 1), .Cells(DerLgn, 11)).Value
           
             
For L = 1 To UBound(TabTemp, 1)
                x = x + 1
                 
ReDim Preserve TabResult(11, x)
                   
For C = 1 To UBound(TabTemp, 2)
                        TabResult(C, x) = TabTemp(L, C)
                   
Next C
             
Next L
       
End With
   
End If
Next

For C = 1 To UBound(TabResult, 2)
 
For C2 = C + 1 To UBound(TabResult, 2)
     
If TabResult(2, C2) < TabResult(2, C) Then
     
        Tmp1 = TabResult(1, C2): Tmp2 = TabResult(2, C2): Tmp3 = TabResult(3, C2): Tmp4 = TabResult(4, C2)
        Tmp5 = TabResult(5, C2): Tmp6 = TabResult(6, C2): Tmp7 = TabResult(7, C2): Tmp8 = TabResult(8, C2)
        Tmp9 = TabResult(9, C2): Tmp10 = TabResult(10, C2): Tmp11 = TabResult(11, C2)
       
          TabResult(1, C2) = TabResult(1, C): TabResult(2, C2) = TabResult(2, C): TabResult(3, C2) = TabResult(3, C)
          TabResult(4, C2) = TabResult(4, C): TabResult(5, C2) = TabResult(5, C): TabResult(6, C2) = TabResult(6, C)
          TabResult(7, C2) = TabResult(7, C): TabResult(8, C2) = TabResult(8, C): TabResult(9, C2) = TabResult(9, C)
          TabResult(10, C2) = TabResult(10, C): TabResult(11, C2) = TabResult(11, C)
         
          TabResult(1, C) = Tmp1: TabResult(2, C) = Tmp2: TabResult(3, C) = Tmp3
          TabResult(4, C) = Tmp4: TabResult(5, C) = Tmp5: TabResult(6, C) = Tmp6
          TabResult(7, C) = Tmp7: TabResult(8, C) = Tmp8: TabResult(9, C) = Tmp9
          TabResult(10, C) = Tmp10: TabResult(11, C) = Tmp11
         
     
End If

 
Next
Next

On Error Resume Next
   
For C = 1 To UBound(TabResult, 2)
        MyString = TabResult(1, C) & '#' & TabResult(2, C) & '#' & TabResult(3, C) & '#' & TabResult(4, C) & '#' & _
        TabResult(5, C) & '#' & TabResult(6, C) & '#' & TabResult(7, C) & '#' & TabResult(8, C) & '#' & TabResult(9, C) & '#' & _
        TabResult(10, C) & '#' & TabResult(11, C)
     
        Col_String.Add MyString, CStr(MyString)
   
   
Next
On Error GoTo 0
Err.Clear

   
With Worksheets('Feuil4')
                .Range('A2:K700').ClearContents
       
For L = 1 To Col_String.Count
          DerLgn = .Range('A65536').End(xlUp).Row + 1
                Tablo = Split(Col_String(L), '#')
                    .Cells(DerLgn, 1).Resize(1, UBound(Tablo, 1)) = Tablo
       
Next L
           
ReDim Preserve TabResult(11, DerLgn)
                  TabResult() = Application.Transpose(.Range('A2:K' & DerLgn).Value)
                 
With UserForm1.pascal
                        .ColumnCount = 11
                        .ColumnWidths = '00;118;118;00;00;118;00;00;00;00'
                        .Column() = TabResult
               
End With
   
End With
UserForm1.Show
End Sub

Bonne Journée
[ol]@+Thierry[/ol]
 

Hervé

XLDnaute Barbatruc
bonjour tout le monde

Je profite de se post pour poser une question à l'ami thierry. :)

Thierry, je t'ai déjà vu utiliser ce type de code pour trier des 'tabtemp' (tu sais comme j'ai l'habitude de décortiquer tes codes.) :

For C = 1 To UBound(TabResult, 2)
For C2 = C + 1 To UBound(TabResult, 2)
If TabResult(2, C2) < TabResult(2, C) Then

Tmp1 = TabResult(1, C2): Tmp2 = TabResult(2, C2): Tmp3 = TabResult(3, C2): Tmp4 =
TabResult(4, C2)
Tmp5 = TabResult(5, C2): Tmp6 = TabResult(6, C2): Tmp7 = TabResult(7, C2): Tmp8 =
TabResult(8, C2)
Tmp9 = TabResult(9, C2): Tmp10 = TabResult(10, C2): Tmp11 = TabResult(11, C2)

TabResult(1, C2) = TabResult(1, C): TabResult(2, C2) = TabResult(2, C): TabResult(3, C2) =
TabResult(3, C)
TabResult(4, C2) = TabResult(4, C): TabResult(5, C2) = TabResult(5, C): TabResult(6, C2) =
TabResult(6, C)
TabResult(7, C2) = TabResult(7, C): TabResult(8, C2) = TabResult(8, C): TabResult(9, C2) =
TabResult(9, C)
TabResult(10, C2) = TabResult(10, C): TabResult(11, C2) = TabResult(11, C)

TabResult(1, C) = Tmp1: TabResult(2, C) = Tmp2: TabResult(3, C) = Tmp3
TabResult(4, C) = Tmp4: TabResult(5, C) = Tmp5: TabResult(6, C) = Tmp6
TabResult(7, C) = Tmp7: TabResult(8, C) = Tmp8: TabResult(9, C) = Tmp9
TabResult(10, C) = Tmp10: TabResult(11, C) = Tmp11

End If

Next
Next


Peux-t'on en 'remplacement' utiliser une boucle du type :

For C = 1 To UBound(tabresult, 2)
For C2 = C + 1 To UBound(tabresult, 2)
If tabresult(2, C2) < tabresult(2, C) Then
For k = 1 To UBound(tabresult)
tmp1 = tabresult(k, C2)
tabresult(k, C2) = tabresult(k, C)
tabresult(k, C) = tmp1
Next k
End If
Next
Next

d'avance merci pour cette précision.

salut
 
P

Papou

Guest
Bonjour Thierry et à tous,
au secour, j'ai changé le nom dans l'onglet de de mes feuilles et cela ne marche plus, à l'ouverture il me dit erreur 9 l'indice n'appartient pas à la sélection!!!!!!
je fais quoi je change quoi et ou ?
merci d'avance
Papou
 
P

Papou

Guest
Bonjour Thierry Hervé Chti et tous les autres
je refais cette réponse car je ne vois pas celle que j'ai fait il y a 2 heures, je vous disais bravo à tous, car cela marche bien je vérifié tout et je vous dirai après mais le problème de trait- d'union c'est fini, cela marche.
j'ai un nouveau souci j'ai changé le nom des feuilles dans l'onglet et maintenant il me dit erreur 9 indice n'appartient pas à la selection????
Je fais quoi et ou ?,
merci d'avance
Papou
 
P

Papou

Guest
Bonnsoir Thierry, Hervé Chti , et tous les autres,
j'ai trouvé pour changer les noms des onglets, mais habituellement il n'y a pas à changer les noms dans les codes?
Bref cela marche
Pourquoi à l'ouverture, mon user s'ouvre et si je clique, je n'ai que ma feuil1 et si je ferme l'userform, que je clique sur mon bouiton pour l'ouvrir a nouveau là c'est bon j'ai toute ma liste complète?
à savoir que la feuil3 c'est une requête qui la remplie
Si vous savez comment je peux éviter la manip merci de votre explication
amicalement à tous et encore merci pour ce travail
Papou
 

ChTi160

XLDnaute Barbatruc
bonsoir Papou
Salut Hervé
bonsoir le fil
bonsoir le Forum
pour Papou peux tu mettres un fichier exemple pour que l'on puisse voir Merci car présenté comme cela (je n'ai pas encore regardé pour le problème de transfert avec les cases vides lol)
pour Hervé tu as testé ta macro ??? moi pas encore,je ne l'ai pas encore assimilée Lol
merci
bonne Soirée
 
P

Papou

Guest
Bonsoir Chti et tous les autres,
tu voulais un bout de fichier pour quel sujet Chti,excuses moi mais je ne sais plus ou tu en est resté, j'ai eu ce matin de Thierry un code que j'ai éssayé, il m'a un peu posé des problèmes de nom de feuille mais à cette heure-ci tout est a peu près bon, je n'ai pas fini mais je te dirai.
Le tri est parfait, le seul problème qui persiste, c'est à l'ouverture de mon classeur, j'ai l' userform qui s'ouvre est là si je veux faire une selection, je n'ai que les adresses de la feuil1!!! Pourquoi? et si je ferme l'userform et que je l'ouvre a nouveau là j'ai toutes mes adresses, triées, sans doublons le bonheur!! (de plus j'ai ma liste complète en feuil4 le paradis tout simplement)
Merci pour tout Chti, il reste à régler le problème du bouton2 mais je reviendrai lorsque j'aurai tout testé le reste.
trés amicalement et bonne soirée
Papou
 

ChTi160

XLDnaute Barbatruc
Arfffffffff
grosse boulette Lol
j'ai lu les postes à l'envers donc je n'avais pas vu Que mon Ami @+Thierry était venu à mon secours Lol
donc il a comme je l'avais fais mais avec '!' le problème du tiret lol
pour ce qui est de ton problème il faut peut être si j'ai bien compris tes explications que ta requête soit lancée aussi à l'ouverture du fichier comme lorsque tu agis sur le bouton car si ta feuille 3 est vide à l'ouverture du classeur tu n'auras rien dans le Userform ?????si ta requête est faite à l'ouverture et la macro lancer après ,la peut être auras tu le tout
est ce la réponse !!!!!Lol
bonne fin de Soirée
 
P

Papou

Guest
Rebonsoir Chtie et les autres
Oui c'est cela ma feuille est vide au départ, je lance ma requête à l'ouverture mais je pense que la macro va plus vite enfin quelle est finie avant même que ma requête ai chargée ma feuille
pour le bouton 2 si il pouvait ne pas s'afficher avec une des adresses de la liste feuille 4 ce serait trés bien.
merci de ta réponse de ce soir et si tu as une méthode pour charger la requête avant de lancer la macro je suis preneur
amicalement et bonne soirée
Papou
 

ChTi160

XLDnaute Barbatruc
re
arff bon je ne suis pas un expert en requête (je Salue les Michel Lol)
mais dans la procèdure de ta requête(je ne vois pas car je n'ai pas le fichier lol) tu ajoute en fin le nom de ta macro ex Transfert celle ci se lanceras à la fin Lol peut être avec un DoEvents ????
pour ce qu est du bouton je ne comprends pas ta demande si tu peux expliquer merci
le bouton doit s'afficher ou ne pas s'afficher quand pourquoi ????
enfin Bonne nuit Lol

Message édité par: Chti160, à: 27/04/2006 22:22
 
P

Papou

Guest
Bonjour Chti,et à tous,
Pour la macro je n'ai pas compris, pour le fichier je ne peux pas te l'expédier, car il et dans deux logiciel un de compta et un de facturation, et la requête que j'ai faite récupère ce que je veux dans ces deux logiciel.
Mais cela marche bien la requête, apr contre mettre transfert après avec Doevents, oui mais à la fin de quoi?
Pour le bouton qui s'affiche ou pas c'est simple, si dans la feuil2 row2 j'ai une adresse déjà présente dans ma feuil4(celle que tu n'aimes pas) je veux que mon bouton soit invisible.
Ce bouton sert à ajouter des adresses libres lors du remplissage de la ligne2 de la feuil2, des que le minimum demandé et rempli, là, je veux avoir mon bouton pour sauvegarder en feuil1
Si le bouton est présent avec une autre adresse, j'ai le risque d'ajouter dans ma feuil1 une adresse déjà présente et par ce fait d'avoir un doublon dans ma feuil1
J'espère que tu as compris ce que je veux expliquer
bonne journée à + avec l'explicationd e ces deux petits soucis
Amicalement
Papou
 

ChTi160

XLDnaute Barbatruc
Salut Papou
bonjour le fil
Bonjour le Forum
tout d'abord mi la Feuil4 je n'ai rien contre
juste que ne sachant pas ce que tu veux ni comment Lol on interpréte on essaye toujours de simplifier
pour ce qui est de la requête et Doevents j'aimerai que tu me dise comment ce déroule ta procèdure tu as une macro qui importe des données à partir de deux logiciels c'est ca donc tu pourrais si c'est comme cela que ca se passe mettre le nom de la macro qui transfere après tout cela
Sub Macro()
ImporteComptat 'nom de la Macro qui importe du logiciel de Comptat
ImporteFactur 'Nom de la Macro qui importe du Logiciel de Facturation
Transfert 'ici la macro qui transfert
End Sub
Voilà ce que je veux dire .
Pour ce qui est du DoEvents tu regardes dans l'aide VBA peut être peut on s'en servir
pour ce qui est du Bouton tu peux tester si la cellule .....Range('A2')='' si oui
Mon Bouton Visible =Oui sinon Non visible
je verrai cela ce soir
Bonne journée

Message édité par: Chti160, à: 28/04/2006 07:19
 
P

Papou

Guest
Bonjour Chti et tous,
non c'est pas comme cela, si tu veux j'ai dans ma feuille 3 une requête enregistrée et qui s'exécute je ne sais pas comment car je ne le vois pas, sauf dans la feuil3 pour l'exécuter dans la feuil3 j'avais fait, Données, Données externes, exécuter une requête enregistrée, là j'ai donné ou elle était enregistrée, puis j'ai fait ok, c'est tout ce que j'ai fait mais pour te dire ou elle se trouve dans mon classeur???
je n'en sais rien. Elle est obligatoirement là puisque quand j'ouvre mon classeur, ma feuille3 se remplie immédiatement.
Bref c'est pas trés grave car maintenant j'ai une liste propre triée sans doublons, alors les deux petits soucis qui restent, si on trouve c'est bien autrement je m'en passerai.
Mais vu ce que toi et Thierry vous avez fait, je sais que obligatoirement vous pouvez faire cela, car c'est bien moins compliqué que ce que vous avez fait
Je te laisse et si tu as une idée!!!!
Amicalement
Papou
 

ChTi160

XLDnaute Barbatruc
Salut Papou
Bonsoir le fil
Bonsoir le Forum

peut être une solution

eh oui enregistrer ta requête pour quelle face partie d'une procèdure ainsi plus de déclenchement automatique non controlée

sait on jamais je pense que l'on peux enregistrer ta requête et ainsi gérer son déclenchement lol

bonne fin de Soirée
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote