[Déplacé VB6 --> VBA] Si 2 celulles ont même valeur alors autre celulle prend un

Signaler
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014
-
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014
-
Bonjour,

Je dois réaliser une macro qui fait la chose suivante :
Si la colonne C de ma feuille 1 contient la même valeur que la colonne C de ma feuille 2 (nombre de 0 à 40 par exemple...), alors la colonne D de ma feuille 1 prend la valeur de la colonne de ma feuille 2.

Exemple : Si C12=2 (feuille 1) et que C17=2 (feuille 2), alors D12 (feuille 1) = D17 (feuille 2)

Pouvez vous me dire si c'est possible ?

Merci d'avance !

11 réponses

Messages postés
32
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 mai 2010

tout est possible =)

dim Nombre1 as long
dim Nombre2 as Long

Range ("C12").Select
Nombre1 = CLng(ActiveCell.Value)

Range ("C17").Select
Nombre2 = CLng(ActiveCell.Value)

If Nombre1 = Nombre2 then
Range("D12").Select
ActiveCell.FormulaR1C1 = Range("D17").Value
End If

ça c'est pour ton probleme de condition!

Après pour ton problème de feuilles:
Sheets("Feuil1").Select 'te placer sur la feuil1
Sheets("Feuil2").Select 'te placer sur la feuil2

de maniere générale: sheets("<nom de la feuille>").Select

Voila avec ça je pense que tu pourra fait ta macro!
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Merci de ta réponse aussi rapide,

Je peux l'appliquer à toute ma colonne ?
Exemples :

C1(f1)=C4(f2)
alors : la valeur de D1(f1) va dans D4(f2)

C38(f1)=C6(f2)
alors : la valeur de D38(f1) va dans D6(f2)

Si tu ne comprends pas bien dis le moi, j'essayerai de t'expliquer autrement ...

Merci beaucoup d'avance :-D

PS : Je suis débutant en VB, je suis étudiant et ai un projet à charge durant mon stage...
Messages postés
32
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 mai 2010

Je ne sais pas si tu peux l'appliquer a une colonne... parce que dans une colonne, il peut y avoir beaucoup de valeurs... 65536 valeur au maximum... donc si tu fait un test il faut que toutes les valeurs soit exactement les mêmes... Essayes mais je ne te garanti rien...

pour selectionner une colonne:
Columns("E:E").Select
ou encore Columns(1).Select (pour selectionner la colonne A qui est la premiere colonne)
Je ne connais pas les attributs de columns...


Sinon, si tu veux faire une test si une colonne est egale a une autre je peux t'aguiller un peu:

Dim TableauColonne1(65535) As Double
Dim TableauColonne2(65535) As Double
Dim Indice As Integer

'- On copie la colonne1 dans le tableau1 -'
Indice = 0
Range("A1").Select
While Indice <65536
TableauColonne1(Indice) = CDbl(ActiveCell.Value)
ActiveCell.Offset(1,0).Select
Indice = Indice + 1
Wend

'- On copie la colonne2 dans le tableau2 -'
Indice = 0
Range(B1").Select
While Indice < 65536
TableauColonne2(Indice) = CDbl(ActiveCell.Value)
ActiveCell.Offset(1,0).Select
Indice = Indice + 1
Wend

'- On teste si le tableau1 et égal au tableau2 -'

Indice = 0
While TableauColonne1(Indice) = TableauColonne2(Indice)
Indice = Indice+1
Wend

Voila c'est tout ce que je suis capable de faire pour t'aider! J'ai pas beaucoup de temps pour faire mon programme non plus ^^

Mais aide toi de l'algorithmique pour faire des fonctions etc... aide toi aussi des macro et des tutoriaux disponible sur le net!

PS: Moi aussi, je suis étudiant et avec un projet en VBA.

"Quand faut s'y mettre... faut 6m50 pour y arriver"
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

Salut,

Voici une petite boucle qui fera ton affaire:
Sub comparedata()
Dim ligne, colonne, compteur As Integer
'test effectué sur la 1ére colonne
colonne = 3
ligne = 1
'trouve le numéro de la dernière ligne non vide pour limiter la boucle
compteur = Sheets("Feuil1").Columns("C:C").Find("*", Cells(ligne, colonne), , , xlByRows, xlPrevious).Row
For ligne = 1 To compteur
'comparaisons des données
If Sheets("Feuil1").Cells(ligne, colonne) = Sheets("Feuil2").Cells(ligne, colonne) Then
Sheets("Feuil1").Cells(ligne, colonne + 1) = Sheets("Feuil2").Cells(ligne, colonne)
End If
Next
End Sub


Après avoir testé si la réponse est satisfaisante n'oublie pas de cliquer sur réponse accepté, je te conseille aussi de ne pas mettre en dur dans ton code des valeurs type 65536 car excel 2007 peut supporter plus d'un million de lignes
Messages postés
32
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 mai 2010

loOl oui c vrai que ta méthode est pas mal ^^
mais tu n'as pas 1 million de ligne avce ma méthode tu a juste 65536*2 itérations =) c vrai que ça ralentit ^^
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

En fait c'est un peu plus complexe au niveau du collage des données, je vous tient au courant rapidement.

Merci beaucoup !
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Je vous explique mieux, et vous pouvez télécharger le fichier joint pour mieux comprendre, ce que je voudrais que ma macro fasse c'est :

Par exemple :
[*] Quand elle trouve 1 dans la colonne B de la feuille 'Rotor', elle aille chercher dans la colonne B de la feuille 'Données Brutes' pour trouver la même valeur. Une fois ceci fait, si elle trouve, les colonnes F/G/H/I de la feuille 'Rotor' sont automatiquement remplies (j'ai mit les référence dans les cellules F12/G12/H12/I12 de ce que je voulais...)

En espérant vous avoir mieux expliquer ...

Merci d'avance !

Fichier Joint
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

Utisilie Recherchev ou vlookup ca répond à ton pb, pour éviter les erreurs quand la valeur ne sera pas présente dans la plage de la feuille 2 rajoute un si esterreur sur ta recherche pour remplacer les #NA par vide.
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

T'es sûr que c'est possible ? T'as ouvert mon fichier pour voir les références de mes cellules ?
Peux-tu m'en dire plus stp ...
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

je peux pas loader ton fichier, j'ai pas accès aux sites de télechargement de la ou je suis, voici la définition de la fonction recherchev
La fonction RECHERCHEV d'Excel permet de faire exécuter au tableur une recherche dans un tableau de valeurs et de renvoyer la valeur trouvée dans une cellule déterminée à l'avance. On pourra, par exemple, faire trouver par Excel la désignation et le prix unitaire d'un produit en saisissant simplement sa référence. Comme le fait l'ordinateur central d'un hypermarché quand il renvoie la référence et le prix d'un produit dont le code-barres a été lu en caisse ou saisi par la caissière. Cette fonction peut avoir de nombreuses applications : facture, bulletin de salaire, base de données
cela correspond exactement à ta description, je peux faire le code, mais dans ce cas tu ne va pas apprendre à le faire par toi même
si la valeur n'est pas trouvé dans la plage tu aura un #NA en résultat, un test avec les fonctions Si() et esterreur() te permet d'afficher vide quand la valeur n'est pas trouvé
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Je pense que je me suis mis dans une belle galère en fait ...
Est ce que tu vois ce que je veux faire exactement ?
Sinon je ré-explique mieux si tu as le classeur EXCEL sous les yeux tu comprendra facilement ...

Il faut que je retrouve B12 (rotor) dans colonnes B de données brutes.
Une fois celle-ci trouvée, on peut alors chercher la vitesse D12 (rotor) dans F données brutes.

Une fois que j'ai ça, je prend la valeur de H (si mon F précédemment trouvé est F35, je prend H35 et je l'envoie dans F12 puis je retourne sur la feuille donnée brute et je prend H35+9 et je l'envoie dans I12, puis H35+1 puis l'envoie dans J12, puis H35+10 a envoyer dans J12...)

J'espère que c'est pas trop compliqué ...