Valider, rechercheAfiicher et modifier
Bonjour à tous
Demande d’aide
BoutonVALIDER : pour chaque ligne, remplir la premiere cellule vide trouvée
Problème, ça ne marche pas avec la ligne 1
BoutonRECHERCHER : recherche et afficher
Problème : ça ne marche pas avec textbox4 et textbox5(derniereCellule non vide)
BoutonMODIFIER : modifie les données
Problème : ça ne marche pas du tout
BoutonSUPPRIMER : aucun soucis
ci-joint le fichier y compris le code
cordialement
Bonjour Konan255,
Le premier souci :
BoutonVALIDER : pour chaque ligne, remplir la premiere cellule vide trouvée
Problème, ça ne marche pas avec la ligne 1
La recherche du "Nom" se fait sur la colonne entière. La cellule "A1" contient la même info que "A2". La recherche trouve donc A1 en premier et non A2 qui est le premier "Nom" de ta liste. Change l'entête pour "Nom" ou "Nom Client" et le souci sera parti.
Biz
Bonjour Konan 255,
Pour le 2e souci :
BoutonRECHERCHER : recherche et afficher
Problème : ça ne marche pas avec textbox4 et textbox5(derniereCellule non vide)
Private Sub CommandButton2_Click() ' Rechercher
Dim Ws As Worksheet
Dim searchValue As String
Dim cell As Range
Set Ws = ThisWorkbook.Sheets("Feuil1")
searchValue = Me.TextBox2.Value
Set cell = Ws.Range("A:A").Find(what:=searchValue, LookIn:=xlValues, lookat:=xlWhole)
If Not cell Is Nothing Then
Me.TextBox2.Value = Ws.Cells(cell.Row, 1).Value
Me.TextBox3.Value = Ws.Cells(cell.Row, 2).Value
Me.TextBox4.Value = Ws.Cells(cell.Row, 3).Value
Me.TextBox5.Value = Ws.Cells(cell.Row, cell.Columns.Count).End(xlToLeft).Value
Else
MsgBox "Element non trouve"
End If
End SubBizz
quand j'ajoute Me.TextBox5.Value = Ws.Cells(cell.Row, cell.Columns.Count).End(xlToLeft).Value , ça me ramène "le contenu de A1" dans textbox5
Bonjour Konan255,
Il serait préférable de travailler avec le tableau structuré.
Prenons en exemple le bouton "Valider".
Il faut commencer par renommer l'entête de colonne des noms (cellule A1 de la feuille). J'ai choisi "Nom".
Ensuite, teste ce code :
Private Sub CommandButton1_Click() 'valider
Dim i As Integer
Dim LeNom As String
Dim LigneTrouve As Integer
LeNom = Me.TextBox2.Value
LigneTrouve = Application.Match(LeNom, Range("Tableau1[Nom]"), 0)
If IsError(LigneTrouve) Then
MsgBox "Inexistant"
Exit Sub
else
For i = 4 To Range("Tableau1").Columns.Count
If IsEmpty(Range("Tableau1").Cells(LigneTrouve, i)) Then
Range("Tableau1").Cells(LigneTrouve, i).Value = TextBox5.Value
Exit For
End If
Next i
end if
End SubBizz
Bonjour Konan255,
La recherche ne se fait que sur la colonne "Nom". Il faudrait ajouter le "Prénom".
Donc, rechercher le "Nom" et le Prénom" afin d'éviter les erreurs dues à deux "Nom" semblables.
Bizz
Oui, apres je vais y adapter. jai egalement rectifié les entetes.
le code poue boutonvalider que vous m'avez envoyé marche très bien. Merci infiniment.
il me reste maintenat le bouton rechercher et modifier
Bonjour Konan255,
Si les entêtes de colonne sont :
| Nom | Prénom | Quantité | Q1 | Q2 | Q3 | Q4 | Q5 | Q6 |
Bouton "Rechercher", saisir le "Nom" et tester ce code :
Private Sub CommandButton2_Click() ' Rechercher
Dim Ws As Worksheet
Dim searchValue As String
Dim cell As Range
Dim LeNom
LeNom = Me.TextBox2.Value
LigneTrouve = Application.Match(LeNom, Range("Tableau1[Nom]"), 0)
If IsError(LigneTrouve) Then
MsgBox "Inexistant"
Exit Sub
Else
TextBox3.Value = Range("Tableau1[Prénom]").Rows(LigneTrouve).Value
TextBox4.Value = Range("Tableau1[Quantité]").Rows(LigneTrouve).Value
For i = Range("Tableau1").Columns.Count To 4 Step -1
If Not IsEmpty(Range("Tableau1").Cells(LigneTrouve, i)) Then
TextBox5.Value = Range("Tableau1").Cells(LigneTrouve, i).Value
CelluleVideTrouve = True
Exit For
End If
Next i
End If
End SubBizz
oui, ça marche parfaitement pour la recherche. encore une de fois de plus, merci merci
Bonjour Konan255,
Le 3e souci :
BoutonMODIFIER : modifie les données
Problème : ça ne marche pas du tout
Il faut quand même un élément de recherche. Dans les deux premiers codes, le "Nom" est utilisé; ce code du bouton "Modifié" fait de même.
Modifions donc les trois autres informations.
Au besoin, avec un peu de modifications, il est possible de modifier aussi le "Nom".
Private Sub CommandButton3_Click() 'modifier
Dim LeNom
Dim LigneTrouve
Dim i As Integer
LeNom = Me.TextBox2.Value
LigneTrouve = Application.Match(LeNom, Range("Tableau1[Nom]"), 0)
If IsError(LigneTrouve) Then
MsgBox "Inexistant"
Exit Sub
Else
Range("Tableau1[Prénom]").Rows(LigneTrouve).Value = TextBox3.Value
Range("Tableau1[Quantité]").Rows(LigneTrouve).Value = TextBox4.Value
For i = Range("Tableau1").Columns.Count To 4 Step -1
If Not IsEmpty(Range("Tableau1").Cells(LigneTrouve, i)) Then
Range("Tableau1").Cells(LigneTrouve, i).Value = TextBox5.Value
Exit For
End If
Next i
End If
End SubBizz
Très cool. Merci infiniment, merci infiniment.
Cependant peux tu voir ce code ci dessous pour moi ?
les lignes du tableau etant sous cette forme
Nom Prenom Quantite Q1 Q2 Q3 Q4 Q5 Q6
N1 P1 12000 15 20 78 10 18 25
N2 P2 1280 18 27 78 10 40 25
avec ce code actuel, je veux:
- effectuer une recherche dans la colonne A
- si l'element est retrouvé, afficher:
nom, prenom et quantite dans textbox2, texbox3 et textbox4
decouper le reste de la ligne en correspondante en groupe de 3 et les afficher(entête+contenu) dans listBox comme des ligne
par exemple, si l'element est trouvé dans la ligne1
textbox2(N1), texbox3(P1)) et textbox4(12000)
et dans la listbox
Q1 Q2 Q3
15 20 78
Q4 Q5 Q6
10 18 25
'.............appel de la fonction ci dessous.......................
Private Sub CommandButton5_Click()
Dim element As String
Dim We As Worksheet
element = Me.TextBox2.Value
If element <> "" Then
Set We = ThisWorkbook.Sheets("Feuil1")
MonElemenCher element, We
End If
End Sub
'.........fonction pour listBox1...........
Sub MonElemenCher(element As String, We As Worksheet)
Dim i, j As Long
Dim rng As Range
Dim RowNum, LastCol As Long
Dim ValuesArray() As String
On Error Resume Next
Set rng = We.UsedRange.Find(What:=element, LookIn:=xlValues, LookAt:=xlWhole)
On Error GoTo 0
If Not rng Is Nothing Then
RowNum = rng.Row
LastCol = We.Cells(RowNum, We.Columns.Count).End(xlToLeft).Column
ListBox1.Clear
For i = 4 To LastCol Step 3
If Application.WorksheetFunction.CountA(We.Cells(RowNum, i).Resize(1, 3)) > 0 Then
ReDim ValuesArray(0 To 2)
For j = 0 To 2
If i + j <= LastCol Then
ValuesArray(j) = We.Cells(RowNum, i + j).Value
Else
ValuesArray(j) = ""
End If
Next j
ListBox1.AddItem Join(ValuesArray, vbTab)
End If
Next i
Else
MsgBox "Element non trouve"
End If
End Subquand j'execute, aucune erreur ne s'affiche mais rien ne s'affiche egalement. j'ai tenté egalement avec listView negatif. L'une des deux options(listbox ou listview) me conviendra egalement
merci d'avance
Waouuuuu..... Merci infiniment. ça marche très bien
