[VBA] Excel- Copier cellulesous condition

Résolu/Fermé
Gotts - 15 juin 2009 à 10:40
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 15 juin 2009 à 15:26
Bonjour,

Voilà plusieurs semaines que je parcours ce forum pour m'aider à trouver et à développer des macros. Donc déjà je tiens à remercier les personnes qui répondent, c'est réellement très pratique et agréable.

Voilà mon problème, je suis actuellement en train de développer un fichier Excel. En feuille 1 je possède une cinquantaine de colonne. Ce que je voudrais c'est que la valeur que je rentre dans ma feuil2 en cellule D3 recherche les valeurs correspondantes dans la feuil1 colonne AV et me copie la valeur contenu en colonne A (feuil1) de la même ligne en colonne A(feuil2).

A savoir que les valeurs rentrées en D3 sont totalement aléatoire.

Merci par avance,

Gotts
A voir également:

19 réponses

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 11:04
Salut,

Je ne sais si j'ai tout compris, mais si tu veux afficher sur la m^eme ligne la valeur de la plage en AV:AV référencée en D3

tu peux le résoudre avec une formule que tu copis en A2 par exemple et que tu incrémente vers le bas

=SI(Feuil1!AV2=Feuil2!$D$3;Feuil1!AV2;"")

si tu le veux en VBA dès que j'ai un moment je t'écris un code, si personne ne l'a fait entre temps

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
15 juin 2009 à 11:19
Bonjour Gotts,

As-tu essayer de mettre le contenu de la cellule sous une variable? ainsi tu n'as plus qu'à tester sur ta variable.

Sous la forme

dim var as string
dim numeroligne as integer

var = sheets("feuil2").range("D3")


ensuite tu effectue la condition pour savoir si la cellule située en feuille 2 est identique à var, et si cest la cas, tu copie.

numeroligne = 1

while activecell.cells(1,1) <> empty

if sheets("feuil1").cells(1,1)=var then
sheets("feuil2").cells(numeroligne,1)=sheets("feuil1").cells(numeroligne,1)
end if

numeroligne = numeroligne +1

ActiveCell.Offset(1, 0).Activate
wend

Je précise que je ne suis pas un expert, mais si je peux essayer d'aider j'essai.
Si je n'ai pas été assez clair, hésite pas à me le dire

Bon test ^^

Necro27
0
Déjà merci pour la réponse,

malheureusement un simple SI ne suffira pas ^^.

Non en fait ce que je souhaite c'est afficher dans ma colonne A de ma feuille 2 les noms de ma colonne A de ma feuille 1 en fonction des résultats trouvés dans ma colonne AV (feuil1). Résultat que l'on trouve grâce à une recherche en cellule D3 (feuil2).

Pour donner un exemple:

Je recherche la valeur 12 en D3 feuille 2
La macro recherche toutes les cellules en colonne AV (feuil1) qui contiennent la valeur 12 et recopie la valeur de la colonne A (de la même ligne que celle ou la valeur 12 a été trouvé) (feuil1) en colonne A (feuil2).

Voilà je sais pas si c'est bien plus clair, mais ce n'est pas forcément évident à expliquer surtout que je ne peux pas vous transmettre le fichier qui ne contient ,malheureusement, que des données confidentielles :(.
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
15 juin 2009 à 11:24
j'ai été un peu long à écrire le message.. mais te satisfait t'il?
0
Bonjour,

Je te dis ça dans une minute le temps de l'adapter et de le tester,

Merci par avance,

Gotts
0

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

Posez votre question
Excusez moi d'avoit été si long, mais quand la direction appel on répond ^^

Donc, après test aucun résultat, pas de message d'erreur mais seulement du vide. Surement est-ce du à une mauavise compréhension de ma part ce dont je ne doute pas :D.

Voilà donc je vais essayer de mieux comprendre la macro pour éviter de bêtes erreurs.

Donc on fixe la variable, pas de soucis,
pour le If pas de problème,

les seules choses qui me "gène" sont les 2 activecell. Je ne vois pas trop quoi en faire et le but ^^.

Encore merci pour la ou les futures réponses,

Gotts
0
necro27 Messages postés 160 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 11 février 2011 8
15 juin 2009 à 12:13
Pas de souci ^^

j'ai homi un détail assez important, juste avant le while, met un sheets("feuil2").range("A1").select par exemple.

et en me relisant, j'ai fai également une erreur, et je m'en excuse

if sheets("feuil1").cells(1,1)=var then --> 'faux'
if sheets("feuil1").cells(numeroligne,1)=var --> 'vrai'

Pour la ligne :

while activecell.cells(1,1) <> empty
--> tant que la cellule active est différente de vide

ActiveCell.Offset(1, 0).Activate (à écrire juste avant le wend)
--> active la cellule suivante vers le bas de 1 ligne 0 colonne (donc la suivante)

Mais petite précision, pour confirmer si j'ai bien compri ta demande :

tu a une valeur que tu saisi en feuille 2
cette valeur tu la recherche dans un tableau situé en feuille 1 sur la colonne A sur toute les ligne c bien sa?
et ensuite si par exemple A1 = valeur saisie, tu recopi la ligne sur la feuille 2? je crois m'être avancé tro vite dans le code tout à l'heure
0
En fait pour être clair

Imaginer un tableau en feuille 1 à seulement 2 colonnes (prenons nom et département par exemple)
et un tableau en feuille 2 avec une seule colonne (nom) et une cellule recherche,

On rentre une donnée (un département par exemple) dans la cellule recherche on appuis sur la macro et ca nous donne les noms habitant dans le département recherché.

Voilà c'est surement plus concret. Mes données sont différentes mais c'est l'idée générale.

Voilà, encore merci par avance,

gotts
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 juin 2009 à 12:57
Bonjour,
Imaginer un tableau en feuille 1 à seulement 2 colonnes (prenons nom et département par exemple)
et un tableau en feuille 2 avec une seule colonne (nom) et une cellule recherche,

On rentre une donnée (un département par exemple) dans la cellule recherche on appuis sur la macro et ca nous donne les noms habitant dans le département recherché.
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 13:25
Salut tous,

Allez testes ce code, cellule contenant la valeur recherchée feuille02 cellule D3
Matrice en colonne AV feuille 1 copie la valeur trouvée en colonne A sur la même ligne

Sub Copie_Valeur_Trouvée()
Dim x
Sheets("Feuil2").Range("D3").Select
x = ActiveCell.Value
Sheets("Feuil1").Select
With Worksheets("Feuil1").Range("AV:AV")
Set c = .Find(x, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
End If
End With
Range(firstAddress).Select
ActiveCell.Activate
Cells(ActiveCell.Row, 1) = Range(firstAddress)
End Sub

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
Malheureusement un filtre est impossible pour beaucoup de raison sur la feuille 1 (Déjà car les données de cette feuille sont protégés et ne doivent pas être modifiées car elles sont le moteur d'autres documents).

C'est pourquoi je suis obligé de traiter ceci par macro sous VBA.

Petit shéma:

Feuille 1 : Tableau à 2 colonnes: Nom - Département (Tableau contenant les données)
Feuille2: Tableau à 1 colonne: Nom - (tableau fournissant les réponses) et une cellule recherche (où on tape un département au choix :D)

PS: Département et Nom sont de simples exemples. Les données que je traite ne sont pas transmissibles vu qu'elles sont confidentielles.

Voilà, en espérant avoir était le plus clair et concret possible,

Merci par avance,

Gotts
0
Edit de mon message précédent:

Je viens de tester ta macro Mike (déjà merci) et ensuite je rencontre un petit bug au niveau de:
Range(firstAddress).Select

Ou le VBE me dit que : "la méthode sélect de la classe range à échoué".

Merci par avance,

Gotts
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 13:44
Re,

Comment se nomment tes feuilles, la feuille ou se trouve la cellule D3 et la feuille ou se trouve ta liste de valeur en AV

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
Feuille1 = Portefeuille (celle avec les données)
Feuille2 = feuil2 (Celle qui contient D3)

Merci

Gotts
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 14:07
Re,

Voila, il fallait simplement identifier la feuille, le bouton de lancement macro se trouve Feuille 2 si non il faudra que je te modifie une ligne de code

Sub Copie_Valeur_Trouvée()
Dim x
Sheets("Feuil2").Range("D3").Select
x = ActiveCell.Value
Sheets("Portefeuille").Select
With Worksheets("Portefeuille").Range("AV:AV")
Set c = .Find(x, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
End If
End With
Range(firstAddress).Select
ActiveCell.Activate
Cells(ActiveCell.Row, 1) = Range(firstAddress)
End Sub

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
Re,

Le bouton de lancement se trouve en effet feuil2 mais il semblerait que la macro ne reconnaisse toujours pas l'adresse. ^^
Toujours la même erreur. Pourtant le firstaddress indique $AV$4 ce qui est en effet bin la première ligne contenant la valeur recherchée.

Merci encore pour toute cette aide précieuse et pour le temps consacré.

Gotts
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 juin 2009 à 14:41
Bnjour Mike,
Faut mettre la macros dans un module général.
A+
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 14:48
Salut Lermite,

Tout à fait, Ah ! il faut tout dire, je crois qu'on va envoyer des notes d'honoraires, (non je déconne)

Alors clic droit sur l’onglet de feuille, Visualiser le code/Insérer/ Module et coller le code dans la partie blanche tu remarquera un curseur clignotant
Il y a d’autre chemin pour y aller mais restons simple

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
Rebonjour,

Ne vous inquiétez pas je l'avais bien insérer en tant que macro en utilisant le code module et non pas le code Feuil comme on pouvait le croire.

Néanmoins j'ai trouvé d'où venait l'erreur, le classeur possédant beaucoup d'autres codes il y avait un petit conflit qui est désormais réglé. La macro fonctionne très bien reste juste à lui rajouter quelques petits plus pour qu'elle soit parfaite!

Merci à tous pour l'aide apportée.

Au plaisir de vous revoir et de vous lire,

Bonne après midi,

Gotts
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
15 juin 2009 à 15:26
Re,

Il serait bien que tu deviennes membre, pour mettre ton statut en résolu en haut de ton post, si non clic sur le triangle et demande à la modération de le faire pour toi

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0