probleme sur une programation vba

probleme sur une programation vba - VB/VBA/VBS - Programmation

Marsh Posté le 23-11-2004 à 23:02:50    

bonsoir,
j'ai un souci pour faire une programation, je souhaiterais programmer un tableau dans la feuille 1 qui renvoie les donnees dans differentes cellules de la feuille 2. actuellement ma programation utulise le programme que le dernier inscrit soit pris en compte, mais je ne peut pas revenir en arriere, pour etre plus clair voici ma prog :
Private Sub CommandButton1_Click()  
Dim L As Long, Dernier  
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 1).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(4, 2).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 10).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(6, 2).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 9).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(7, 2).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 8).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(8, 8).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 7).Value  
Exit For  
 
Sheets("Identification" ).PrintOut  
Sheets("DOCY011C" ).PrintOut  
 
End If  
Next L  
Worksheets("Identification" ).Cells(2, 2).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 6).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(4, 8).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 11).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(3, 8).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 12).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(5, 8).Value = Dernier  
Sheets("Identification" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 1).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(7, 6).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 9).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(9, 6).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 7).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(3, 3).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 10).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(9, 2).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 6).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(1, 8).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 4).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(7, 2).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 11).Value  
Exit For  
End If  
Next L  
Worksheets("DOCY011C" ).Cells(5, 2).Value = Dernier  
Sheets("DOCY011C" ).Select  
 
Sheets("Identification" ).PrintOut  
Sheets("DOCY011C" ).PrintOut  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 4).Value  
Exit For  
End If  
Next L  
Worksheets("fiche recap" ).Cells(868, 2).Value = Dernier  
Sheets("fiche recap" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 12).Value  
Exit For  
End If  
Next L  
Worksheets("fiche recap" ).Cells(868, 1).Value = Dernier  
Sheets("fiche recap" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 11).Value  
Exit For  
End If  
Next L  
Worksheets("fiche recap" ).Cells(868, 3).Value = Dernier  
Sheets("fiche recap" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 7).Value  
Exit For  
End If  
Next L  
Worksheets("fiche recap" ).Cells(868, 5).Value = Dernier  
Sheets("fiche recap" ).Select  
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 3).Value  
Exit For  
End If  
Next L  
Worksheets("fiche recap" ).Cells(868, 7).Value = Dernier  
Sheets("fiche recap" ).Select  
End Sub  
voila cette programtion est assez longue peut on la simplifier?, sinon mon soucis c soit de cree un autre bouton qui reprend les meme parametres mais que je puisse choisir la ligne(ou un nemro que j'aurais atribue)et que les donnees(les differents colonne) de la ligne trouve se renvoie au differents documents a leur emplacement.
Ou alors completer cette macro pour le faire?
Merci d'avance pour votre aide, je suis pas tres cale en prog je fais juste ca pour mon boulot.
cordialement.
julien.


---------------
julien.
Reply

Marsh Posté le 23-11-2004 à 23:02:50   

Reply

Marsh Posté le 24-11-2004 à 12:50:49    

tu t'es en effet bien compliqué la vie ( en tout cas , il y a plus rapide que de tester chaque cellules )  
 
Selection.End(XlUp) permet d'atteindre la limite de la liste en partant du bas vers le haut ( la limite vide/non vide pour etre plus précis )
 
Selection.End(XlDown) fait la meme chose en partant du haut vers le bas
 
idem avec XlRight et XlLeft
 
sheet("Reception" ).cells(65236,1).select  
Selection.End(xlUp).Select  
Sheet("Identification" ).cells(4,2)=Activecell  
 
sheet("Reception" ).cells(65236,10).select  
Selection.End(xlUp).Select  
Sheet("Identification" ).cells(6,2)=Activecell  
 
sheet("Reception" ).cells(65236,9).select  
Selection.End(xlUp).Select  
Sheet("Identification" ).cells(7,2)=Activecell
 
etc ...


Message édité par Profil supprimé le 24-11-2004 à 12:57:42
Reply

Marsh Posté le 25-11-2004 à 22:07:07    

bonsoir,
desole j'ai essaye ta solution juste aujourd'hui, et malheureusement je n'arrive pas a la faire fonctionner a chaque fois que je retire IF et for ca m'indique que il y a une erreur sur le bouton.
comment faire?
Merci d'avance pour ton aide.
cordialement.
julien.


---------------
julien.
Reply

Marsh Posté le 25-11-2004 à 22:16:31    

tu doit remplacer chacun de tes blocs :
 
For L = 65236 To 262 Step (-1)  
If Worksheets("Reception" ).Cells(L, 1).Value <> "" Then  
Dernier = Worksheets("Reception" ).Cells(L, 1).Value  
Exit For  
End If  
Next L  
Worksheets("Identification" ).Cells(4, 2).Value = Dernier  
Sheets("Identification" ).Select  

 
par  
 
sheet("Reception" ).cells(65236,1).select  
Selection.End(xlUp).Select  
Sheet("Identification" ).cells(4,2)=Activecell  

 
soit 3 lignes au lieu de 8 et une rapidité d'execution plus importante.
 
-la premiere ligne selectionne la derniere cellule de ta feuille "Reception" ( pour la colonne 1 dans l'exemple)
-la deuxieme ligne envoie la selection vers "le haut" a la premiere cellule non-vide rencontrée.
-la troisieme ligne place la valeur de la cellule trouvée et selectionnée dans la feuille "identification" ( ici en 4,2 )


Message édité par Profil supprimé le 25-11-2004 à 22:18:31
Reply

Marsh Posté le 25-11-2004 à 22:30:23    

ok,
je vient de reesayer et maintenant il me souligne en bleu "Sheet" et affiche comme message que la fonction ou Sub n'est pas definit?
qu'elle est ce message
Merci
julien.


---------------
julien.
Reply

Marsh Posté le 25-11-2004 à 22:39:36    

oui c'est Sheets et non Sheet , comme je l'ai indiqué .  ;)

Reply

Marsh Posté le 25-11-2004 à 22:48:44    

ok Merci pour ton aide cela fonctionne.
maintenant je souhaiterais faire une autre chose avec le meme tableau, ca serait de pouvoir faire une recherche par rapport a ma colonne H et apres avoir trouver la cellule c'est qu'il renvoye chaque cellule de la ligne dans mets autres documents? es ce que cela est faisable?
Merci pour ton aide car c gentil de te pencher sur mes soucis.
julien.


---------------
julien.
Reply

Marsh Posté le 25-11-2004 à 22:56:58    

si j'ai bien saisi, tu veut rechercher une valeur V dans la colonne H , puis reprendre les valeurs qui se trouvent pres de V, sur la meme ligne et les recopier ailleurs ?
 
 

L=0:V=100 ' si 100 est la valeur cherchée bien sur
Do
L=L+1
X=sheets("Reception" ).cells(L,8)
 
If X=V then
 For T=8 to 18
 Sheets("Identification" ).cells(1,T-7)=Sheets("Reception" ).Cells(L,T)
 Next T
End if
 
If X="" then exit do
Loop

 
ici on va chercher la valeur V dans la colonne H (colonne 8), une fois trouvée on utilise un For Next pour recopier les valeurs  de la colonne H, ligne L à la colonne R, ligne L  dans la feuille "Identification" , colonne A à J, ligne 1.
 
le For Next ne prend que 10 valeurs ici ( 8 à 18 ) mais tu peut le remplacer par un Do Loop avec condition de sortie si vide ,si tu ne connait pas le nombre de cellules remplies dans la ligne ou se trouve la valeur V


Message édité par Profil supprimé le 25-11-2004 à 23:02:59
Reply

Marsh Posté le 25-11-2004 à 23:02:02    

oui c'est ca, c pour pouvoir reéditer un document qui serait perdu et que je n'ai pas a tous reprrendre( car chez nous bcp de papier se perd).
merci.


---------------
julien.
Reply

Marsh Posté le 25-11-2004 à 23:09:28    

je peut faire ta programmation avec un autre bouton car comme cela j'aurais un bouton pour faire le dernier document rempli et autre bouton qui va me permettre de recherche un critere et reédite celui ci. (c'est pour des reclamtions clients ex: je recoit une reclamation aujourd'hui avec le 1 er bouton ca me permet de l'edite puisque j'aurais rempli mon tableau, et je fais ca a chaque fois que j'en recoi une, mais si dans une semaine la feuille ce perd avec le deuxieme bouton je pourrais la reédité).
Merci bcp pour ton aide car je ne suis pas tres fort en prog.
julien


---------------
julien.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed