[VBA] Condition IF

Bonjour.

Imaginons que j'ai ce tableau :

date_1date_2date_3date_4
PierreZZZZ

Henri

A

Z

Z

Z

JackBBBB

J'aimerais bien renvoyer ce tableau :

de date_1 à date_4

PierreZ
JackB

J'ai donc commencé un code :

Sub Verification_Cheapest()
    Dim i As Integer
    Dim j As interger
    dercol = Cells(1, Columns.Count).End(xlToLeft).Column
    derrow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To derrow
        If ...

End Sub

Le souci c'est que je ne sais pas quoi mettre dans la condition IF (ni comment l'écrire). Je souhaitais mettre :

Si à partir de la colonne B, toutes les cases de la ligne i jusqu'à la fin du tableau sont identiques, alors je veux afficher Cells(i,2) par exemple

Comment faire ?
Merci.

PS : Si par ailleurs vous savez comment faire le "de date_1 à date_4" je suis preneur aussi !

bonjour,

un exemple de code : (la répone est mise dans la colonne qui suit la dernière colonne de ton tableau)

Option Explicit
Sub Verification_Cheapest()
    Dim dercol As Long, derrow As Long, i As Long
    dercol = Cells(1, Columns.Count).End(xlToLeft).Column
    derrow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To derrow
        If Application.CountIf(Cells(i, 2).Resize(1, dercol - 1), Cells(i, 2)) = dercol - 1 Then Cells(i, dercol + 1) = Cells(i, 2)
    Next i
End Sub

Bonjour,

Merci ça marche du feu de Dieu !

Est ce que vous seriez comment faire dans un cas plus compliqué :

A partir de :

date_1
date_2date_3date_4
PierreZZZ

Z

Henri

A

Z

Z

Z
JackBBBB

François

##SANS VALEUR##SANS VALEUR

C

C

Renvoyer :

PierreZ
JackB
FrançoisC

Autrement dit :

Si je vois qu'une ligne est sans valeur (i.e ses cases affichent ##SANS VALEUR) jusqu'à une certaine date, puis constante jusqu'à la date finale, alors je la renvoie au même titre que les lignes constantes depuis le début

Merci, je n'ai absolument aucune idée de comment faire.

re-bonjour,

canevas de code

Option Explicit
Sub Verification_Cheapest()
    Dim dercol As Long, derrow As Long, i As Long, j As Long
    dercol = Cells(1, Columns.Count).End(xlToLeft).Column
    derrow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 2 To derrow
        For j = 2 To dercol
            If Not Application.IsNA(Cells(i, j)) Then
                If Application.CountIf(Cells(i, j).Resize(1, dercol - j + 1), Cells(i, j)) = dercol - j + 1 Then Cells(i, dercol + 1) = Cells(i, j)
                Exit For
            End If
        Next j
    Next i
End Sub

Top, merci.
Cependant, je pense que je me suis mal exprimé, quand je disais ##SANS VALEUR, c'est pas #N/A mais plutôt une chaine de caractères/un texte "##VALUE NOT FOUND" quelque chose comme ça.
Du coup je pense remplacer la ligne :

If Not Application.IsNA(Cells(i, j)) Then

Par quelque chose comme :

If EXACT(Cells(i,j), ##VALUE NOT FOUND) = False Then

Bon je vois bien que ce "quelque chose" en question est ignoble mais je n'ai aucune idée de comment l'écrire.

Par ailleurs, je suis tombé sur un autre problème que je vous poserai une fois que celui ci sera résolu (si je ne trouve pas avant, je continue de chercher).

Merci encore.

re-bonjour,

remplace alors

If EXACT(Cells(i,j), ##VALUE NOT FOUND) = False Then

par ceci

If Cells(i,j)<>"##VALUE NOT FOUND" Then

Bonjour ! Merci beaucoup, j'ai du mal avec la syntaxe VBA (sachant que je viens de Python).
Comme je l'ai dit hier, je suis tombé sur un autre problème.

J'aimerais passer de :

date_1date_2date_3date_4date_5date_6
PierreAABACC

à :

de date_1 à date_2date_3date_4de date_5 à date_6
PierreABAC

J'aurais tendance à faire :

s = 1

Pour j = 2 à dercol:

Si Cells(i,j) =/= Cells(i,j+1) alors

Cells(i,dercol + s) = Cells(i,j) et s = s+1

Mais je n'ai aucune idée de comment traduire ça en VBA.
Deuxième problème : je n'ai aucune idée de comment faire pour les "de date_1 à date_2" ect.

Merci encore pour votre aide !

bonjour,

merci de mettre un fichier représentatif de tes données(j'ai compris qu'il y a plusieurs lignes) et du résultat attendu. car jusqu'à présent j'ai l'impression d'avoir proposé des solutions pour rien.

Bonjour,

Merci de ton aide.

3h2so4.xlsx (13.71 Ko)

Ci-joint le fichier.
Sur la Sheet1, le tableau de base et sur la Sheet2, ce que j'aurais idéalement, c'est à dire un détail des caractéristiques (A,B,...) pour chaque ligne en fonction des dates.

Pour Pierre et Jack : comme ils ont une caractéristique constante au cours du temps, l'afficher.
Pour Georges, Henri : afficher leurs différentes caractéristiques au cours du temps.
Pour Hercule, Amandine, Killian : Pareil sans tenir compte dans le tableau des résultats quand leur caractéristique est ##SANS VALUE.

Je ne sais pas si c'est faisable, mais si c'est le cas, merci énormément.

bonjour,

ton fichier exemple avec la macro.

lancer la macro via alt-F8

4h2so4.xlsm (24.69 Ko)

Merci beaucoup !

Bonjour,

Désolé de revenir près d'une semaine après, mais j'ai essayé de modifier votre code (en vain) pour obtenir un résultat un poil différent.

C'est juste une question de mise en forme. Je souhaiterais merger les celulles comportant le nom des personnes et mettre en bleu foncé et en gras les cellules des noms des personnes et des dates, et en bleu plus clair le reste (cf. Sheet résultat attendu). J'ai essayé avec des boucles With à tire-larigot mais ça ne fonctionnait pas.

Ce que je souhaiterais aussi ajouter ça serait à la fin de la sheet, une case remplie de la façon suivante : ["A","B","Z","U","V","C"] c'est à dire avec toutes les caractéristiques qui apparaissent.

Si vous savez comment faire/comment modifier le code, ça serait top.
Merci beaucoup!

4h2so4-1.xlsm (22.84 Ko)
Rechercher des sujets similaires à "vba condition"