Fonction recherche vba excel

Fermé
thecerebral Messages postés 1 Date d'inscription jeudi 8 mars 2012 Statut Membre Dernière intervention 8 mars 2012 - 8 mars 2012 à 23:29
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 9 mars 2012 à 08:58
Bonjour,
Je cherche à créer differentes macros afin de completer un registre du personnel. J'ai commencé par creer une macro puis on m'a conseillé le vba
Un ami m'a aidé a créer ce code vba pour l'ajout d'un salarié:
' Création_salarié Macro
'

If Sheets("ajout salarié").Cells(12, 3).Value = "OK" Then
Sheets("BASE").Select
Rows("2:2").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Ajout salarié").Select
Range("B4").Select
Selection.Copy
Sheets("BASE").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B7").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("D2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B8").Select
Application.CutCopyMode = False
Selection.Copy
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("E2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B9").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("F2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B10").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("G2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("F2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("H2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("F3").Select
Application.CutCopyMode = False
Selection.Copy
Application.CutCopyMode = False
Selection.Copy
Range("F3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("I2").Select
ActiveSheet.Paste
Sheets("Ajout salarié").Select
Range("B6").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("BASE").Select
Range("K2").Select
ActiveSheet.Paste
Else: MsgBox
End If
End Sub

puis pour faciliter ma tache dans les recherche de personnes j'ai essayé de developper par matricule ( a l'aide de bouquin)

Sub recherche_par_matricule()
Dim B4 As String
Dim Trouve As Boolean
Dim No_ligne As Long
B4 = InputBox("veuillez saisir le matricule", "recherche salarié", "")
Trouve = False
Dim LigneMax As Long
LigneMax = Sheets("recherche salarié").Range("K1").Value
For i = 2 To LigneMax
If Sheets("base").Cells(i, 1).Value = B4 Then
Trouve = True
No_ligne = i
Else
End If
Next i
If Trouve = False Then
MsgBox "Salarié inexistant"
Else
Sheets("recherche salarié").Range("B4") = Sheets("BASE").Cells(No_ligne, 1)
Sheets("recherche salarié").Range("B6").Value = Sheets("BASE").Cells(No_ligne, 9).Value
Sheets("recherche salarié").Range("B7").Value = Sheets("BASE").Cells(No_ligne, 4).Value
Sheets("recherche salarié").Range("B8").Value = Sheets("BASE").Cells(No_ligne, 5).Value
Sheets("recherche salarié").Range("B9").Value = Sheets("BASE").Cells(No_ligne, 6).Value
Sheets("recherche salarié").Range("B10").Value = Sheets("BASE").Cells(No_ligne, 7).Value
Sheets("recherche salarié").Range("B3").Value = Sheets("BASE").Cells(No_ligne, 3).Value
Sheets("recherche salarié").Range("B2").Value = Sheets("BASE").Cells(No_ligne, 2).Value
Sheets("recherche salarié").Range("F3").Value = Sheets("BASE").Cells(No_ligne, 10).Value
Sheets("recherche salarié").Range("F2").Value = Sheets("BASE").Cells(No_ligne, 8).Value

End If

End Sub


Sub enregistrer_modifs()
Dim reponse As Integer
reponse = MsgBox("confirmez", vbYesNoCancel, "Modif salarié")
If reponse = 6 Then
With Sheets("BASE")
.Range(A, No_ligne) = Sheets("recherche salarié").Cells("B4")
.Range().Value = Sheets("recherche salarié").Cells("B6").Value
.Range().Value = Sheets("recherche salarié").Cells("B7").Value
.Range().Value = Sheets("recherche salarié").Cells("B8").Value
.Range().Value = Sheets("recherche salarié").Cells("B9").Value
.Range().Value = Sheets("recherche salarié").Cells("B10").Value
.Range().Value = Sheets("recherche salarié").Cells("B3").Value
.Range().Value = Sheets("recherche salarié").Cells("B2").Value
.Range().Value = Sheets("recherche salarié").Cells("F3").Value
End With
Else
End If
End Sub

Mais malheuresement ces commandes ne fonctionnent pas sa m'a indique erreur d'execution 1004 et j'ai des lignes surlignés en jaune ( la premiere ligne dans enregistrer modifs).

Merci d'avance




A voir également:

2 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
9 mars 2012 à 08:42
Bonjour,

.Range(A, No_ligne) = Sheets("recherche salarié").Cells("B4")
.Range().Value = Sheets("recherche salarié").Cells("B6").Value
.


.Range("A" & No_ligne) si vous avez une variable No_ligne qui existe.

Autrement exemple
.Range("A1").Value

et Cells(4,2) pas Cells("B4")

.Range().Value marche pas erreur de compilation

Bonne suite
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 9/03/2012 à 08:59
Bonjour,

1- Vérifiez systématiquement tout vos noms de feuilles dans les syntaxes : Sheets("Nomdelafeuill").
En effet, je vois des Sheets("base") et des Sheets("BASE"). C'est pas la même chose!!!

2- il te faut compléter, dans ta sub enregistrement les .range()

3- Déclarer toutes tes variables : No_ligne n'est pas déclaré dans la sub enregistrement. A non plus...

4- la syntaxe pour copier coller :
Range("acopier").copy Range("coller")
plus simple, plus rapide et plus efficace que tous tes .Select...

5- un premier "dégrossissage" avec utilisation de la méthode Find pour rechercher plutôt qu'une boucle (cf recherche par matricule):
Option Explicit 

Sub Création_salarié() 
' 

If Sheets("ajout salarié").Cells(12, 3).Value = "OK" Then 
    With Sheets("BASE") 
        .Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
    End With 
    With Sheets("Ajout salarié") 
        .Range("B4").Copy Sheets("BASE").Range("A2") 
        .Range("B2").Copy Sheets("BASE").Range("B2") 
        .Range("B3").Copy Sheets("BASE").Range("C2") 
        .Range("B7").Copy Sheets("BASE").Range("D2") 
        .Range("B8").Copy Sheets("BASE").Range("E2") 
        .Range("B9").Copy Sheets("BASE").Range("F2") 
        .Range("B10").Copy Sheets("BASE").Range("G2") 
        .Range("F2").Copy Sheets("BASE").Range("H2") 
        .Range("F3").Copy Sheets("BASE").Range("I2") 
        .Range("B6").Copy Sheets("BASE").Range("K2") 
    End With 
Else: MsgBox 
End If 
End Sub 

Sub recherche_par_matricule() 
Dim NumMatr As String 
Dim Trouve As Range 
Dim No_ligne As Long, LigneMax As Long 

NumMatr = InputBox("veuillez saisir le matricule", "recherche salarié", "") 

With Sheets("BASE").Columns(1) 
    Set Trouve = .Cells.Find(NumMatr, lookat:=xlWhole) 
End With 
    If Trouve Is Nothing Then 
        MsgBox "Erreur de saisie - ou salarié inexistant" 
        Exit Sub 
    Else 
        No_ligne = Trouve.Row 
    End If 
    Set Trouve = Nothing 
With Sheets("recherche salarié") 
    .Range("B4") = Sheets("BASE").Cells(No_ligne, 1) 
    .Range("B6").Value = Sheets("BASE").Cells(No_ligne, 9).Value 
    .Range("B7").Value = Sheets("BASE").Cells(No_ligne, 4).Value 
    .Range("B8").Value = Sheets("BASE").Cells(No_ligne, 5).Value 
    .Range("B9").Value = Sheets("BASE").Cells(No_ligne, 6).Value 
    .Range("B10").Value = Sheets("BASE").Cells(No_ligne, 7).Value 
    .Range("B3").Value = Sheets("BASE").Cells(No_ligne, 3).Value 
    .Range("B2").Value = Sheets("BASE").Cells(No_ligne, 2).Value 
    .Range("F3").Value = Sheets("BASE").Cells(No_ligne, 10).Value 
    .Range("F2").Value = Sheets("BASE").Cells(No_ligne, 8).Value 
End With 
End Sub 


Sub enregistrer_modifs() 
Dim reponse As Integer 
reponse = MsgBox("confirmez", vbYesNoCancel, "Modif salarié") 
If reponse = 6 Then 
With Sheets("BASE") 
    '.Range("A" ) = Sheets("recherche salarié").Cells("B4") 
    '.Range().Value = Sheets("recherche salarié").Cells("B6").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B7").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B8").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B9").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B10").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B3").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("B2").Value 
    '.Range().Value = Sheets("recherche salarié").Cells("F3").Value 
End With 
Else 
End If 
End Sub


Cordialement,
Franck P
0