Macro données obligatoires avec des conditions

  • Initiateur de la discussion Initiateur de la discussion roidurif
  • Date de début Date de début

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 !

roidurif

XLDnaute Occasionnel
Bonjour,

Dans mon fichier, Les colonnes "C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC" sont obligatoire lorsque une donnée est saisie en "A".

J'ai créer une macro qui permet contrôle dans ce tableau si ces champs obligatoire ne sont pas manquant et si c'est le cas,alors elle indique le numéro de la cellule dans une autre feuille.

voici le code

Code:
Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long
Colonne = Array("C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC") 'Colonnes obligatoires en bleu
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = LBound(Colonne) To UBound(Colonne)
If .Range(Colonne(i) & NumClient.Row).Value = "" Then _
Sheets("Feuil1").Range("IV13").End(xlToLeft).Offset(0, 1).Value = .Range(Colonne(i) & NumClient.Row).Address(REF_ABS, REF_ABS)
Next
Next

End With
End Sub

Mes 2 problématiques sont :
1) lorsque en "C", il existe une 2ème, 3ème... même références identiques à la 1ère, alors seule les champs "AW", "AX", "BB", "BC" sont obligatoires.
2) lorsque en "B", il est saisie un D, alors seule le champs "C" est obligatoires.

J' espère avoir été assez clair.

Merci de votre aide
 

Pièces jointes

Dernière édition:
Re : Macro données obligatoires avec des conditions

Bonjour roidurif,

J'écrirais, mais à tester :

Code:
For i = 0 To 11
x = .Range(Colonne(i) & NumClient.Row)
If i And x = .Range("C" & NumClient.Row) And x <> "" Then i = IIf(i < 7, 6, i): GoTo 1
If x = "" Then _
'-------------------
If .Range("B" & NumClient.Row) = "D" Then Exit For 'ou peut-être : If InStr(.Range("B" & NumClient.Row), "D")  Then Exit For
1 Next

Edit : non, le 1er test n'est pas bon, il faut je pense tout effacer d'abord, je vois ça

A+
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Re,

Ceci doit être mieux :

Code:
For i = 0 To 11
x = .Range(Colonne(i) & NumClient.Row)
If i And i < 7 And x = .Range("C" & NumClient.Row) And x <> "" Then _
  i = 6 :Sheets("Feuil1").Range("B13:IV13").Clear: GoTo 1
If x = "" Then _
'-------------------
If .Range("B" & NumClient.Row) = "D" Then Exit For 'ou peut-être : If InStr(.Range("B" & NumClient.Row), "D")  Then Exit For
1 Next
Next

A+
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Re,

Ah mais c'est plus compliqué 😡 car il ne faut pas effacer toutes les adresses :

Code:
For i = 0 To 11
x = .Range(Colonne(i) & NumClient.Row)
If i And i < 7 And x = .Range("C" & NumClient.Row) And x <> "" Then
i = 6
For Each cel In Sheets("Feuil1").Range("B13", Sheets("Feuil1").Range("IV13").End(xlToLeft))
If cel.Value Like "*" & NumClient.Row Then cel.Clear
Next
GoTo 1
End If
If x = "" Then _
'-------------------
If .Range("B" & NumClient.Row) = "D" Then Exit For 'ou peut-être : If InStr(.Range("B" & NumClient.Row), "D")  Then Exit For
1 Next
Next

Edit : modifié la recherche dans cel en utilisant Like...

A+
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Bjr job75,

Je viens de tester ta macro et j'ai rien qui ne se passe. je te joins mon fichier stp pour y jetter un oeil.

Corialement
 

Pièces jointes

Re : Macro données obligatoires avec des conditions

Bonjour roidurif,

Mon code montrait les modifications à apporter à votre macro initiale, mais vous n'avez pas su l'adapter 😱

Voici toute la macro (modifications en rouge), testez-la :

Code:
Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long, [COLOR="Red"]x As Variant, cel As Range[/COLOR]
Colonne = Array("C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC") 'Colonnes obligatoires en bleu
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
[COLOR="Red"]For i = 0 To 11
x = .Range(Colonne(i) & NumClient.Row)
If i And i < 7 And x = .Range("C" & NumClient.Row) And x <> "" Then
i = 6
For Each cel In Sheets("Feuil1").Range("B13", Sheets("Feuil1").Range("IV13").End(xlToLeft))
If cel.Value Like "*" & NumClient.Row Then cel.Clear
Next
GoTo 1
End If
If x = "" Then _
[COLOR="Black"]Sheets("Feuil1").Range("IV13").End(xlToLeft).Offset(0, 1).Value = .Range(Colonne(i) & NumClient.Row).Address(REF_ABS, REF_ABS)[/COLOR]
If .Range("B" & NumClient.Row) = "D" Then Exit For 'ou peut-être : If InStr(.Range("B" & NumClient.Row), "D")  Then Exit For
1 Next[/COLOR]
Next
End With
End Sub

A+
 
Re : Macro données obligatoires avec des conditions

Merci job75,
La macro fonctionne bien cette fois-ci

La condition :
2) lorsque en "B", il est saisie un D, alors seule le champs "C" est obligatoires fonctionne bien.

Par contre la condition
1) lorsque en "C", il existe une 2ème, 3ème... références identiques à la 1ère, alors seule les champs "AW", "AX", "BB", "BC" sont obligatoires, ça ne fonctionne pas réellment.

Elle dit que toutes les colonnes "C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC" ne sont pas renseignées.

Je c pas si je me fais comprendre.

Merci
 
Re : Macro données obligatoires avec des conditions

Re,

Alors c'est en effet que je n'ai pas compris :

1) lorsque en "C", il existe une 2ème, 3ème... références identiques à la 1ère

Merci de bien expliquer.

Moi je comprenais que si par exemple C20 contenait une valeur et que D20 ou E20 ou AB20 ou AC20 etc étaient égaux à C20... Et je n'avais même pas le fichier à l'époque.

A+
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Désolé job75 pour mon incompréhension,

Je reformule tout par un exemple:

1ere réf. "20090020" : les colonnes "C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC" sont obligatoires
2eme même ref. "20090020" : "AW", "AX", "BB", "BC" sont obligatoires
3eme même ref. "20090020" : "AW", "AX", "BB", "BC" sont obligatoires

Autre réf. "20090021" : les colonnes "C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC" sont obligatoires

Autres réf. "20090022": les colonnes "C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC" sont obligatoires
2eme même ref. "20090022" : "AW", "AX", "BB", "BC" sont obligatoires

ainsi de suite

J'espere que c'est plus parlant

Merci d avance
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Re,

J'ai compris en regardant mieux le fichier ! Edit : et merci pour l'explication

Il fallait comprendre :

1) lorsque en "C" la référence est égale à celle de la ligne précédente...

Alors c'est simple et voici la macro avec les 2 tests supplémentaires en rouge :

Code:
 Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long
Colonne = Array("C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC") 'Colonnes obligatoires en bleu
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = 0 To 11
[COLOR="Red"]If .Range("C" & NumClient.Row) = .Range("C" & NumClient.Row - 1) And .Range("C" & NumClient.Row) <> "" Then i = 7[/COLOR]
If .Range(Colonne(i) & NumClient.Row) = "" Then _
Sheets("Feuil1").Range("IV13").End(xlToLeft).Offset(0, 1).Value = .Range(Colonne(i) & NumClient.Row).Address(REF_ABS, REF_ABS)
[COLOR="Red"]If .Range("B" & NumClient.Row) = "D" Then Exit For[/COLOR]
Next
Next
End With
End Sub
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Re,

Oui, autant pour moi, il ne faut faire le test que pour i = 0...

Code:
Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long
Colonne = Array("C", "D", "E", "AB", "AC", "AH", "AI", "AW", "AX", "BA", "BB", "BC") 'Colonnes obligatoires en bleu
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = 0 To 11
If [COLOR="Red"]i = 0 And[/COLOR] .Range("C" & NumClient.Row) = .Range("C" & NumClient.Row - 1) And .Range("C" & NumClient.Row) <> "" Then i = 7
If .Range(Colonne(i) & NumClient.Row) = "" Then _
Sheets("Feuil1").Range("IV13").End(xlToLeft).Offset(0, 1).Value = .Range(Colonne(i) & NumClient.Row).Address(REF_ABS, REF_ABS)
If .Range("B" & NumClient.Row) = "D" Then Exit For 'ou peut-être : If InStr(.Range("B" & NumClient.Row), "D")  Then Exit For
Next
Next
End With
End Sub

Edit : j'ai aussi enlevé le GoTo 1 et écrit directement i = 7 (c'était modifié dans mon post précédent)

A+
 
Dernière édition:
Re : Macro données obligatoires avec des conditions

Merci job75, merci pour votre aide

Petites chose que je remarque, lorsqu'il y a des refs identiques "BA" se rajoute au "AW", "AX", "BB", "BC"

Mais ce je voudrais savoir job75, si je veux rajouter par exemple "AH" en plus de champs AW", "AX", "BB", "BC", qu'es ce que je dois modifier?

Merci infiniement
 
Re : Macro données obligatoires avec des conditions

Re,

Pour les BA ah oui c'est vrai, vous ne voulez plus les contrôler, mais là ça me gonfle.

Si vous voulez rajouter AH dans les contrôles, modifiez la macro après l'avoir comprise.

Bonne fin de soirée.
 
Re : Macro données obligatoires avec des conditions

Re,

Bon, je ne veux pas vous empêcher de dormir, alors pour résoudre simultanément les 2 derniers problèmes, dans le tableau mettez BA en 7ème position et AH en 8ème :

Code:
Colonne = Array("C", "D", "E", "AB", "AC", "AI", [COLOR="Red"]"BA", "AH",[/COLOR] "AW", "AX", "BB", "BC")

Avec ces 2 changements (une interversion) on n'a pas besoin de modifier le i = 7.

Bonne nuit.
 
- 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

Discussions similaires

Réponses
5
Affichages
928
Réponses
7
Affichages
819
Réponses
7
Affichages
1 K
Retour