Aide en VBA

klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour, j'espère que quelqu'un pourra m'aider sur ma recherche.

J'essaie de faire ceci en VBA mais il y a toujours un morceau de ma prog qui ne fonctionne pas avec le reste... Je cherche depuis hier sur le net et dans les livres mais c'Est jamais ce que je cherche.

Bon alors je vais vous l'écrire en mot:

Je veux rechercher la cellule B4 de la feuille 2 dans la plage C4: C30 de la feuil 1

(jusque là tout fonctionne)

Ensuite j'aimerais que la valeur inscrite dans la cellule B5 de la feuil 2 se copie dans la cellule associée à la recherche précédente et ainsi de suite.

Comme par exemple:

Feuil 2
10 kg de colle

Colle = B4
10 = B5

Feuil 1
on retrouve le mot colle avec une certaine quantité à côté
j'aimerais que le 10 prenne sa place.

C'est en fait un petit programme que je suis en train de créer pour la réception de produits qui se met automatiquement dans mon inventaire!


ou pê

Deuxième hypothèse.

Ce peut être:

Rechercher la cellule B4 de la feuil 2 dans d la plage C4: C30 de la feuil 1
lorsque le mot a été trouvé, Aller à la cellule à côté
Ensuite copier la valeur de la cellule B5 de la feuil 2 dans cette cellule (celle d'à côté!)



Merci et j'attends de vos nouvelles impatiemment!!

11 réponses

Gord21 Messages postés 918 Date d'inscription   Statut Membre Dernière intervention   289
 
Bonsoir,
Pourrais-tu envoyer un fichier exemple (avec ci-joint.fr par exemple)
ce serait plus clair.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
bonjour

je suppose que "à coté" veut dire à droite ?

essaies

Sub coller()
Dim ref As String, qte As Single, lig As Byte

With Sheets(2)
    ref = .Range("B4")
    qte = .Range("B5")
End With

With Sheets(1)
    lig = .Columns(3).Find(ref, .Range("C3")).Row
    .Cells(lig, 4) = qte
End With
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Michel_m cela fonctionne très bien!! mais j'essaie de la modifier pour que mon range soit plus d'une cellule à chercher... Ce sont les produits qui ont été commandé donc si on pouvait les réceptionner tous ensemble au lieu de les écrire un par un... Je sais pas si tu comprends...

la "ref" serait B4 à B8 par exemple
et
la "qte" serait de C4 à C8

Merci !! et bonne journée
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Merci énormément Michel_m

tout fonctionne!! :O)

Bonne journée!!
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour!!! j'ai un autre petit problème qu'auparavant j'ai fait à l'aide de ma souris!!! mais avec mon exemple j'avais 20 lignes (c'était pas si pire) mais là mon fichier va en contenir + de 1000!!! Alors vous comprenez!!

j'essaie de faire ceci dans la cellule A5 de la feuille2:

Dans cellule A5 feuille2:
si('Feuille1D5'<'Feuille1E5','Feuille1A5',"")

Dans cellule B5 feuile2:
si('Feuille1D5'<'Feuille1E5','Feuille1B5',"")

Dans la cellule A6 feuille2:
si('Feuille1D6'<'Feuille1E6','Feuille1A6',"")

et ainsi de suite...

j'ai essayé de mettre
i=5
IF('Feuille1D[i]<'Feuille1E[i]','Feuille1A[i]',"")
IF('Feuille1D[i+1]<'Feuille1E[i+1]',Feuille1A[i+1]',"")

et ainsi de suite.. mais ça pas d'lair à fonctionner...

de plus il faut que je fasse cela autant sur les colonnes que sur les lignes...

Je suis toute mélangé et j'espère que je ne vous ai pas mélangé!!!!

Merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Au passage, une fonction SI() est sufisante, pas besoin de macro.
Feuille 2 dans cellule :
A5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$A5;"")
B5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$B5;"")
Sélectionner A5 :B5 et tirer vers le bas sur le nombre de lignes désirées !

Si macro obligatoire, essayer cette procédure:
Sub fonctionSiF1()
Dim c As Variant
Sheets("Feuil1").Activate
For Each c In Range("D5:D" & Cells(Cells.Rows.Count, 4).End(xlUp).Row)
If c.Value < c.Offset(0, 1).Value Then
    Sheets("Feuil2").Cells(c.Row, 1) = c.Offset(0, -3).Value
    Sheets("Feuil2").Cells(c.Row, 2) = c.Offset(0, -2).Value
Else
    Sheets("Feuil2").Cells(c.Row, 1) = ""
    Sheets("Feuil2").Cells(c.Row, 2) = ""
End If
Next c
End Sub


Salutations.
Le Pingou
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
Bonjour à tous

autre méthode (temps : env 0,1 seconde)

Option Base 1

Sub remodeler()
Dim Derlig As Integer, cptr As Integer
Dim Tablo_in, Tablo_out
With Sheets(1)
    Derlig = .Range("D10000").End(xlUp).Row
    Tablo_in = .Range("D5:E" & Derlig)
End With
ReDim Tablo_out(UBound(Tablo_in), 2)

For cptr = 1 To UBound(Tablo_in)
    If Tablo_in(cptr, 1) < Tablo_in(cptr, 2) Then
        Tablo_out(cptr, 1) = Tablo_in(cptr, 1)
        Tablo_out(cptr, 2) = Tablo_in(cptr, 2)
    End If
Next

With Sheets(2)
    Application.ScreenUpdating = False
    .Range("A5:B10000").Clear
    .Range("A5").Resize(UBound(Tablo_out), 2) = Tablo_out
    .Range("A5:B" & UBound(Tablo_out) + 4).Borders.Weight = xlThin
    .Activate
End With

End Sub


Mais, effectivement, comme le dit fort justement Le Pingou, des formules suffiraient !
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
Pour le fun ! (1083 lignes)
temps mesuré avec AMD 1,8ghz, FSB 333 Ram 512
0,016s au 2° chrono
demo:
https://www.cjoint.com/?eqkGoXotTk
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour michel-m,
Super avec l'utilisation de variable [tableau].
Juste au passage, pour la première ligne vide, cette formule tient compte du nombre de ligne de la version Excel :
Derlig=.Range("D" & Cells(Cells.Rows.Count, 4).End(xlUp).Row)

Salutations.
Le Pingou
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
C'est noté, merci (je ne comprenais pas pourquoi)
Bon WE ensoleillé
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Je comprends bien ce que vous dites, mais il me semble que je l'ai essayé de drager ma formule jusqu'en bas... mais ça n'avait pas fonctionné..

Merci beaucoup pour vos réponses!
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Non, ça ne fonctionne pas!! Je viens de le faire à la main et excel n'aime pas trop ça!!!

Si je récapitule:

Feuille 2 A5
=si(Feuil1D5<Feuil1E5,Feuil1A5,"")

Feuille 2 B5
=si(Feuil1D5<Feuil1E5,Feuil1B5,"")

Feuille 2 C5
=si(Feuil1D5<Feuil1E5,Feuil1C5,"")

Et ainsi de suite jusqu'à I5

MAIS il y a aussi le fait que sur la ligne suivante (6) ça donne

Feuille 2 A6
=si(Feuil1D6<Feuil1E6,Feuil1A6,"")

Feuille 2 B6
=si(Feuil1D6<Feuil1E6,Feuil1B6,"")

Feuille 2 C6
=si(Feuil1D6<Feuil1E6,Feuil1C6,"")

et ainsi de suite..

Donc mon carré c'est de A5 à IX (X étant 1000 ou 10000 ou)....


C'est ça le mini problème... Je ne peux pas drager en carré car la ligne 1 n'a pas les mêmes coordonnées que la ligne 2 et suivante...

Pouvez vous m'aider encore ???
MErci
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
Oui d'accord, jusqu'à la colonne [i], donc il suffit de complèter comme suit:
Feuille 2 dans cellule :
A5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$A5;"")  
B5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$B5;"")  
C5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$C5;"")  
...... 
....... 
I5: =SI(Feuil1!$D5<Feuil1!$E5;Feuil1!$I5;"") 

Sélectionner A5 :I5 et tirer vers le bas sur le nombre de lignes désirées !
J'ai testé, sa marche sans problème et Excel adore cela.
Salutations.
Le Pingou
0
klodine_39 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

Michel_m, ce que tu m'as écrit au début début!! fonctionne très bien!! mais j'essaie de la modifier pour que mon range soit plus d'une cellule à chercher... Ce sont les produits qui ont été commandé donc si on pouvait les réceptionner tous ensemble au lieu de les écrire un par un... Je sais pas si tu comprends...

la "ref" serait B4 à B8 par exemple
et
la "qte" serait de C4 à C8

Merci !! et bonne journée
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
désolé, mais j'avais un pb sur un autre post

je suis en ballade ce samedi, donc,peut être dimanche ou lundi

met un extrait (quelques lignes) de ton fichier "anonymisé" au formar XL 97-2003sur
https://www.cjoint.com/
et colles le lien proposé dans ton message
0
Le Pingou Messages postés 12249 Date d'inscription   Statut Contributeur Dernière intervention   1 458
 
Bonjour,
En restant dans l'esprit de michel_m (bonne ballade...), je vous propose d'essayer cette procédure modifiée :
Sub coller_plus()
Dim ref As String, qte As Single, lig As Byte
Sheets(2).Activate
For Each c In Range("B4:B8")
    ref = c.Value
    qte = c.Offset(0, 1).Value
    With Sheets(1)
        lig = .Columns(3).Find(ref, .Range("C3")).Row
        .Cells(lig, 4) = qte
    End With
Next c
End Sub
J'espère que c'est se que vous désirez !
0