Bonsoir tous ,j'aurai besoin de vos compétences en matière de VBA )
j’ai une base de donnée avec plein de devis sur chaque ligne j’ai le numéro de devis en colonne À et ensuite j’ai l’adresse, le nom de la personne et le montant et j’ai une une cellule qui s’appel en cours en cellule D et quand un devis et adjugé j’écris manuellement « validé » et si il est refusé j’écris « refuser » manuellement très basique. Mais je dois chaque fois aller rechercher le devis en question parmi plein d’autre et j’aimerais automatiser ça
J’aimerais créer une macro toute simple avec un bouton
Exemple j’écris le numéro du devis dans une cellule et à côté, j’aurai le bouton, je clique sur le bouton et il m’écrit automatiquement validé dans la bonne cellule en fonction du numéro de devis taper préalablement et je recommence avec un autre devis
Et si il est refusé j’aurai le même bouton mais qui écrit refusé
Il faudrai d’après ce que j’ai pu lire que je puisse mettre une sorte de fonctions de recherchv qui va chercher le numéro du devis pour ensuite coller le mot « validé » dans la bonne cellule en tant que valeur fixe.
Normal, j'avais une chance sur deux.
je testais qu'un N° de devis en forme de nombre.
En PJ je traite les nombres et les chaines.
Le souci vient du fait que un textbox ne remonte qu'une chaine de caractère qu'on ne peut pas tester par rapport à des nombres. Donc il faut faire la conversion chaine nombre. Mais ça ne marche plus si le N° est une chaine.
VB:
Private Sub Cherche(Numéro, Statut)
Dim Ind%, a
On Error Resume Next ' Test si N° de devis est une chaine
Ind = Application.Match(CStr(Numéro), Sheets("Liste Devis").[B:B], 0)
If Err > 0 Then
On Error Resume Next ' Test si N° de devis est un nombre
Ind = Application.Match(Val(Numéro), Sheets("Liste Devis").[B:B], 0)
End If
If Err = 0...
Re,
un premier jet en PJ avec l'userform StatutDevis et les macros associées :
VB:
Private Sub CommandButton1_Click()
Dim Ind%
On Error Resume Next
Ind = Application.Match(Val(StatutDevis.Devis), Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = "Refusé"
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Private Sub CommandButton2_Click()
Dim Ind%
On Error Resume Next
Ind = Application.Match(Val(StatutDevis.Devis), Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = "Validé"
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Re,
un premier jet en PJ avec l'userform StatutDevis et les macros associées :
VB:
Private Sub CommandButton1_Click()
Dim Ind%
On Error Resume Next
Ind = Application.Match(Val(StatutDevis.Devis), Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = "Refusé"
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Private Sub CommandButton2_Click()
Dim Ind%
On Error Resume Next
Ind = Application.Match(Val(StatutDevis.Devis), Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = "Validé"
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Le même mais avec une macro plus maintenable, avec un seul module d'analyse.
VB:
Private Sub CommandButton1_Click()
Cherche Val(StatutDevis.Devis), "Refusé"
End Sub
Private Sub CommandButton2_Click()
Cherche Val(StatutDevis.Devis), "Validé"
End Sub
Private Sub Cherche(Numéro, Statut)
Dim Ind%
On Error Resume Next
Ind = Application.Match(Numéro, Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = Statut
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Le même mais avec une macro plus maintenable, avec un seul module d'analyse.
VB:
Private Sub CommandButton1_Click()
Cherche Val(StatutDevis.Devis), "Refusé"
End Sub
Private Sub CommandButton2_Click()
Cherche Val(StatutDevis.Devis), "Validé"
End Sub
Private Sub Cherche(Numéro, Statut)
Dim Ind%
On Error Resume Next
Ind = Application.Match(Numéro, Sheets("Liste Devis").[B:B], 0)
If Err = 0 Then
Sheets("Liste Devis").Cells(Ind, "M") = Statut
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
Normal, j'avais une chance sur deux.
je testais qu'un N° de devis en forme de nombre.
En PJ je traite les nombres et les chaines.
Le souci vient du fait que un textbox ne remonte qu'une chaine de caractère qu'on ne peut pas tester par rapport à des nombres. Donc il faut faire la conversion chaine nombre. Mais ça ne marche plus si le N° est une chaine.
VB:
Private Sub Cherche(Numéro, Statut)
Dim Ind%, a
On Error Resume Next ' Test si N° de devis est une chaine
Ind = Application.Match(CStr(Numéro), Sheets("Liste Devis").[B:B], 0)
If Err > 0 Then
On Error Resume Next ' Test si N° de devis est un nombre
Ind = Application.Match(Val(Numéro), Sheets("Liste Devis").[B:B], 0)
End If
If Err = 0 Then ' Si pas d'erreur
Sheets("Liste Devis").Cells(Ind, "M") = Statut
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
( d'où l'intérêt de n'avoir qu'un module en cas de modif. quand je parlais de maintenance ... )
Normal, j'avais une chance sur deux.
je testais qu'un N° de devis en forme de nombre.
En PJ je traite les nombres et les chaines.
Le souci vient du fait que un textbox ne remonte qu'une chaine de caractère qu'on ne peut pas tester par rapport à des nombres. Donc il faut faire la conversion chaine nombre. Mais ça ne marche plus si le N° est une chaine.
VB:
Private Sub Cherche(Numéro, Statut)
Dim Ind%, a
On Error Resume Next ' Test si N° de devis est une chaine
Ind = Application.Match(CStr(Numéro), Sheets("Liste Devis").[B:B], 0)
If Err > 0 Then
On Error Resume Next ' Test si N° de devis est un nombre
Ind = Application.Match(Val(Numéro), Sheets("Liste Devis").[B:B], 0)
End If
If Err = 0 Then ' Si pas d'erreur
Sheets("Liste Devis").Cells(Ind, "M") = Statut
Unload StatutDevis
Else
MsgBox "N° de devis non trouvé."
StatutDevis.Devis = ""
End If
End Sub
( d'où l'intérêt de n'avoir qu'un module en cas de modif. quand je parlais de maintenance ... )
1- Vous ouvrez mon fichier et le votre, puis Alt+F11 pour ouvrir l'éditeur VBA.
2- Vous Cliquez dans mon fichier sur StatutDevis puis vous faites glisser dans votre fichier
3- Vous Cliquez dans mon fichier sur LanceStatutDevis puis vous faites glisser dans votre fichier
Normalement c'est tout. C'est opérationnel.
Dans votre fichier vous créez un bouton et avec clic droit "Affecter une macro" vous accrochez la macro Lance.
1- Vous ouvrez mon fichier et le votre, puis Alt+F11 pour ouvrir l'éditeur VBA.
2- Vous Cliquez dans mon fichier sur StatutDevis puis vous faites glisser dans votre fichier
3- Vous Cliquez dans mon fichier sur LanceStatutDevis puis vous faites glisser dans votre fichier
Normalement c'est tout. C'est opérationnel.
Dans votre fichier vous créez un bouton et avec clic droit "Affecter une macro" vous accrochez la macro Lance.
Merci beaucoup j'ai fait depuis windows car sur Excel depuis un Mac on n'arrive pas a glisser les fichiers bizarre entour cas tout fonctionne niquel vraiment merci beaucoup pour ton aide