Macro pour copier des valeurs à partir d'une recherche

Queenvrm Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous!
Je cherche depuis plusieurs jours sans trouver réponse à ma question...

Je veux bonifier une grosse base de données en créant une macro pour faire un copier-coller d'un onglet à un autre, mais à partir d'une donnée entrée dans la case B1.

Je veux inscrire une période dans la case B1 de l'"onglet 2" (ex: Période 4). Ensuite, lancer une recherche dans la ligne 1 de l'"onglet 1" pour trouver ("Période 4").
Si la recherche a une correspondance dans l'"onglet 1", copier-coller le contenu de la cellule "B2" de l'"onglet 2" dans la colonne correspondante de la recherche (donc sous "Période 4") à la ligne 2.

S'il n'y a aucune correspondance, avoir un MsgBox "Période introuvable"

*À noter que les données de l'"onglet 2" ne seront pas conservées suite à la copie des données dans l'"onglet 1".

J'espère que c'est assez clair et surtout que quelqu'un pourra me proposer une solution!

Merci beaucoup!!

3 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

Je ne suis pas sûre d'avoir tout compris mais on va essayer comme ca :

sub afficherecherche

dim i,ligne as variant

i= 1
ligne = 2

do while sheets("onglet1").cells(i,1) <> "" 'une boucle qui tourne tant qu'il y a une valeur dans la colonne 1 (=A) et ligne i de la feuille nommée onglet1

if sheets("onglet1").cells(i,1) =sheets("onglet2").cells(1,2) then ' si la cellule de la ligne i colonne 1 (=B) = la cellule de la ligne 1 colonne 2 de la feuille onglet 2 (=B1 de la feuille onglet 2)

sheets("onglet2").cells(ligne,2) = sheets("onglet1").cells(i,2) 'la cellule de la ligne ligne et colonne 2 (=B) de la feuille onglet 2 est égale àla cellule de la ligne i colonne 2 (B) de la feuille onglet 1

ligne=ligne+1
end if

i=i+1 'pour passer à la ligne supérieure

loop


end sub
0
Queenvrm Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   4
 
Bonjour! Premièrement, merci de prendre le temps de me répondre.
J'ai essayé de comprendre ta syntaxe, mais je t'avoue que je suis un peu perdue.

Telle quel, il ne se passe rien quand je la fais rouler.

En fait, la donnée Sheets("onglet 2") doit être recherchée dans Sheets("onglet 1").Row(1).

Et non dans la colonne 1.

Concrètement, j'ai besoin de trouver
Sheets("onglet 2").Range("B2") dans Sheets("onglet 1").Row(1).
Ma réponse actuelle se trouve en E1
Ensuite, faire un copier de Sheets("onglet 2").Range("B2)
et un PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
dans E2 (puisque la période trouvée serait E1).


J'espère que c'est plus clair...!?
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,


' do while est une boucle qui tournera sur toutes les lignes de ton tableau
' for colonne= 1 to 100 est une boucle qui, sur chacune de tes lignes, balaiera toutes les colonnes de 1 à 100
' if sheets("onglet1").cells(i,colonne) =sheets("onglet2").cells(1,2) then répond à ta condition si la valeur B2 de l'onglet 2 est trouvée sur une ligne et sur une colonne alors faire un copier de Sheets("onglet 2").Range("B2)

' tu n'es pas obligé de passer par PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False car la macro mets plus de temps
' si tu mets cells(1,1) = cells(1,2) tu te rendras compte que ca fait la même chose la cellule A1 prendra la valeur de la cellule B1
'tout ce qui est en vert sont des commentaires qui normalement t'aide à mieux comprendre.



sub afficherecherche

dim i,ligne as variant

i= 1
ligne = 2

do while sheets("onglet1").cells(i,1) <> "" 'une boucle qui tourne tant qu'il y a une valeur dans la colonne 1 (=A) et ligne i de la feuille nommée onglet1

for colonne = 1 to 100 'va rechercher dans toutes les colonnes


if sheets("onglet1").cells(i,colonne) =sheets("onglet2").cells(1,2) then ' si la cellule de la ligne i de la colonne colonne= la cellule de la ligne 1 colonne 2 de la feuille onglet 2 (=B1 de la feuille onglet 2)

sheets("onglet2").cells(ligne,2).value = sheets("onglet1").cells(i,2).value 'la cellule de la ligne ligne et colonne 2 (=B) de la feuille onglet 2 est égale à la cellule de la ligne i colonne 2 (B) de la feuille onglet 1

ligne=ligne+1
end if

next

i=i+1 'pour passer à la ligne supérieure

loop


end sub
0