boucle + ecriture

  • Initiateur de la discussion Xavier
  • Date de début
X

Xavier

Guest
Rebonjour,


Je cherche actuellement à faire ceci:

Une boucle qui me permettrait de comparer deux colonnes dans deux fichiers distincts (A et B), de telle manière que si A.Cellule = B.Cellule (au niveau du contenu et non pas de sa position ) alors le macro écrit dans une autre cellule de A le contenu d'une cellule x du fichier B ...

Mon plus gros problème réside dans la programmation de la boucle vu que je n'en ai jamais fait ...

Merci bcp
xa
 
@

@+Thierry

Guest
Bonsoir les amis des tableaux !!!

Quelle prise de tête !!!

Bon pour Xavier en First (c'est son fil pov pti gars !!! lol


Tu as l'air de te débrouiller un peu, c'est bien.

Bon alors ta variable "Text1" doit être déclarée "Variant" en Publique Niveau Private Module de ton UserForm.

Pour ce faire (en prime on en met une autre) :
En top de ton Private Module de ton UserForm
Private Text1 As Variant
Private WBCivble As Workbook

(En dehors de toute procédure, en haut, sous "Option Explicit", Option Explicit qui sert à obliger à déclarer les variables)

Bon ensuite ton "CommandButton2_Click()" semble OK, rajoute juste :
Text1 = Application.GetOpenFilename("Tous les Fichiers Excel(*.xls),*.xls", , "A la recherche des fichiers")
If Text1 = False Then Exit Sub
Set WBCible = Workbooks.Open(Text1)

TextBox1.Value = Text1
End Sub
(pour éviter un bug si le User annule, c'est pour ceci que TExt1 est Variant...Boolean ou String, et en même temps on ouvre le WorkBook et on le prend en variable aussi)

OK Numéro 1?

Bon on en arrive au "CommandButton1_Click()"
Don vy que WBCible est déjà déclaré et initialisé.... on est peinard !

Tu supprimes tout ça :
'Là j'aimerai y faire référence au fichier sélectionner précédemment
Set WBCible = Workbooks(Text1)
'Le dataL1 vient du fait que la feuille s'appelle
'toujours comme ca quelque soit le fichier selectionner


NB tu supprimes aussi impérativement la déclaration en début de procédure ( WBCible As Workbook ) car elle va iniber celle déclrée publiquement.....

OK Numéro 2 ?

Si la feuille "dataL1" sera irrémédiablement toujours le nom de la feuille contenue dans le WBCible....... Alors c'est bon, sinon BUG assuré.......On peut aussi référer à l'index de feuille au cas où... :
Set WSCible = WBCible.WorkSheets(1) 'si c'est la première.... dans l'ordre des onglets......

OK Numéro 3 ?

Pour cette partie là :
With CellSource
'là j'avoue que je suis perdu …
'J'aimerais donc écrire dans une cellule de mon fichierprincipal
'le contenu d'une 'cellule (ayant la meme ligne mais pas la meme
'colonne que la CellCible) La colonne serait la E

.Offset(0, 1) = CellCible.Value
.Offset(0, 2) = CellCible.Address
End With

Il te faut comprendre le "OffSet" (Décaler en Fonction FR), c'est une instruction de déplacement primordiale en VBA .....

CellSource étant dans la Colonne "Z"

(NB définie pas toi :
("Z1:Z" & .Range("A65536").End(xlUp).Row) (attention si tu ne travailles pas en tableau prafaitement linéaire "A" pareil que "Z"..... Sinon alors :
("Z1:Z" & .Range("Z65536").End(xlUp).Row)

Donc j'en reviens au OffSet ....... on est en colonne "Z" avec "CellSource " et si j'écris :
CellSource..Offset(0, 1)
celà veut dire que je pars en colonne "AA" en clair :
CellSource(Cellule scannée en "Z").Décalée de 0 Ligne et une Colonne vers la Droite)

Donc si je suis en "Z" et que je veux revenir en "E" je vais écrire :
CellSource.Offset(0, -21)

OK Numéro 4 ?

Voilà si tu es OK sur tous les quatres points, tu viens de faire un grand pas non pas sur la lûne mais dans la planête VBA !!!

Bon pour les questions de Jean-Marie et de Zon je repasserai plus tard car là je viens déjà de faire cramer mes spaguettis avec même la casserole !!! lol

Mais sinon rapidos avant qu'il y ait le feu dans ma cuisine, Jean Marie quand même bien vu pour le "simple" le redim aurait dû être en dehors de la boucle.
Sinon non c'est normal Zéro pour une Dynamic Array, et 1 pour un Tableau Varient de Plage...... Et merci à Zon pour le Transpose, c'était ça "l'astuce" dont je parlais de toi, mais tu n'as pas capté !! ('je crois que Zon a une astuce')...... Je ne voulais par dire "c'est l'astuce de Zon !!!" lol lol... Mais bon tu m'as compris plus bas et c'est ce "bloody" Transpose" que je zappe à chaque fois, le Resize, çà y est, moi y en avoir compris !!! et merci aussi pour l'avertissement de limite à 5700.

Sinon petite coquille dans le correctif interressant du "avancé" pour éviter la première incrémentation de Colonne "0" du "TabDynamicArray" car il faut lire :
TabA(i, 2) = TabB(J, 1) au lieu de :
Tab(A, 2) = TabB(J, 1)
Si on veut essyer de faire tourner ce code..


Bon Appétit avant que les pompiers débarquent (et bonne Soirée)
@+Thierry

PS sacré Post !! lol (sorry)
 
X

Xavier

Guest
Voilà j'ai enfin passé un peu de temps dessus et je préfère la simplicité du Vlookup ... je suis sincèrement désolé mais j'y suis tout de meme arrivé par cette fonction. Comme Thierry l'a dit plus haut vous vous etes tout de meme bien maré non .... et puis si j'ai envie de faire une boucle je sais que je trouverai toute la doc sur ce file.
Mais tout de meme je suis un peu désolé de vous avoir fait travaillé pour presque rien ... ce sont mes restes de TurboPascal qui m'ont fait penser à une boucle ( à le bon vieux temps ).

Xa
 

Discussions similaires

Statistiques des forums

Discussions
314 208
Messages
2 107 290
Membres
109 796
dernier inscrit
aelgar