probleme sur une programation vba - VB/VBA/VBS - Programmation
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 ...
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.
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 )
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.
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.
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
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.
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
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.