PB:récupérer une sélection dans VB Excel
boulet
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
bonjour!
Tout d'abord désoler de vous embèter.
Je suis débutante en programmation et je me demande si vous pourriez m'aider.
J'ai un sousie avec une fonction dans excel visual basic: je n'arrive pas à transcrire la plage de donnée selectionner dans le classeur, la selection, en tableau dans ma fonction : pourriez vous m'aider?
Voici mon code, je cherche à faire une fonction qui prend une plage de donnée en entrer et qui renvoie 0 si toute les case sont différentes ou 1 sinon:
Function dif(r)
c = r.Columns.Count
l = r.Raws.Count
s = 0
For k = 1 To l
For m = 1 To c
a = r.Cells(l, m).Values
For j = 1 To c
For i = 1 To l
If (a = (r.Cells(i, j).Values)) Then
s = s + 1
End If
Next i
Next j
Next m
Next k
If (s = (c * l)) Then
dif = 0
Else
dif = 1
End If
End Function
En gros ma function récupére la plage de donnée et pour chaque case de la plage , elle compte combien de cellules ont la meme valeurs.
elle additionne la les scores de toutes les cases et si la somme et supérieur au nombre de cases alors au moins 2 cases sont identiques et donc elle renvoie 1
Dans fonction j'arrive pas à récupérer r comme un tableau, un petit coup de main?
Tout d'abord désoler de vous embèter.
Je suis débutante en programmation et je me demande si vous pourriez m'aider.
J'ai un sousie avec une fonction dans excel visual basic: je n'arrive pas à transcrire la plage de donnée selectionner dans le classeur, la selection, en tableau dans ma fonction : pourriez vous m'aider?
Voici mon code, je cherche à faire une fonction qui prend une plage de donnée en entrer et qui renvoie 0 si toute les case sont différentes ou 1 sinon:
Function dif(r)
c = r.Columns.Count
l = r.Raws.Count
s = 0
For k = 1 To l
For m = 1 To c
a = r.Cells(l, m).Values
For j = 1 To c
For i = 1 To l
If (a = (r.Cells(i, j).Values)) Then
s = s + 1
End If
Next i
Next j
Next m
Next k
If (s = (c * l)) Then
dif = 0
Else
dif = 1
End If
End Function
En gros ma function récupére la plage de donnée et pour chaque case de la plage , elle compte combien de cellules ont la meme valeurs.
elle additionne la les scores de toutes les cases et si la somme et supérieur au nombre de cases alors au moins 2 cases sont identiques et donc elle renvoie 1
Dans fonction j'arrive pas à récupérer r comme un tableau, un petit coup de main?
2 réponses
bonjour
Si j'ai bien compris ton but, je te propose ceci :
Puisque tu veux 1 en résultat si tu as deux cellules égales, on sort des tests dès l'égalité et si aucune égalité trouvée, cela rend 0.
Si j'ai bien compris ton but, je te propose ceci :
Function dif(r As Range)
Dim cl1 As Object
Dim cl2 As Object
For Each cl1 In r
For Each cl2 In r
If cl1.Address <> cl2.Address _
And cl1.Value = cl2.Value Then
dif = 1
Exit Function
End If
Next cl2
Next cl1
dif = 0
End Function
Puisque tu veux 1 en résultat si tu as deux cellules égales, on sort des tests dès l'égalité et si aucune égalité trouvée, cela rend 0.
Vraiment: c'est exactement ce que je voulais et en plus c'est plus simple (meme plus la peine de s'embeter à récupérer le nombre de ligne et de colonne).
En gros: gros merci, ça fesait déja 3 jours que je chercher à comprendre comment on fesait (je suis vraiment un boulet!) et en plus maintenant j'ai compris le truc (définition de ma variable comme un range et définition des variables cellules de ce range comme des objets), donc je serai capable de m'en reservir.
Encore merci et à bientot