VBA Remplir cellule sur critères
ERIC71PL
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
cousinhub29 Messages postés 1074 Date d'inscription Statut Membre Dernière intervention -
cousinhub29 Messages postés 1074 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai besoin de votre aide pour une macro.
1. Pourriez vous me corriger le code suivant svp (désolé d'avoir massacré le VBA).
2. Pourriez vous y ajouter en dernière partie:
si cel1 est un blank et si la cellule (cel1.row. en colonne F) = "NCOP"
alors Cel1 = "88888"
si cel1 est un blank et si la cellule (cel1.row. en colonne F) <> "NCOP"
alors Cel1 = "COLLECTED"
Merci d'avance.
J'ai besoin de votre aide pour une macro.
1. Pourriez vous me corriger le code suivant svp (désolé d'avoir massacré le VBA).
Private Sub CommandButton5_Click() Dim Cel As Range, Cel1 As Range Set Cel = Range("Q2:Q" & Range("K65536").End(xlUp).Row) For Each Cel1 In Cel If Cel1 = "." Then Cel1.EntireRow.Delete End If Next For Each Cel1 In Cel If Cel1 Like ("eft*" Or "bank*" Or "pin*" Or "cc*" Or "91*") Then Cel1 = "COLLECTED" End If Next For Each Cel1 In Cel If Cel1 Like ("q*" Or "over*" Or "log*" Or "cust*" Or "cas*" Or "impnd*") Then Cel1 = "AFODT SSC" End If Next End Sub
2. Pourriez vous y ajouter en dernière partie:
si cel1 est un blank et si la cellule (cel1.row. en colonne F) = "NCOP"
alors Cel1 = "88888"
si cel1 est un blank et si la cellule (cel1.row. en colonne F) <> "NCOP"
alors Cel1 = "COLLECTED"
Merci d'avance.
A voir également:
- VBA Remplir cellule sur critères
- Excel compter cellule couleur sans vba - Guide
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
- Excel si cellule contient partie texte ✓ - Forum Excel
- Aller à la ligne dans une cellule excel - Guide
18 réponses
bonjour
If Cel1 Like ("eft*" Or "bank*" Or ....
If Cel1 Like ("eft*" Or "bank*" Or ....
if cel1 like "eft* or cel1 like "bank*" or.....
if(isempty(cel1) then if(cells(cel1.row,"F")="NCOP" then cel1="88888" else cel1="Collected" end if end if
Bonjour,
Juste une petite remarque, concernant la suppression des lignes....
Une suppression de ligne se fait du bas vers le haut....
Bon courage
Juste une petite remarque, concernant la suppression des lignes....
... For Each Cel1 In Cel If Cel1 = "." Then Cel1.EntireRow.Delete End If ...
Une suppression de ligne se fait du bas vers le haut....
Bon courage
Salut Eric,
Désolé je suis un grand débutant dans VBA et donc je ne pourrai pas trop t'aider par contre j'ai une petite question à te poser puisqu'il me semble que tu maîtrise bien le VBA:
En fait, pour un petit projet, je dois choisir un client dans une liste déroulante puis valider, par exemple je choisis client 2 et je valide (sur un interface vba). Alors que dans mon fichier excel, on a associé chaque client à une valeur (par exemple la valeur 35 pour le client 2).
Donc mon souci c'est que j'aimerais que quand je valide par exemple "client2", la valeur qui sera mise dans la cellule est 35 et pas client 2. donc on doit prendre la valeur 35 prédéfinie pour le client 2 et la mettre dans la cellule active.
Merci d'avance :)
Désolé je suis un grand débutant dans VBA et donc je ne pourrai pas trop t'aider par contre j'ai une petite question à te poser puisqu'il me semble que tu maîtrise bien le VBA:
En fait, pour un petit projet, je dois choisir un client dans une liste déroulante puis valider, par exemple je choisis client 2 et je valide (sur un interface vba). Alors que dans mon fichier excel, on a associé chaque client à une valeur (par exemple la valeur 35 pour le client 2).
Donc mon souci c'est que j'aimerais que quand je valide par exemple "client2", la valeur qui sera mise dans la cellule est 35 et pas client 2. donc on doit prendre la valeur 35 prédéfinie pour le client 2 et la mettre dans la cellule active.
Merci d'avance :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
tout d'abord merci de vos réponses.
michel_m le fragment de code que tu m'as fourni ne semble pas correct.
cousinhub29, je ne comprends pas le sens de ta remarque.
Pourriez vous m'écrire la code en entier svp.
Merci.
tout d'abord merci de vos réponses.
michel_m le fragment de code que tu m'as fourni ne semble pas correct.
cousinhub29, je ne comprends pas le sens de ta remarque.
Pourriez vous m'écrire la code en entier svp.
Merci.
Bonjour,
En faisant une seule boucle, et donc en partant du bas vers le haut, ça pourrait donner ceci :
Lorsque tu supprimes des lignes, par exemple la ligne 5, Excel continuera par la 6...
Or comme tu as supprimé la 5, la ligne 6 est donc maintenant en ligne 5, ce qui fera qu'elle ne sera pas testée...Excel testant maintenant l'ex-ligne 7, devenue ligne 6
Fais un essai en mettant dans 2 cellules contigües, un point..
Si tu fais du haut vers le bas, seule la première cellule sera supprimée
Bon dimanche
En faisant une seule boucle, et donc en partant du bas vers le haut, ça pourrait donner ceci :
Private Sub CommandButton5_Click() Dim Cel As Range Dim DerLig As Long, I As Long DerLig = Range("K65536").End(xlUp).Row For I = DerLig To 2 Step -1 Set Cel = Cells(I, "Q") If Cel = "." Then Cel.EntireRow.Delete ElseIf Cel Like "eft*" Or Cel Like "bank*" Or Cel Like "pin*" Or Cel Like "cc*" Or Cel Like "91*" Then Cel = "COLLECTED" ElseIf Cel Like "q*" Or Cel Like "over*" Or Cel Like "log*" Or Cel Like "cust*" Or Cel Like "cas*" Or Cel Like "impnd*" Then Cel = "AFODT SSC" End If Next I End Sub
Lorsque tu supprimes des lignes, par exemple la ligne 5, Excel continuera par la 6...
Or comme tu as supprimé la 5, la ligne 6 est donc maintenant en ligne 5, ce qui fera qu'elle ne sera pas testée...Excel testant maintenant l'ex-ligne 7, devenue ligne 6
Fais un essai en mettant dans 2 cellules contigües, un point..
Si tu fais du haut vers le bas, seule la première cellule sera supprimée
Bon dimanche
Génial Cousinhub, ça fonctionne! Merci pour l'info ;)
En revanche, il faudrait ignorer la casse... En effet dans mon fichier original, en prenant l'exemple de bank, il peut etre ecrit BANK, Bank ou bank, etc... Et la macro ne considère que bank.
De plus, pourrais tu y intégrer la condition suivante.
si cel est un blank et si la cellule (cel1.row. en colonne F) = "NCOP"
alors Cel = "88888"
si cel1 est un blank et si la cellule (cel1.row. en colonne F) <> "NCOP"
alors Cel = "COLLECTED"
Merci.
En revanche, il faudrait ignorer la casse... En effet dans mon fichier original, en prenant l'exemple de bank, il peut etre ecrit BANK, Bank ou bank, etc... Et la macro ne considère que bank.
De plus, pourrais tu y intégrer la condition suivante.
si cel est un blank et si la cellule (cel1.row. en colonne F) = "NCOP"
alors Cel = "88888"
si cel1 est un blank et si la cellule (cel1.row. en colonne F) <> "NCOP"
alors Cel = "COLLECTED"
Merci.
Re-,
En ajoutant Option Compare Text en haut du module, on s'affranchit des minuscules/Majuscules
Essaie ainsi :
Bonne journée
En ajoutant Option Compare Text en haut du module, on s'affranchit des minuscules/Majuscules
Essaie ainsi :
Option Compare Text Private Sub CommandButton5_Click() Dim Cel As Range Dim DerLig As Long, I As Long DerLig = Range("K65536").End(xlUp).Row For I = DerLig To 2 Step -1 Set Cel = Cells(I, "Q") If Cel = "." Then Cel.EntireRow.Delete ElseIf IsEmpty(Cel) And Cel.Offset(, -11) = "NCOP" Then Cel = 88888 ElseIf IsEmpty(Cel) And Cel.Offset(, -11) <> "NCOP" Then Cel = "COLLECTED" ElseIf Cel Like "eft*" Or Cel Like "bank*" Or Cel Like "pin*" Or Cel Like "cc*" Or Cel Like "91*" Then Cel = "COLLECTED" ElseIf Cel Like "q*" Or Cel Like "over*" Or Cel Like "log*" Or Cel Like "cust*" Or Cel Like "cas*" Or Cel Like "impnd*" Then Cel = "AFODT SSC" End If Next I End Sub
Bonne journée
Quelques précisions:
Pour Set Cel = Cells(I, "Q")
en fait j'ai ajouté une entête au fichier j'aimerais que la macro travaille à partir de la cellule 7 jusqu'à Range("K65536").End(xlUp).Row
L'option Compare text ne fonctionne pas
de même que
ElseIf IsEmpty(Cel) And Cel.Offset(, -11) = "NCOP" Then
Cel = 88888
ElseIf IsEmpty(Cel) And Cel.Offset(, -11) <> "NCOP" Then
Cel = "COLLECTED"
:/
Pour Set Cel = Cells(I, "Q")
en fait j'ai ajouté une entête au fichier j'aimerais que la macro travaille à partir de la cellule 7 jusqu'à Range("K65536").End(xlUp).Row
L'option Compare text ne fonctionne pas
de même que
ElseIf IsEmpty(Cel) And Cel.Offset(, -11) = "NCOP" Then
Cel = 88888
ElseIf IsEmpty(Cel) And Cel.Offset(, -11) <> "NCOP" Then
Cel = "COLLECTED"
:/
Re-,
Pour t'arrêter à la ligne 7, tu modifies :
par :
Ensuite, c'est étonnant que l'option compare text ne fonctionne pas...(j'ai fait des essais, et cela fonctionne chez moi...)
Et enfin, es-tu sûr que tes cellules sont vraiment vides?
Est-ce le résultat d'une extraction, ou d'une formule?
Est-ce que tu remplis à la main?
@ te relire
Pour t'arrêter à la ligne 7, tu modifies :
For I = DerLig To 2 Step -1
par :
For I = DerLig To 7 Step -1
Ensuite, c'est étonnant que l'option compare text ne fonctionne pas...(j'ai fait des essais, et cela fonctionne chez moi...)
Et enfin, es-tu sûr que tes cellules sont vraiment vides?
Est-ce le résultat d'une extraction, ou d'une formule?
Est-ce que tu remplis à la main?
@ te relire
Je souhaite que ça commence à partir de Q7 jusqu'à la derniére cellule de Q en fonction de Range("K65536").End(xlUp).Row
C'est le résultat d'une formule que je colle en Pastespecial.
En fait dans mon fichier j'ai surtout des majuscules, mais il peut y avoir aussi des minuscules: ex: EFT2, EFT4, eft5, BANK, bank, PIN65, PIN79, etc
Tout me parait également ok dans la syntaxe des blanks, mais ça n'a pas d'incidence sur le fichier, sauf sur mon entête c'est a dire de Q2 à Q5, il m'écrit COLLECTED alors qu'il n'y a rien dans la colonne F. Bizarre...
As tu une idée?
Souhaiterais tu que je joigne ici un xls?
C'est le résultat d'une formule que je colle en Pastespecial.
En fait dans mon fichier j'ai surtout des majuscules, mais il peut y avoir aussi des minuscules: ex: EFT2, EFT4, eft5, BANK, bank, PIN65, PIN79, etc
Tout me parait également ok dans la syntaxe des blanks, mais ça n'a pas d'incidence sur le fichier, sauf sur mon entête c'est a dire de Q2 à Q5, il m'écrit COLLECTED alors qu'il n'y a rien dans la colonne F. Bizarre...
As tu une idée?
Souhaiterais tu que je joigne ici un xls?
Re-,
Oui, ce ne serait pas une mauvaise idée....
Utilise un site tel cijoint, ou cjoint
@ te relire
Souhaiterais tu que je joigne ici un xls?
Oui, ce ne serait pas une mauvaise idée....
Utilise un site tel cijoint, ou cjoint
@ te relire
Je suis désolé ennasual, mais je suis au niveau petit débutant VBA, je ne peux donc malheureusement pas t'aider :)
Bonjour,
Scuse pour le délai, mais étant en Nouvelle-Calédonie, le décalage horaire, plus une pré-alerte cyclonique, ben, c'est pas facile...
J'ai regardé ton fichier....
Quelques petites remarques :
- les cellules qui te semblent vides dans la colonne Q, ben, elles ne le sont pas tout à fait, ceci étant sûrement du au collage spécial...
- en colonne F, je ne vois point de "NCOP", mais plutôt du "NCOD"...
Donc, avec ce code, il me semble que cela fonctionne (je dis bien semble, ne sachant si tu as bien donné toutes les variables correctes....)
Maintenant, pour mettre en rouge, lorsque la cellule de la colonne J équivaut à "Wrong......", regarde au niveau des mises en forme conditionnelles...
Bon courage
Scuse pour le délai, mais étant en Nouvelle-Calédonie, le décalage horaire, plus une pré-alerte cyclonique, ben, c'est pas facile...
J'ai regardé ton fichier....
Quelques petites remarques :
- les cellules qui te semblent vides dans la colonne Q, ben, elles ne le sont pas tout à fait, ceci étant sûrement du au collage spécial...
- en colonne F, je ne vois point de "NCOP", mais plutôt du "NCOD"...
Donc, avec ce code, il me semble que cela fonctionne (je dis bien semble, ne sachant si tu as bien donné toutes les variables correctes....)
Option Compare Text Private Sub CommandButton5_Click() Dim Cel As Range Dim DerLig As Long, I As Long Dim Tblo DerLig = Range("K65536").End(xlUp).Row Tblo = Range("Q7:Q" & DerLig).Value Range("Q7:Q" & DerLig).Value = Tblo For I = DerLig To 7 Step -1 Set Cel = Cells(I, "Q") If Cel = "." Then Cel.EntireRow.Delete ElseIf IsEmpty(Cel) And Cel.Offset(, -11) = "NCOD" Then Cel = 88888 ElseIf IsEmpty(Cel) And Cel.Offset(, -11) <> "NCOD" Then Cel = "COLLECTED" ElseIf Cel Like "eft*" Or Cel Like "bank*" Or Cel Like "pin*" Or Cel Like "cc*" Or Cel Like "91*" Then Cel = "COLLECTED" ElseIf Cel Like "q*" Or Cel Like "over*" Or Cel Like "log*" Or Cel Like "cust*" Or Cel Like "cas*" Or Cel Like "impnd*" Then Cel = "AFODT SSC" End If If Left(Cel.Offset(, -16), 2) = "1Z" And (Cel.Offset(, -15) = 75 Or Cel.Offset(, -15) = 76 Or Cel.Offset(, -15) = 77 _ Or Cel.Offset(, -15) = 79 Or Cel.Offset(, -15) = "CR") Then Cel.Offset(, -7) = "Wrong Shipment Type" End If Next I End Sub
Maintenant, pour mettre en rouge, lorsque la cellule de la colonne J équivaut à "Wrong......", regarde au niveau des mises en forme conditionnelles...
Bon courage
Aucun souci, grand merci!
J'ai change le code en mettant des majuscules car dans mon fichier dans la majeure partie des cas, les ref sont en majuscule. Dommage cependant, les minuscules ne sont plus prises en compte (pin, bank, cc...) ou meme les mix (Pin, bAnK, cC...).
La casse pose toujours probleme, cela fonctionne chez toi?
En dehors de ca ca marche du tonnerre, MERCI!
J'ai change le code en mettant des majuscules car dans mon fichier dans la majeure partie des cas, les ref sont en majuscule. Dommage cependant, les minuscules ne sont plus prises en compte (pin, bank, cc...) ou meme les mix (Pin, bAnK, cC...).
La casse pose toujours probleme, cela fonctionne chez toi?
En dehors de ca ca marche du tonnerre, MERCI!
Bonjour,
J'ai bien effectué les essais sur ton fichier, et quelle que soit la casse, il n'y a pas de problème.....
L'Option Compare Text sert à cela...
Regarde le fichier joint, j'ai recopié la colonne Q dans la colonne R, afin de pouvoir visualiser les modifications...
Si dans la colonne R, la cellule est en rouge, normalement, la police sera rouge dans cette ligne
Si dans la colonne R, la cellule est en jaune, cela veut dire qu'il y a des minuscules et/ou majuscules, et tu verras ainsi que tout est pris en compte....
Bon courage
http://www.cijoint.fr/cjlink.php?file=cj201101/cijIrZSIj8.zip
J'ai bien effectué les essais sur ton fichier, et quelle que soit la casse, il n'y a pas de problème.....
L'Option Compare Text sert à cela...
Regarde le fichier joint, j'ai recopié la colonne Q dans la colonne R, afin de pouvoir visualiser les modifications...
Si dans la colonne R, la cellule est en rouge, normalement, la police sera rouge dans cette ligne
Si dans la colonne R, la cellule est en jaune, cela veut dire qu'il y a des minuscules et/ou majuscules, et tu verras ainsi que tout est pris en compte....
Bon courage
http://www.cijoint.fr/cjlink.php?file=cj201101/cijIrZSIj8.zip