Boucle condition si

bonjour, je désire mettre dans ma feuilles de gestion de base de donnée un "m" en colonne "J" quand en colonne "i" il y a une valeur dans les cellules autre que "N/A (ce sont des chiffre qui sont si pas #n/a.

j'ai commencer la macro mais elle ne marche pas je ne comprend pas pourquoi ..

Sub ColM()

Dim ColM As Integer

ColM = MsgBox("Voulez-vous modifier ce devis ?", vbYesNo)

Sheets("BDD devis Détail").Select

If Not IsError("I2") Then

ActiveCell.Offset(0, 1).Select

Sheets("BDD devis Détail").Select

Range("j2").Activate = "M"

Else

ActiveCell.Offset(1#).Select

MsgBox ("Opération annulée")

End If

End Sub

Bonjour,

Essaie ainsi :

Public Sub ColM()
Dim ws As Worksheet
Dim ColM As VbMsgBoxResult

    ColM = MsgBox("Voulez-vous modifier ce devis ?", vbYesNo + vbQuestion)
    If ColM = vbNo Then Exit Sub
    Set ws = ActiveWorkbook.Worksheets("BDD devis Détail")
    With ws
        If Not IsError(.Cells(2, 9)) Then
            .Cells(2, 10).Value = "M"
        Else
            MsgBox ("Opération annulée"), vbInformation
        End If
    End With
    Set ws = Nothing

End Sub

super ça marche !! mais comment je fais pour que il me parcoure toutes la colonnes ?

Bonjour Roxane,

Globalement quand tu codes, essaie de toujours définir avec précision dans tes macros les "lieux" d'action. Je m'explique :

Dans ton code, il est écrit :

If Not IsError("I2") Then  'Si la cellule I2 n'est pas en erreur
ActiveCell.Offset(0, 1).Select  'Décale-toi d'une cellule à partir de ta cellule active

Sauf que rien ne dit dans ton code que ta cellule active est I2.

Si ton cusrseur est sur A1, ton code va vérifier que I2 est OK, puis il va se positionner en B1

Ensuite ton code dit :

Sheets("BDD devis Détail").Select 'sélectionne la feuille --> pourquoi puisque tu es déjà dessus
Range("j2").Activate = "M"  'et inscrit "M" en J2 --> dans ce cas l'utilisation de ton offset ne sert à rien puisque tu définies finalement J2 en dur.

Ensuite tu dis :

Else
ActiveCell.Offset(1#).Select 'là tu sélectionnes une cellule mais tu ne fais rien dedans ensuite
MsgBox ("Opération annulée") 'Pop-up opération annulée
End If

Voici une proposition de code, je te l'ai annoté pour que tu vois comment il fonctionne. Il parcoure la colonne I, inscrit "M" sur la cellule d'à côté et arrête la procédure en cas d'erreur dans une cellules de I.

Sub ColM()

Dim ColM As Integer

ColM = MsgBox("Voulez-vous modifier ce devis ?", vbYesNo)
Sheets("BDD devis Détail").Select

Sheets("BDD devis Détail").Range("J2:J20").ClearContents 'suppression des "M" de la colonne J (comme ça si le devis a été modifié, ça remet les "M" à zéro et ça revérifié toutes les cellules en colonne I

For a = 2 To 20 'la boucle part de la ligne 2 et s'arrêtera à la ligne 20 (car je ne sais pas quelle longueur fait ton tableau)
    If Not IsError(Cells(a, 9)) Then 'si la cellule i... n'est pas en erreur
            Cells(a, 9).Offset(0, 1).Value = "M" 'alors décale-toi d'une cellule à droite et inscrit "M"
        Else
            MsgBox ("Opération annulée") ' sinon opération annulée
            Exit Sub 'Là j'ai mis un "Exit For", cela signifie qu'on sort de la procédure si ce message apparait --> fin de la procédure (je ne sais pas si c'est ça que tu veux faire)
        End If
Next a

End Sub

(Oups je ne fus pas assez rapide ^^)

Enfet c'est quand je dit oui je modifie les M se mettent et si je dit non il ne se passe rien.

en revanche oui je voudrais que va me parcoure toutes la colonne I et mette M dans toutes les cellule de J ou il vois un chiffre dans les cellules de la colonne I

Dans ce cas si tu veux qu'il ne se passe rien quand c'est en erreur, mais que la boucle continue, alors ça ne sert à rien de mettre un "else"

Sub ColM()

Dim ColM As Integer

ColM = MsgBox("Voulez-vous modifier ce devis ?", vbYesNo)
Sheets("BDD devis Détail").Select

For a = 2 To 20 'la boucle part de la ligne 2 et s'arrêtera à la ligne 20 (car je ne sais pas quelle longueur fait ton tableau)
    If Not IsError(Cells(a, 9)) Then 'si la cellule i... n'est pas en erreur
            Cells(a, 9).Offset(0, 1).Value = "M" 'alors décale-toi d'une cellule à droite et inscrit "M"
    End if
Next a

End Sub
capture capture

le code marche mais voila ce qui se passe ..

il me met des M partout alors que je voudrais qu'il ne mette M que quand il vois pas #N/A. car c'est une base de donnée donc au fils des jours elle est agrémenter de nouvelles information .. et il ne faut pas tout le temps que M se mette seulement quand un chiffre apparaît.

Voici en photo joint ce que ça ma fait

Ok, Revoilà un bout de code un peu modifié pour parcourir l'ensemble de la colonne.

Je l'ai testé chez moi, il détecte bien les NA, donc s'il ne les détecte pas sur ta base de données, c'est que tes NA ne sont pas le résultat d'une erreur de calcul. Sont-ils écrits "en dur", c'est à dire "en texte" ? Concrètement qu'est-ce qu'il y a d'écrit comme formule dans la cellule où s'affiche NA ? Le plus simple serait que tu nous uploades la feuille excel concernée pour que nous puissions voir concrètement ce qui se passe.

Sub ColM()

Dim ColM As Integer

ColM = MsgBox("Voulez-vous modifier ce devis ?", vbYesNo)
Sheets("BDD devis Détail").Select

Dim DernLigne As Long
DernLigne = Sheets("BDD devis Détail").Range("C65536").End(xlUp).Row

For a = 2 To DernLigne
    If Not IsError(Cells(a, 9)) Then
            Cells(a, 9).Offset(0, 1).Value = "M"
    End If
Next a

End Sub

c'est une formule équiv dans la colonne i


super ça marche merci beaucoup de votre aide !!!!

Super, bonne continuation !

Rechercher des sujets similaires à "boucle condition"