Macro ?

Petite requête pour contrôler des données :

J'ai une colonne dans laquelle figure mes créneaux horaires de 0 à 23, chaque créneau étant dans une cellule différente.

J'ai besoin de contrôler que les 23 premières cellules sont bien de 0 à 23, si c'est OK => RAS, passage aux 23 cellules suivantes, même contrôle.

En revanche si KO => me dire quels chiffres manquent dans un message box ?

Merci d'avance !

Bonjour Oo_Pan,

Un fichier (ou même une capture d'écran) nous permettrait de mieux cerner ton problème :p

C'est comme si je nous te disions comment écrire la macro, sans te donner le code !

Dans l'attente de te lire

Okai !

Voilou le fichier !

8test.xlsx (100.15 Ko)

Bonjour le fil, bonjour le forum,

Peut-être comme ça (à adapter car tu es peu précis) :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
COL = 1 'définit la colonne COL (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
TV = O.Range(O.Cells(1, COL), O.Cells(DL, COL)) 'définit le tableau des valeurs TV
J = 0 'initialise la variable J
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If J = 24 Then J = 0 'si J est égale a 24 alors J vaut 0
    If TV(I, 1) <> J Then 'condition : si la cellule ligne I colonne 1 de TV est différente de J
        MsgBox "Manque : " & J 'message
        O.Cells(I, 1).Select 'sélectionne la cellule ligne I colonne 1 de l'onglet O
        Exit Sub 'sort de la procédure
    Else 'sinon
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

[Édition]

P... ! Je viens d'ouvrir ton fichier !?... Quel rapport avec ta requête ?...

Je rejoins la question de ThauThème !

Quelle est la colonne où il faut tester que sa aille de 0 à 23 xD ?

Tu en a aucune qui répond à cette condition x)

Dans le fichier il s'agit de la colonne F.

Je vous ai simplifié le fichier pour vous montrer exactement ce que je souhaite.

Désolé toujours plus clair pour celui/celle qui présente le problème que celui/celle qui le lit.

4test.xlsx (68.15 Ko)

Bon eh bien voilà un test '-'

J'suis vraiment pas certains d'avoir compris le problème, donc à revoir.

Le Message Box arrive même pas à afficher toute les lignes n'allant pas de 0 à 23 x)

2pour-oo-pan.xlsm (102.24 Ko)

Bonjour le fil, bonjour le forum,

Le premier code adapté. Il implique que chaque fois que tu as un message, tu insères une ligne avec le numéro manquant et tu relances la macro. On pourrait aussi demander à la macro de le faire mais je ne sais pas si c'est cela que tu veux...

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

Set O = Worksheets("test_2017") 'définit l'onglet O (à adapter à ton cas)
COL = 6 'définit la colonne COL (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
TV = O.Range("A2").CurrentRegion 'définit le tableau des valeurs TV
J = 0 'initialise la variable J
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If J = 24 Then J = 0 'si J est égale a 24 alors J vaut 0
    If TV(I, COL) <> J Then 'condition : si la cellule ligne I colonne 1 de TV est différente de J
        MsgBox "Manque : " & J 'message
        O.Cells(I + 1, COL).Select 'sélectionne la cellule ligne I colonne 1 de l'onglet O
        Exit Sub 'sort de la procédure
    Else 'sinon
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

Parfait @ ThauThème !

Merci quand même Juice (ta solution est sûrement bonne aussi puisque cela fonctionne dans mon tableau, mais je garde la fonctionnelle !)

@ThauThème : Admettons que je veuille rajouter la ligne avec le chiffre identifié, je le rajoute à l'intérieur de la macro ?

Rows.insert ?

Re,

le code adapté :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

debut: 'étiquette
Set O = Worksheets("test_2017") 'définit l'onglet O (à adapter à ton cas)
COL = 6 'définit la colonne COL (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
TV = O.Range("A2").CurrentRegion 'définit le tableau des valeurs TV
J = 0 'initialise la variable J
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If J = 24 Then J = 0 'si J est égale a 24 alors J vaut 0
    If TV(I, COL) <> J Then 'condition : si la cellule ligne I colonne 1 de TV est différente de J
        MsgBox "Manque : " & J 'message
        O.Rows(I + 1).Insert
        O.Cells(I + 1, COL).Value = J 'sélectionne la cellule ligne I colonne 1 de l'onglet O
        GoTo debut 'va à l'étiquette "debut"
    Else 'sinon
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

Parfait !

Merci beaucoup !

Rebonsoir ThauThème !

Bon je vais chippoter un peu mais j'ai lancé la macro sur plusieurs onglets sans soucis.

La bizarrement je lance ma macro et elle tourne toujours sur le même chiffre. Elle me rajoute dès 0 à la suite dès qu'elle a trouvé un vide.

Alors que tout à l'heure aucun souci pour que ça fonctionne parfaitement... une idée ?

capture

Re,

Aucune ! Plutôt qu'une capture d'écran, envoie le fichier...

Bonjour,

à tout hasard, peut-être en ajoutant un test pour éviter de faire le job quand une ligne est vide ? extrait :

  For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If J = 24 Then J = 0 'si J est égale a 24 alors J vaut 0
    If TV(I, COL) <> "" Then '<--- AJOUT DE CE TEST
      If TV(I, COL) <> J Then 'condition : si la cellule ligne I colonne 1 de TV est différente de J
        MsgBox "Manque : " & J 'message
        O.Rows(I + 1).Insert
        O.Cells(I + 1, COL).Value = J 'sélectionne la cellule ligne I colonne 1 de l'onglet O
        GoTo debut 'va à l'étiquette "debut"
      Else 'sinon
        J = J + 1 'incrémente J
      End If 'fin de la condition
    End If
  Next I 'prochaine ligne de la boucle

dhany

@dhany : merci pour cela mais je crois que ça ne change rien, j'ai le sentiment que ce n'est pas tant ça le problème !

Voila le fichier et le bug quand tu lances la macro... !

3test.xlsm (77.22 Ko)

désolé, j'ai pas trouvé peut-être que ThauThème aura une idée ?

dhany

Y'a un truc que je ne comprends pas @Dhany, c'est que la macro a très bien fonctionné au début, genre deux trois onglets.

J'ai juste changé le nom de l'onglet pour aller de l'un à l'autre mais c'est tout, et d'un coup, cela ne fonctionne pas.

Chez toi aussi tu as ce problème la ?

Re,

Dans ton premier fichier test, le tableau commençait à la ligne 2 pour les en-têtes et dans ce dernier, il commence à la ligne 1 donc tout est décalé. Il faut une première ligne vide et tout rentrera dans l'ordre... Ce nouveau code te rajoutera une ligne...

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)

Set O = Worksheets("test_2017") 'définit l'onglet O (à adapter à ton cas)
COL = 6 'définit la colonne COL (à adapter à ton cas)
If O.Range("B1").Value <> "" Then O.Rows(1).Insert
debut: 'étiquette
DL = O.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne COL de l'onglet O
TV = O.Range("A2").CurrentRegion 'définit le tableau des valeurs TV
J = 0 'initialise la variable J
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If J = 24 Then J = 0 'si J est égale a 24 alors J vaut 0
    If TV(I, COL) <> J Then 'condition : si la cellule ligne I colonne 1 de TV est différente de J
        MsgBox "Manque : " & J 'message
        O.Rows(I + 1).Insert
        O.Cells(I + 1, COL).Value = J 'sélectionne la cellule ligne I colonne 1 de l'onglet O
        GoTo debut 'va à l'étiquette "debut"
    Else 'sinon
        J = J + 1 'incrémente J
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

Je suis quand même très étonné que tu ne t'en sois pas rendu compte toi même...

Hannnn

Non mais en plus je commençais à me dire que ça venait certainement du fait de la ligne de départ mais je ne comprenais pas pourquoi...

Peux-tu juste m'expliquer

TV = O.Range("A2").CurrentRegion 'définit le tableau des valeurs TV

?

Merci encore !

Rechercher des sujets similaires à "macro"