Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
J'ai besoin d'un coup de main en VBA (Excel 2007), une chose je pense relativement simple mais sur laquelle je bute :/
Il s'agit de comparer un nombre aléatoire de cellule (donc ça peut être de 5 cellules à plus d'une centaine), en vérifiant qu'elles sont toutes identiques.
Il faudrait donc que je trouve un moyen pour faire en sorte qu'il liste à partir de la cellule B2 à B* jusqu'à ce qu'il trouve la dernière cellule (qui peut être B30 par exemple). Dans mon traitement, si l'une d'entre elle est différente, il ne doit pas continuer le traitement.
PS: les cellules B2 à B* sont des cellules récupérées d'autres classeurs, visuellement le contenu est une série de chiffre.
Comment puis-je, dans une condition, vérifier que toutes les cellules remplies d'une même colonne sont identiques ?
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Bonjour
Pour trouver la dernière cellule il faut utiliser le code
Dim nomfeuille1 As String ' nom de la feuille
Dim colonne1a As String ' colonne à utiliser
Dim dl1 As Long ' dernière ligne
dl1 = Sheets(nomfeuille1).Range(colonne1a & "65536").End(xlUp).Row
exemple
nomfeuille1="Toto"
colonne1a= "B"
dl1 = Sheets(nomfeuille1).Range(colonne1a & "65536").End(xlUp).Row
Pour trouver la dernière ligne avec des cellules ayant la même valeur
Code:
Sub travdemande()
Dim dl1 As Long
Dim dl2 As Long
Dim cellule As Range
Dim nomfeuille1 As String
Dim col1 As String
Dim lidep1 As Long
Dim data1 As String
'**********************************
nomfeuille1 = ActiveSheet.Name
col1 = "b"
lidep1 = 3
dl1 = Sheets(nomfeuille1).Range(col1 & "65536").End(xlUp).Row + 2
If dl1 <= lidep1 Then Exit Sub ' 2 lignes (modifié)
With Sheets(nomfeuille1)
data1 = .Range("B" & lidep1 -1).Value
For Each cellule In .Range(col1 & lidep1 & ":" & col1 & .Range(col1 & "65536").End(xlUp).Row)
If cellule.Value <> data1 Then
dl2 = cellule.Row
End If
Next cellule
End With
End Sub
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Bonjour Zaknaster, JP14,
Une autre solution plus simple et plus rapide s'il y a beaucoup de données:
Code:
Sub Testval()
Dim tablo As Variant, i As Integer
ActiveSheet.Range("B1").Select
tablo = ActiveCell.CurrentRegion
For i = 2 To UBound(tablo)
If tablo(i, 2) <> tablo(1, 2) Then
Cells(i, 2).Interior.ColorIndex = 46
MsgBox "Erreur cellule à la ligne " & i, vbCritical, "Attention"
' Exit Sub
End If
Next i
End Sub
Si une cellule non conforme est détectée, elle apparaît en rouge et un message d'erreur s'affiche.
J'ai mis en commentaire l'instruction "Exit Sub". Dans ce cas, la procédure continue la recherche jusqu'à la prochaine erreur, affiche un autre message et ainsi de suite. Si tu supprimes le commentaire, la procédure s'arrêtera après la première erreur.
Le paramètre "currentregion" prend en compte toutes les valeurs de la feuille à partir de la cellule sélectionnée et jusqu'à une ligne vierge et une colonne vierge (comme Données - trier).
Bonne question
dl2 contient la ligne ou on change de valeur.
On peut mettre Un MsgBox pour informer l'utilisateur.
Il faut comparer les données de la ligne 2 avec la ligne 3, puis ligne 4, ....
Data1 contient la valeur de la ligne 2 et cellule la valeur des lignes suivantes.
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Merci à vous 2 🙂
Une chose pour Gael, ça marche, cependant, j'ai du mal a comprendre le fonctionnement. Puisqu'a terme, il se peut que la colonne B a partir de B2 change en colonne A a partir de A11 (et a ce moment la c'est les cellules A11 et sous A11 qu'il faut traiter et non plus B2 et sous B2).
C'est la que je me questionne, en essayant de modifier ton code pour faire en sorte qu'il soit effectif a partir de la cellule que je veux.
J'ai beau modifier le Range en haut et les Cells dans la boucle, je ne parviens jamais a traiter à partir d'A11, as tu une idée ?
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Re,
Un point important que j'ai mal expliqué:
Current region va prendre ls données délimitées par des lignes et colonnes vierges; donc si tes données sont de H11:L50 par exemple c'est cette zone qui sera sélectionnée pour constituer la table "Tablo".
Tablo(1,1) représente la 1ère valeur soit ici H11.
On commence toujours en ligne 2 pour comparer avec la valeur en ligne 1 et c'est simplement le n° de colonne qui change. Toujours avec cet exemple si la colonne est H, il faut utiliser Tablo(i,1), pour J Tablo(i,2) etc...
La sélection initiale (Range("B1").select) doit toujours être une cellule qui appartient au tableau de données. Dans cet exemple: Range("I12").select est une solution.
Pour la cellule à modifier, il faut changer les coordonnées en fonction du tableau par exemple dans ce cas:
Code:
Cells(i + 10, 10).Interior.ColorIndex = 46
Puisque l'on commence en ligne 11 et traite la colonne J (=10).
et de même pour Msgbox ...& i+10...
Ci-joint un exemple avec données en H11:L50.
On peut aussi si nécessaire passer des données en paramètre comme l'a suggéré JP14 ou positionner des variables dans la procédure.
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Bonjour,
dans le même genre, je souhaite comparer 2 colonnes ayant un nombre de ligne aléatoire (mais les 2 colonnes ont le même nombre entre elles).
Code:
Option Explicit
Option Base 1
Sub Testval()
Dim tablo As Variant, i As Integer
ActiveSheet.Range("L13").Select
tablo = ActiveCell.CurrentRegion
For i = 2 To UBound(tablo)
If tablo(i, 1) <> tablo(1, 2) Then
Cells(i + 11, 12).Interior.ColorIndex = 46
End If
Next i
End Sub
L'idée c'est qu'il faut que la colonne 1 soit égal a la colonne 2.
Si L12 n'est pas égal à M12, alors il faut coloriser L12
Si L13 n'est pas égal à M13, alors il faut coloriser L13
etc
Cependant ici, dans l'exemple joint L24 = M24 mais pourtant L24 est colorisé
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Bonsoir Zaknaster, bonsoir à tous,
C'est très simple, dans l'exemple précédent, on démarrait à la deuxième ligne et l'on comparait chaque valeur à la première; ici, il faut commencer à la première ligne du tableau et comparer chaque valeur à celle située sur la même ligne à la colonne suivante, donc on commence avec i=1 et on va comparer tablo(i,1) avec tablo(i,2) soit:
Code:
For i = 1 To UBound(tablo)
If tablo(i, 1) <> tablo(i, 2)
Avec la modif que tu avais faite, tu comparais chaque valeur avec Tablo(1,2) c'est à dire la valeur de M12 et tu commencais seulement à la ligne 2 donc L12 ne pouvais jamais être colorisé.
Re : Comparer un nombre de cellules aléatoires d'une même colonne
Bonjour à tous.
Avant toute chose, j'ai fait plusieurs tests et le code fonctionne.
Une chose que je remarque maintenant, c'est que pour ma part j'ai utilisé quelque chose de semblant à :
me permettant d'éviter tout un nombre de chiffre après la virgule et de cette façon limiter le chiffre au centième près.
Cependant, ça n'agit qu'en surface. L'idéal serait de faire en sorte que les colonnes qui sont comparés soient réellement à 2 chiffres après la virgule et non pas en surface, tout ceci directement géré en VBA (a cause d'un nombre de ligne aléatoire).
Pour info, dans la première colonne, il s'agit du résultat d'un calcul d'une ligne et dans la seconde une info récupéré depuis un autre fichier.
Alors que visuellement la valeur de la colonne est la même, elle affiche pourtant rouge. Une idée pourquoi ? Est-ce bien un problème de virgule ?
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.