Méthode Find

Dapounet

XLDnaute Nouveau
Bonjour à tous !

Comme j'ai pu l'annoncer dans ma présentation je suis un néophite de la programmation sous VBA ! Je n'ai jamais eu l'occasion de développer sous ce langage !
Mais à l'heure d'aujourd'hui, on m'a demandé de l'aide pour réaliser une macro sous excel.
J'ai quand même quelques notions en programmation (principalement en java) et j'essaie de faire des liens, mais j'ai beaucoup de mal.


Concernant le projet à réaliser, j'ai besoin de trouver l'état "Etat" d'une valeur "V1" d'une feuille "f1", sur une colonne d'une feuille "f2".

Ce n'est pas forcément très clair, je vais essayer de donner plus d'informations et un exemple :

J'ai 2 feuilles : 1 que l'on peux comparer à un garage automobile et la deuxième que l'on peut considérer comme le fichiers de toutes les réparations à effectuer.
Dans le garage, chaque ligne correspond à un véhicule. Chaque ligne de la deuxième feuille correspond à une réparations à effectuer sur ces véhicules (vitre cassées, problème de direction.... par exemple).
Sur ma première feuille, je n'ai aucun renseignement sur l'état d'avancement des réparations mais j'ai tout de même les références des réparations à faire. Sur la deuxième feuille, j'ai les réparations à effectuer avec leur état (réparé ou non) mais pas la correspondance au véhicule.

Le lien entre ces 2 feuilles est donc le numéro de la réparation.
J'aimerais pouvoir garder les 2 feuilles et avoir un suivi de chaque véhicule.
Pour cela, j'aurais besoin de :
- chercher dans la deuxième feuille le numéro d'anomalie correspondant au véhicule
- de trouver l'état d'avancement de la réparation
- de copier cet état dans ma première feuille.

Tout en sachant bien sûr (pour pimenter le tout ^^" ) que tous les véhicules n'ont pas forcément de réparations à effectuer !
Le tout permettant de savoir quel véhicule est apte ou non à circuler !

(PS : je m'épatte sur mon inventivité car ce n'est absolument pas le cadre de mon travail ! mais parlant en même temps du salon de l'auto avec un collègue, c'est le seul exemple qui m'est venu en tête ! ^^" )

En espérant vous avoir fournit assez de détail pour pouvoir m'aider ?! Sinon, de toute façon, je repasserais sur le forum pour voir =)

Voici le début de mon code :

Code:
Sub TestResearch()
'
' TestResearch Macro
' Essai pour la recherche d'une valeur en VB
'
    
'
' Définition des variables
' numAno = numero de l'anomalie a chercher
' ligne = numéro de la ligne sur laquelle on souhaite effectuer la recherche
' colonne = numéro de la colonne sur laquelle on souhaite effectuer la recherche
' plage est la plage sur laquelle on souhaite effectuer la recherche
'

    Dim numAno As String
    Dim ligne As Integer
    Dim colonne As Integer
    Dim Plage As Range
    

'
' Initialisation des variables
'
    
    ligne = 18
    colonne = 9
    numAno = Workbooks(1).Worksheets(2).Cells(colonne, ligne)
       
    Set Plage = Worksheets(4).Range("B4:B20773").Find(numAno)
    Plage.Select


End Sub

Sachant que je n'ai pas eu l'occasion de tester les bouts de codes copiés directement à partir du net, je ne comprends pas à quoi sert le "Plage.Select". Et je ne suis pas du tout sûr de mon Find :eek:

Merci d'avance pour les conseils que vous pourrez m'apporter =)
 

Dapounet

XLDnaute Nouveau
Re : Méthode Find

un petit up ! ^^'

Ici, j'ai un problème avec ma variable toto. Apparemment ce serait un problème de type ?!

Je voudrais mettre la valeur de toto ("Validé" ou "Pas validé") dans la Destination précisée.

toto.Copy Destination:=Worksheets(7).Range(Cells(lignef1, 31))

Sachant qu'en fait "validé" ou "pas validé" est le résultat d'une fonction (un tas de SI ajoutés ^^" ) comment faire s'il vous plaît ? =)
 

skoobi

XLDnaute Barbatruc
Re : Méthode Find

Re bonjour,

Ici, j'ai un problème avec ma variable toto. Apparemment ce serait un problème de type ?!
toto ici est une variable "String" puisqu'il récupère la valeur de la cellule.
En bleu la correxion.
De plus j'ai réarrangé la structure des IF ... ENDIF (plus logique à mon avis)
Code:
.............  
........
Set Plage = Worksheets(8).Range("B4:B65536").Find(What:=numAno, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, SearchOrder:=xlByRows, SearchDirection:=xlNext)
  ' Si il y a une valeur pour l'etat :
  If Not Plage Is Nothing Then
    ' On copie l'etat situe dans la feuille 4 sur la feuille 2
    toto = Plage.Offset(0, 35).Value
    [B][COLOR=blue]Worksheets(7).Range(Cells(lignef1, 31)).Value = toto[/COLOR][/B]
    ' Si l'etat est "valide" alors on incremente colonne pour regarder si il y a une autre anomalie
    If toto = "Validé" Then
      colonnef1 = colonnef1 + 1
      colonnef2 = colonnef2 + 1
      ' Si l'etat est different de "valide" alors on incremente ligne pour passer au folio/raster suivant
    ElseIf toto <> "Validé" Then
      lignef1 = lignef1 + 1
      lignef2 = lignef2 + 1
      colonnef1 = 8
      colonnef2 = 2
    End If
  ' Ici, j'ai du supprimer un end if car à la compilation, il m'a dit qu'il ne correspondait à aucun if. Pourquoi ?!
  ' Si il n'y a pas de valeur pour l'etat d'une anomalie :
  Else
    Worksheets(7).Range(Cells(lignef1, 31)) = "Validé"
    lignef1 = lignef1 + 1
  End If
End Sub

Si tu veux analyser la colonne (ou ligne) suivante, l'incrémentation est bonne mais il manque une boucle (genre Do... Loop) afin d'analyser ce nouvel état, tout en sachant à quel moment tu veux sortir de la boucle "Exit Do" (à la fin de la liste?).
Sans un fichier avec des données factices, c'est difficile de faire une proposition...
 

Dapounet

XLDnaute Nouveau
Re : Méthode Find

Merci bien !
Pour le type, je pensais bien que c'était une chaîne mais j'avais quelques erreurs quand je l'affectais pour toto ! :S

Mais j'ai avancé dans la journée et mon travail est presque achevé !!! La suite est sur le sujet "Problème Quantifieur" ! ;)

Sinon, pour les fichiers factices .... ils sont sur la page 1 de ce topic !! ^^"

Merci pour ton aide ! =)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35