VBA Remplir cellule sur critères
ERIC71PL
Messages postés
2
Statut
Membre
-
cousinhub29 Messages postés 1135 Date d'inscription Statut Membre Dernière intervention -
cousinhub29 Messages postés 1135 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
- Organigramme a remplir word - Guide
- Excel compter cellule couleur sans vba - Guide
- Proteger cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
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