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

Merci job75 pour l'aide et l'explication que vous m avez apporté. Grâce à vous j'ai appris pas mal de chose et que je pourrais continuer aider les autres.

Malheureusement, il me reste quelques lacune a apprendre pour finaliser la macro,

Seulement je fais encore appel à vos lumière car je bloque sur une dernière chose, c'est a dire lorsqu'il y' a 2 références identiques, l'une avec un format standard et l'autre avec un petit triangle vert en nombre stocké sous forme de texte,

En conséquence, la macro voit cela comme 2 ref différentes, et donc la 2eme indique les champs manquants

Je suis encore désolé car cela m'aidera bcp dans mon travail

Merci d'avance
 
Re : Macro données obligatoires avec des conditions

Bonsoir roidurif,

J'étais sorti ce soir...

En effet si une même référence peut être un nombre ou du texte (si dans la barre de formule on valide, le texte se transforme en nombre) , il faut systématiquement la convertir en texte avec la fonction CStr :

Code:
Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long
Colonne = Array("C", "D", "E", "AB", "AC", "AI", "BA", "AH", "AW", "AX", "BB", "BC")
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = 0 To 11
If i = 0 And [COLOR="Red"]CStr[/COLOR](.Range("C" & NumClient.Row)) = [COLOR="Red"]CStr[/COLOR](.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
Next
Next
End With
End Sub

Bonne fin de soirée.

Edit : une autre solution est de mettre (avant l'importation des données) toute la colonne C au format Texte. C'est plus sûr quand les textes des références commencent par des 0 (ex 00234567)...

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

Bonjour,

Je m'attendais pas à ce cas là, Je reviens vers car j'ai eu le cas de contrôler une seule ligne, seulement je m'apercois qu'elle s'arrête en erreure sur le code suivant :
Code:
If i = 0 And [COLOR="Red"]CStr[/COLOR](.Range("C" & NumClient.Row)) = [COLOR="Red"]CStr[/COLOR](.Range("C" & NumClient.Row - 1)) And .Range("C" & NumClient.Row) <> "" Then i = 7

es ce que l'on peut remedier à cela lorsque l'on a une seule ligne à contrôler

Code:
Sub Test2()
Sheets("Feuil1").Range("B13:IV13").Clear
Dim Colonne(), NumClient As Range, i As Long
Colonne = Array("C", "D", "E", "AB", "AC", "AI", "BA", "AH", "AW", "AX", "BB", "BC")
With Sheets("BDD")
For Each NumClient In .Range("A2", .[A65536].End(xlUp)).SpecialCells(xlCellTypeConstants)
For i = 0 To 11
If i = 0 And [COLOR="Red"]CStr[/COLOR](.Range("C" & NumClient.Row)) = [COLOR="Red"]CStr[/COLOR](.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
Next
Next
End With
End Sub

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

Bonjour,

Excusez moi de revenir vers vous, je m'apercois que le fait d'ecrire "d" en minuscule, et "D" en majuscule c'est deux choses differentes pour la macro, alors que pour moi ca doit etre pareil.

J'ai rectifié la donne par ce code et cela bloque, es ce que j'ai loupé qq chose?

Code:
If .Range("B" & NumClient.Row) = "D" Or "d" Then Exit For


Je vous remercie par avance

Cordialement
 
- 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