Comparer un nombre de cellules aléatoires d'une même colonne

zaknaster

XLDnaute Nouveau
Bonjour à tous !

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 ?

Merci pour votre aide,
A+
 

jp14

XLDnaute Barbatruc
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

A tester

JP
 
Dernière édition:

zaknaster

XLDnaute Nouveau
Re : Comparer un nombre de cellules aléatoires d'une même colonne

Bonjour,

merci pour ton code, cependant j'aimerai bien comprendre comment il fonctionne:

Si il y a un chiffre différent dans une des cellules, que fait-il ?
a quoi correspond lidep1 ? la ligne de départ ? Pourquoi est elle a 3 ?
 

Gael

XLDnaute Barbatruc
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).

exemple joint.

@+

Gael
 

Pièces jointes

  • Zaknaster_V1.xls
    23.5 KB · Affichages: 117

jp14

XLDnaute Barbatruc
Re : Comparer un nombre de cellules aléatoires d'une même colonne

Bonjour

Bonjour,

merci pour ton code, cependant j'aimerai bien comprendre comment il fonctionne:

Si il y a un chiffre différent dans une des cellules, que fait-il ?
a quoi correspond lidep1 ? la ligne de départ ? Pourquoi est elle a 3 ?

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.

JP
 

zaknaster

XLDnaute Nouveau
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 ?

merci d'avance
 

jp14

XLDnaute Barbatruc
Re : Comparer un nombre de cellules aléatoires d'une même colonne

Bonsoir

Une piste utiliser une procédure qui appelle les procédures proposées en passant comme paramètre la zone à tester.

exemple

call travdemande(b,3)
call travdemande(a,12)

private Sub travdemande(col1 as string, lidep1 as long)


JP
 
Dernière édition:

Gael

XLDnaute Barbatruc
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.

@+

Gael
 

Pièces jointes

  • Zaknaster_V2.xls
    23.5 KB · Affichages: 75

zaknaster

XLDnaute Nouveau
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é

ci-joint l'exemple

comment puis-je m'y prendre ?
 

Pièces jointes

  • Zaknaster_V4_OKME.xlsm
    15.3 KB · Affichages: 63

Gael

XLDnaute Barbatruc
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é.

@+

Gael
 
Dernière édition:

zaknaster

XLDnaute Nouveau
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 à :

Code:
Range("A10:U1000").Select
Selection.NumberFormat = "0.00"

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 ?

Merci pour votre aide.
 

Gael

XLDnaute Barbatruc
Re : Comparer un nombre de cellules aléatoires d'une même colonne

Bonjour Zaknaster,

Dans ce cas, tu compares les chiffres au format souhaité. Si par exemple tu veux arrêter la comparaison à 2 décimales, tu écris:

Code:
If Format(tablo(i, 1), "0.00") <> Format(tablo(i, 2), "0.00")

Avec cet exemple, "1,350" sera considéré comme égal à "1,358".

@+

Gael
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 232
Membres
103 497
dernier inscrit
JP9231