Problème VBA
matm
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
matm Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
matm Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour je suis novice en VBA et je rencontre quelques difficultés sur un sujet.
J'explique ,la démarche:
Dans ma feuil 3 il y a une matrice des compétences (fictive) de personne (sur un poste de travail). Lorsque la personne a une notation de 1 cela veut dire qu'elle est entrain d'être formée, lorsqu'elle a 2 c'est qu'elle n'est pas encore autonome, 3 elle est autonome sur ce poste et 4 que c'est un formateur. Le 0 signifie qu'elle ne travail pas sur ce poste.
Le but de la démarche est de créer une boucle qui dirait "dans la feuil3 si dans la plage de cellule allant de A3 à D3 (ou plutôt à x cellule) la valeur de la cellule est > 1 alors sélectionner la cellule qui contient le nom de la personne (ayant une cotation supérieur à 1 donc) par exemple en A3 on voit que la valeur de la cellule est 1 donc je sélectionne la cellule qui se trouve deux lignes au dessus et je la rentre dans la case "agent" du premier tableau de la feuil 2 qui va de A1 à E13. En gros il faut retrouver Hulot Nico dans la plage de cellule de (E2:E13). Ensuite j'analyse dans la feuil 2 si Lebrun George à une cotation supérieur à 1 et si oui on le met dans le second tableau (créer grâce à ta première réponse).
i. faudrait que l'on voit noté Hulot Nico de la case G2 à G13 si les conditions sont remplises par exemple
J'explique ,la démarche:
Dans ma feuil 3 il y a une matrice des compétences (fictive) de personne (sur un poste de travail). Lorsque la personne a une notation de 1 cela veut dire qu'elle est entrain d'être formée, lorsqu'elle a 2 c'est qu'elle n'est pas encore autonome, 3 elle est autonome sur ce poste et 4 que c'est un formateur. Le 0 signifie qu'elle ne travail pas sur ce poste.
Le but de la démarche est de créer une boucle qui dirait "dans la feuil3 si dans la plage de cellule allant de A3 à D3 (ou plutôt à x cellule) la valeur de la cellule est > 1 alors sélectionner la cellule qui contient le nom de la personne (ayant une cotation supérieur à 1 donc) par exemple en A3 on voit que la valeur de la cellule est 1 donc je sélectionne la cellule qui se trouve deux lignes au dessus et je la rentre dans la case "agent" du premier tableau de la feuil 2 qui va de A1 à E13. En gros il faut retrouver Hulot Nico dans la plage de cellule de (E2:E13). Ensuite j'analyse dans la feuil 2 si Lebrun George à une cotation supérieur à 1 et si oui on le met dans le second tableau (créer grâce à ta première réponse).
i. faudrait que l'on voit noté Hulot Nico de la case G2 à G13 si les conditions sont remplises par exemple
4 réponses
Bonjour
en A3 on voit que la valeur de la cellule est 1 donc je sélectionne la cellule qui se trouve deux lignes au dessus
Tu nous expliques ?
en A3 on voit que la valeur de la cellule est 1 donc je sélectionne la cellule qui se trouve deux lignes au dessus
Tu nous expliques ?
J'ai ce code ci mais le problème c'est que ça me met pas le nom des personnes ou je veux. C'est à dire s'il y a trois personne qui ont une cotation >= 1 alors il y aura 3 tableaux et chaque nom se trouvera dans un tableau
Private Sub CommandButton1_Click()
Dim Copiage As Range, Dl As Long, Dc As Integer, noms, Retenu()
Dim Nfois As Integer, x As Integer, y As Integer
On Error Resume Next
Set Copiage = Application.InputBox("Plage à copier", Type:=8)
y = 0
If Not Copiage Is Nothing Then
With Sheets("Feuil3")
Dc = .Cells(1, .Columns.Count).End(xlToLeft).Column
noms = .Range(.Cells(1, 1), .Cells(3, Dc))
Nfois = UBound(noms, 2)
End With
For x = 1 To UBound(noms, 2)
If noms(3, x) >= 1 Then
y = y + 1
ReDim Preserve Retenu(1 To y)
MsgBox noms(1, x)
Retenu(y) = noms(1, x)
End If
Next x
For x = 1 To UBound(Retenu)
With Sheets("Feuil2")
Dl = .Range("A" & .Rows.Count).End(xlUp).Row + 1
Copiage.Copy .Range("A" & Dl)
.Range("G" & x + 1) = Retenu(x)
End With
Next x
Else
Exit Sub
Err.Clear
End If
End Sub
Private Sub CommandButton1_Click()
Dim Copiage As Range, Dl As Long, Dc As Integer, noms, Retenu()
Dim Nfois As Integer, x As Integer, y As Integer
On Error Resume Next
Set Copiage = Application.InputBox("Plage à copier", Type:=8)
y = 0
If Not Copiage Is Nothing Then
With Sheets("Feuil3")
Dc = .Cells(1, .Columns.Count).End(xlToLeft).Column
noms = .Range(.Cells(1, 1), .Cells(3, Dc))
Nfois = UBound(noms, 2)
End With
For x = 1 To UBound(noms, 2)
If noms(3, x) >= 1 Then
y = y + 1
ReDim Preserve Retenu(1 To y)
MsgBox noms(1, x)
Retenu(y) = noms(1, x)
End If
Next x
For x = 1 To UBound(Retenu)
With Sheets("Feuil2")
Dl = .Range("A" & .Rows.Count).End(xlUp).Row + 1
Copiage.Copy .Range("A" & Dl)
.Range("G" & x + 1) = Retenu(x)
End With
Next x
Else
Exit Sub
Err.Clear
End If
End Sub