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

Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014 - 29 avril 2010 à 09:25
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014 - 3 mai 2010 à 08:57
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

Florian62150 Messages postés 32 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 mai 2010
29 avril 2010 à 09:33
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!
0
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014
29 avril 2010 à 09:49
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...
0
Florian62150 Messages postés 32 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 mai 2010
29 avril 2010 à 11:38
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"
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
29 avril 2010 à 13:34
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
0

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

Posez votre question
Florian62150 Messages postés 32 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 mai 2010
29 avril 2010 à 13:37
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 ^^
0
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014
29 avril 2010 à 13:46
En fait c'est un peu plus complexe au niveau du collage des données, je vous tient au courant rapidement.

Merci beaucoup !
0
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014
30 avril 2010 à 06:47
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
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
30 avril 2010 à 09:47
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.
0
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014
30 avril 2010 à 09:50
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 ...
0
houtas Messages postés 116 Date d'inscription jeudi 14 décembre 2006 Statut Membre Dernière intervention 29 août 2013
30 avril 2010 à 12:15
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é
0
Everlast03 Messages postés 29 Date d'inscription mardi 27 avril 2010 Statut Membre Dernière intervention 8 décembre 2014
3 mai 2010 à 08:57
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é ...
0
Rejoignez-nous