Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème VBA A lire pour comprendre!! Merci

5 réponses
Avatar
j0b
Bonjour à vous, alors voila je rencontre un petit problème je vois comment le
faire mais j'ai besoin de vos connaissances en programmation pour réaliser
cela. Alors voila à cette adresse vous pouvez trouver un fichier qui illustre
mon exemple :

http://rapidshare.de/files/2651020/exemple.pour.question.xls.html , il
suffit de cliquer sur free en bas de la page et d'attendre une minute pour
recevoir le fichier.

En ce qui concerne mon problème je voudrais qu'à partir d'une userform la
personne saisisse un numéro et ensuite à partir de cela que la procédure
fasse une boucle puis une recherchev à partir du numéro saisi dans la Feuil1
et pour finir qu'elle copie le Nom et le Type de Frais sur la Feuil2 puis
cache la ligne copier et que la procédure recommence tant qu'elle retrouve le
numéro dans la 1ere colonne.

Et au final elle doit remettre les lignes cachées visible mais ceci n'est
pas le problème principale. Merci bien pour votre aide si vous avez bien
compris ce que je recherche pour un bon programmeur c'est fait en 2min vu que
toutes les explications sont données mais pour une personne comme moi je vous
en parle meme pas lol. Merci encore et bonne journée par la même occasion.

5 réponses

Avatar
Daniel
Bonjour.
J'espère que le code suivant répond à tes attentes. Je n'ai pas compris
intérêt de masquer et d'afficher. Chaque exécution de la macro écrase les
résultats de la précédente. Si ça ne te convient pas, dis-le.

Sub Test()
Dim Num As Integer
Dim Ligne As Long, Plage As Range, c As Range
Ligne = 5
Num = CInt(InputBox("Saissez le numéro de pièce"))
With Sheets("Feuil1")
Set Plage = .Range("B5:B15")
For Each c In Plage
If c.Value = Num Then
Sheets("Feuil2").Range("B" & Ligne) = c.Offset(0, 1)
Sheets("Feuil2").Range("C" & Ligne) = c.Offset(0, 2)
Ligne = Ligne + 1
End If
Next c
.Range("B4:B15").EntireRow.Hidden = False
End With
End Sub

Cordialement.
Daniel
"j0b" a écrit dans le message de news:

Bonjour à vous, alors voila je rencontre un petit problème je vois comment
le
faire mais j'ai besoin de vos connaissances en programmation pour réaliser
cela. Alors voila à cette adresse vous pouvez trouver un fichier qui
illustre
mon exemple :

http://rapidshare.de/files/2651020/exemple.pour.question.xls.html , il
suffit de cliquer sur free en bas de la page et d'attendre une minute pour
recevoir le fichier.

En ce qui concerne mon problème je voudrais qu'à partir d'une userform la
personne saisisse un numéro et ensuite à partir de cela que la procédure
fasse une boucle puis une recherchev à partir du numéro saisi dans la
Feuil1
et pour finir qu'elle copie le Nom et le Type de Frais sur la Feuil2 puis
cache la ligne copier et que la procédure recommence tant qu'elle retrouve
le
numéro dans la 1ere colonne.

Et au final elle doit remettre les lignes cachées visible mais ceci n'est
pas le problème principale. Merci bien pour votre aide si vous avez bien
compris ce que je recherche pour un bon programmeur c'est fait en 2min vu
que
toutes les explications sont données mais pour une personne comme moi je
vous
en parle meme pas lol. Merci encore et bonne journée par la même occasion.


Avatar
Marc VANSTEELANT
Salut,

Comme Daniel je ne vois pas pourquoi tu veux afficher/masquer moi je t'ai
ecris un bout de code (moins technique et peut être plus facile a comprendre
pour tes futures macros) que Daniel à ajouter dans l'evenement click d'un
bouton d'un UserForm car c'est de là que tu voulais lancer ta macro(un
UserForm, un textBox et un CommandButton).
Pareil les données sont écrasée, savait pas si tu voulais les rajouter a la
fin ou aut' chose

Marc


Private Sub CommandButton1_Click()
Sheets("Feuil1").Select
Columns(2).Select
On Error Resume Next
Selection.Find(What:=UserForm1.TextBox1.Value, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:úlse).Activate
If Trim(Cells(ActiveCell.Row, 2).Value) = Trim(UserForm1.TextBox1.Value)
Then
NoLigneFeuil1 = ActiveCell.Row
NoLigneFeuil2 = 5 ' 5 car la copie se fait a partir de la 5ème ligne
Do While Trim(Cells(NoLigneFeuil1, 2).Value) =
Trim(UserForm1.TextBox1.Value)
Nom = Cells(NoLigneFeuil1, 3).Value
TypesFrais = Cells(NoLigneFeuil1, 4).Value
Sheets("Feuil2").Select
Cells(NoLigneFeuil2, 2).Value = Nom
Cells(NoLigneFeuil2, 3).Value = TypesFrais
NoLigneFeuil2 = NoLigneFeuil2 + 1

Sheets("Feuil1").Select
NoLigneFeuil1 = NoLigneFeuil1 + 1
Loop
msg = MsgBox("Copie des données terminée", vbOKOnly, "Information")
Else
msg = MsgBox("No d'article non trouvé !", vbOKOnly, "Erreur")
End If
End Sub


"j0b" a écrit dans le message de news:

Bonjour à vous, alors voila je rencontre un petit problème je vois comment
le
faire mais j'ai besoin de vos connaissances en programmation pour réaliser
cela. Alors voila à cette adresse vous pouvez trouver un fichier qui
illustre
mon exemple :

http://rapidshare.de/files/2651020/exemple.pour.question.xls.html , il
suffit de cliquer sur free en bas de la page et d'attendre une minute pour
recevoir le fichier.

En ce qui concerne mon problème je voudrais qu'à partir d'une userform la
personne saisisse un numéro et ensuite à partir de cela que la procédure
fasse une boucle puis une recherchev à partir du numéro saisi dans la
Feuil1
et pour finir qu'elle copie le Nom et le Type de Frais sur la Feuil2 puis
cache la ligne copier et que la procédure recommence tant qu'elle retrouve
le
numéro dans la 1ere colonne.

Et au final elle doit remettre les lignes cachées visible mais ceci n'est
pas le problème principale. Merci bien pour votre aide si vous avez bien
compris ce que je recherche pour un bon programmeur c'est fait en 2min vu
que
toutes les explications sont données mais pour une personne comme moi je
vous
en parle meme pas lol. Merci encore et bonne journée par la même occasion.


Avatar
j0b
Merci bien pour votre aide, ca fait plaisir de voir que l'on peut compter sur
un soutien. Je vais voir ce que je peux faire avec cela et si je rencontre
d'autres problèmes je vous tiens au courant. En tout cas un grand merci et
bonne journée à vous
Avatar
anonymousA
bonjour,

je préfère dire par avance que je n'ai pas vu le fichier que le
correspondant propose.

une simple remarque toutefois d'ordre général:
utiliser Selection.Find(What:=UserForm1.TextBox1.Value, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows).activate puis
ensuite utiliser une boucle do jusqu'à ce qu'on ne trouve plus de
correspondance de valeurs peut poser problème si il existe au moins 2 valeurs
correspondantes et que la toute 1ere valeur , correspondant au critère de
recherche , est sur la ligne N°1.
En effet, dans ce cas, la recherche demarre à compter de "après" la cellule
active alors que celle-ci est la cellule de la ligne 1.Dans ces conditions,
la valeur de la ligne 1 sera ignorée dans ta proc. Si par contre la ligne 1
est la seule à contenir la valeur correspondante de la colonne à répondre au
critère, alors elle sera bien trouvée.
De plus, pourquoi écrire LookAt:=xlPart, ce qui implique donc que la valeur
correspondante peut-être un surensemble de la valeur à chercher.
Enfin , utiliser des select ou des activate ralentit les macros.

Utiliser la méthode find est par contre plus rapide que une boucle for , à
condition qu'on l'utilise jusqu'au bout de ses possibilités et pas seulement
pour détecter la 1ere valeur puis exécuter ensuite une boucle Do qui dans ta
proc ressemble tout de même assez fortement à une boucle for de parcours à
partir de la 1ere valeur trouvée.

Enfin, pour ce que j'en dis.

Cordialement,

A+



Salut,

Comme Daniel je ne vois pas pourquoi tu veux afficher/masquer moi je t'ai
ecris un bout de code (moins technique et peut être plus facile a comprendre
pour tes futures macros) que Daniel à ajouter dans l'evenement click d'un
bouton d'un UserForm car c'est de là que tu voulais lancer ta macro(un
UserForm, un textBox et un CommandButton).
Pareil les données sont écrasée, savait pas si tu voulais les rajouter a la
fin ou aut' chose

Marc


Private Sub CommandButton1_Click()
Sheets("Feuil1").Select
Columns(2).Select
On Error Resume Next
Selection.Find(What:=UserForm1.TextBox1.Value, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:úlse).Activate
If Trim(Cells(ActiveCell.Row, 2).Value) = Trim(UserForm1.TextBox1.Value)
Then
NoLigneFeuil1 = ActiveCell.Row
NoLigneFeuil2 = 5 ' 5 car la copie se fait a partir de la 5ème ligne
Do While Trim(Cells(NoLigneFeuil1, 2).Value) =
Trim(UserForm1.TextBox1.Value)
Nom = Cells(NoLigneFeuil1, 3).Value
TypesFrais = Cells(NoLigneFeuil1, 4).Value
Sheets("Feuil2").Select
Cells(NoLigneFeuil2, 2).Value = Nom
Cells(NoLigneFeuil2, 3).Value = TypesFrais
NoLigneFeuil2 = NoLigneFeuil2 + 1

Sheets("Feuil1").Select
NoLigneFeuil1 = NoLigneFeuil1 + 1
Loop
msg = MsgBox("Copie des données terminée", vbOKOnly, "Information")
Else
msg = MsgBox("No d'article non trouvé !", vbOKOnly, "Erreur")
End If
End Sub


"j0b" a écrit dans le message de news:

Bonjour à vous, alors voila je rencontre un petit problème je vois comment
le
faire mais j'ai besoin de vos connaissances en programmation pour réaliser
cela. Alors voila à cette adresse vous pouvez trouver un fichier qui
illustre
mon exemple :

http://rapidshare.de/files/2651020/exemple.pour.question.xls.html , il
suffit de cliquer sur free en bas de la page et d'attendre une minute pour
recevoir le fichier.

En ce qui concerne mon problème je voudrais qu'à partir d'une userform la
personne saisisse un numéro et ensuite à partir de cela que la procédure
fasse une boucle puis une recherchev à partir du numéro saisi dans la
Feuil1
et pour finir qu'elle copie le Nom et le Type de Frais sur la Feuil2 puis
cache la ligne copier et que la procédure recommence tant qu'elle retrouve
le
numéro dans la 1ere colonne.

Et au final elle doit remettre les lignes cachées visible mais ceci n'est
pas le problème principale. Merci bien pour votre aide si vous avez bien
compris ce que je recherche pour un bon programmeur c'est fait en 2min vu
que
toutes les explications sont données mais pour une personne comme moi je
vous
en parle meme pas lol. Merci encore et bonne journée par la même occasion.







Avatar
Marc VANSTEELANT
Merci pour ces remarque bien fondées,

Concernant le fichier, effectivement il y avait plusieur ligne correspondant
à l'article choisi, et donc l'utilisation du find n'était là que pour
trouver la premiere occurance et la boucle pour y copier le reste des
occurance de même ordre.

Bref il y avait le choix d'utiliser la méthode find du debut a la fin, tout
comme la méthode des For et autres boucle, j'ai utilisé les 2 combinées a
des fins pédagogique et que la personne qui ne connait pas trop les macros
et langages de prog puisse y comprendre un peu et se debrouiller par la
suite de manière simple mais j'avoue que le code n'est pas optimisé mais je
l'avais tout de même précisé auparavant.

Marc


"anonymousA" a écrit dans le message
de news:
bonjour,

je préfère dire par avance que je n'ai pas vu le fichier que le
correspondant propose.

une simple remarque toutefois d'ordre général:
utiliser Selection.Find(What:=UserForm1.TextBox1.Value, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows).activate puis
ensuite utiliser une boucle do jusqu'à ce qu'on ne trouve plus de
correspondance de valeurs peut poser problème si il existe au moins 2
valeurs
correspondantes et que la toute 1ere valeur , correspondant au critère de
recherche , est sur la ligne N°1.
En effet, dans ce cas, la recherche demarre à compter de "après" la
cellule
active alors que celle-ci est la cellule de la ligne 1.Dans ces
conditions,
la valeur de la ligne 1 sera ignorée dans ta proc. Si par contre la ligne
1
est la seule à contenir la valeur correspondante de la colonne à répondre
au
critère, alors elle sera bien trouvée.
De plus, pourquoi écrire LookAt:=xlPart, ce qui implique donc que la
valeur
correspondante peut-être un surensemble de la valeur à chercher.
Enfin , utiliser des select ou des activate ralentit les macros.

Utiliser la méthode find est par contre plus rapide que une boucle for , à
condition qu'on l'utilise jusqu'au bout de ses possibilités et pas
seulement
pour détecter la 1ere valeur puis exécuter ensuite une boucle Do qui dans
ta
proc ressemble tout de même assez fortement à une boucle for de parcours à
partir de la 1ere valeur trouvée.

Enfin, pour ce que j'en dis.

Cordialement,

A+



Salut,

Comme Daniel je ne vois pas pourquoi tu veux afficher/masquer moi je t'ai
ecris un bout de code (moins technique et peut être plus facile a
comprendre
pour tes futures macros) que Daniel à ajouter dans l'evenement click d'un
bouton d'un UserForm car c'est de là que tu voulais lancer ta macro(un
UserForm, un textBox et un CommandButton).
Pareil les données sont écrasée, savait pas si tu voulais les rajouter a
la
fin ou aut' chose

Marc


Private Sub CommandButton1_Click()
Sheets("Feuil1").Select
Columns(2).Select
On Error Resume Next
Selection.Find(What:=UserForm1.TextBox1.Value, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, MatchCase:úlse).Activate
If Trim(Cells(ActiveCell.Row, 2).Value) =
Trim(UserForm1.TextBox1.Value)
Then
NoLigneFeuil1 = ActiveCell.Row
NoLigneFeuil2 = 5 ' 5 car la copie se fait a partir de la 5ème
ligne
Do While Trim(Cells(NoLigneFeuil1, 2).Value) >> Trim(UserForm1.TextBox1.Value)
Nom = Cells(NoLigneFeuil1, 3).Value
TypesFrais = Cells(NoLigneFeuil1, 4).Value
Sheets("Feuil2").Select
Cells(NoLigneFeuil2, 2).Value = Nom
Cells(NoLigneFeuil2, 3).Value = TypesFrais
NoLigneFeuil2 = NoLigneFeuil2 + 1

Sheets("Feuil1").Select
NoLigneFeuil1 = NoLigneFeuil1 + 1
Loop
msg = MsgBox("Copie des données terminée", vbOKOnly,
"Information")
Else
msg = MsgBox("No d'article non trouvé !", vbOKOnly, "Erreur")
End If
End Sub


"j0b" a écrit dans le message de news:

Bonjour à vous, alors voila je rencontre un petit problème je vois
comment
le
faire mais j'ai besoin de vos connaissances en programmation pour
réaliser
cela. Alors voila à cette adresse vous pouvez trouver un fichier qui
illustre
mon exemple :

http://rapidshare.de/files/2651020/exemple.pour.question.xls.html , il
suffit de cliquer sur free en bas de la page et d'attendre une minute
pour
recevoir le fichier.

En ce qui concerne mon problème je voudrais qu'à partir d'une userform
la
personne saisisse un numéro et ensuite à partir de cela que la
procédure
fasse une boucle puis une recherchev à partir du numéro saisi dans la
Feuil1
et pour finir qu'elle copie le Nom et le Type de Frais sur la Feuil2
puis
cache la ligne copier et que la procédure recommence tant qu'elle
retrouve
le
numéro dans la 1ere colonne.

Et au final elle doit remettre les lignes cachées visible mais ceci
n'est
pas le problème principale. Merci bien pour votre aide si vous avez
bien
compris ce que je recherche pour un bon programmeur c'est fait en 2min
vu
que
toutes les explications sont données mais pour une personne comme moi
je
vous
en parle meme pas lol. Merci encore et bonne journée par la même
occasion.