je suis autodidacte et débutant mais j'ai jamais rencontré un tel cas !!! bizarre !!! un petit exemple svp !!Citation:
des cellules vide mais a l’intérieur il y a des espaces
Version imprimable
je suis autodidacte et débutant mais j'ai jamais rencontré un tel cas !!! bizarre !!! un petit exemple svp !!Citation:
des cellules vide mais a l’intérieur il y a des espaces
Bonjour,
Une cellule vide c'est une cellule qui ne contient rien.
Une cellule avec des espaces à l'intérieur, c'est pas une cellule vide !
J'ajouterais qu'une cellule qui contient un texte vide ("") n'est pas une cellule vide.
Pour éliminer les espaces superflus, utilises la fonction TRIM()
Je ne comprends pas pourquoi la macro s'arrète à 2500 lignes lorsque je mets :
Et lorsque je mets de j=2 to Derligne, ça bloque directe la macro ...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub test1() With Sheets("SUIVTRANS EN COURS") Derligne = .Range("A" & Rows.Count).End(xlUp).Row For j = 537 To Derligne If .Cells(j, 14) = "" And .Cells(j, 17) = "" And CDbl(.Cells(j, 19)) < 15000 And (.Cells(j, 8).Value = "002160" Or .Cells(j, 8).Value = "001170" Or .Cells(j, 8).Value = "001121") Then .Cells(j, 13) = "PAS DE DECOMPTE" Else: Cells(j, 13) = "DECOMPTE A EMETTRE" End If Next j End With End Sub
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Sub test1() With Sheets("SUIVTRANS EN COURS") Derligne = .Range("A" & Rows.Count).End(xlUp).Row For j = 2 To Derligne If .Cells(j, 14) = "" And .Cells(j, 17) = "" And CDbl(.Cells(j, 19)) < 15000 And (.Cells(j, 8).Value = "002160" Or .Cells(j, 8).Value = "001170" Or .Cells(j, 8).Value = "001121") Then .Cells(j, 13) = "PAS DE DECOMPTE" Else: Cells(j, 13) = "DECOMPTE A EMETTRE" End If Next j End With End Sub
Salut Obadj,
Exécute la procédure pas à pas.
Peut-être un problème avec Derligne
Toujours en pas à pas, continue l'exécution sur un cas à la 1ère condition, un autre à la 2nde.
Ceci afin de vérifier si tes conditions reportées dans le code répondent bien à ton algorithme.
Bonjour;
Je cherche de comparer un indice (DX-8 par exemple) qui est déjà inséré dans un Combobox1 avec d'autre indice;
S'il est sélectionné j’insère un autre indice dans un autre Combobox2 comme suit : ComboBox2.AddItem ("7T-L").
La première condition qui me manque
Merci de votre aide
cousin bilgates :mrgreen:
ouvrir votre propre discussion et explique bien ce que tu cherches à faire avec un exemple représentatif et tu aura de l'aide
BONNE JOURNEE
Oui oui. Les boucles dans les boucles fonctionnent bien (Tant que les lignes de fin de boucles sont bien placées :) )
Bonjour,
J'ai pas regardé en détail, mais il manque un point avant Cells dans la ligne
Code:Else: Cells(j, 13) = "DECOMPTE A EMETTRE"
Bonjour à tous,
La formule marche mais elle ne prends pas en compte la colonne 17 qui doit être = à rien.... Pourtant la formule l'indique bien....
Ensuite, lorsque que je lance la macro, elle veut pas aller jusqu'à la dernière ligne donc du coup j'indique qu'il faut qu'il prenne la ligne de 537 à 4000 par exemple. Sauf que la, la macro ce lance et s’arrête à la ligne 2183 et ça m'affiche direct un message d' "erreur d'éxécution '13 : incomptaibilité de type" Et ca me surligne cette ligne en jaune alors qu'elle est totalement correcte !
Vraiment je ne comprends pas pourquoi il me fait ça et même sur les lignes qu'il me sort, quand je lance la macro jusqu'à qu'elle bloque à la ligne 2183 : les résultats ne prennent pas en compte ma colonne 17 qui doit être vide ... !!! :?:?:calim2::calim2:Code:If .Cells(j, 14) = "" And .Cells(j, 13) = "" And .Cells(j, 17) = "" And CDbl(.Cells(j, 19)) < 15000 And (.Cells(j, 8).Value = "002160" Or .Cells(j, 8).Value = "001170" Or .Cells(j, 8).Value = "001121") Then
Merci de votre AIDE LES AMIS !
Tu es sûr que c'est bien la colonne 17 que tu veux tester ?
Comme dans les messages précédent il a pu être vérifié que tu t'es trompé 3 fois de numéro de colonne, c'est sans doute le première chose à vérifier.
Ensuite, il faudrait vérifier que cette colonne est REELLEMENT vide et que ce vide n'est pas qu'apparent : elle ne contiendrait pas des espaces, des tabulations ou autres caractères invisibles...
Excel semble penser qu'elle n'est pas correcte et Excel est têtu.Citation:
Sauf que la, la macro ce lance et s’arrête à la ligne 2183 et ça m'affiche direct un message d' "erreur d'éxécution '13 : incomptaibilité de type" Et ca me surligne cette ligne en jaune alors qu'elle est totalement correcte !
Si tu ne montres pas le contenu de cette ligne, il sera difficile de t'expliquer ce qui cause le problème dans cette ligne.
Oui je confirme que la colonne 17 fait partir des colonne égale à rien.
J'ai essayé de faire autrement, en copiant la formule =SI dans la macro : Vous en pensez quoi SVP ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Sub macroDecompte() With Sheets("SUIVTRANS EN COURS") Derligne = .Range("A" & Rows.Count).End(xlUp).Row For j = 2 To Derligne Do If .Cells(j, 13) = "" And Cells(j, 17) = "" And Cells(j, 14) = "" Then .Cells(j, "M") = .FormulaR1C1 = _ "=IF(AND(RC[4]="""",OR(RC[-5]=""001121"",RC[-5]=""001170"",RC[-5]=""002160""),ABS(RC[6])<15000),""PAS DE DECOMPTE"",""DECOMPTE A EMETTRE"")" End If j = j + 1 Loop Until Cells(j + 1, "a") = "" 'copier coller valeur de la col M Next j End With End Sub
Oui je suis sur que la colonne 17 en fait partie !
La ligne je te l'avais mis dans mon message précédent. Voici la ligne ou ça bloque, je l'ai mise ne orange foncé ci-dessous :
Code:
1
2
3 If .Cells(j, 14) = "" And .Cells(j, 17) = "" And CDbl(.Cells(j, 19)) < 15000 And (.Cells(j, 8).Value = "002160" Or .Cells(j, 8).Value = "001170" Or .Cells(j, 8).Value = "001121") Then .Cells(j, 13) = "PAS DE DECOMPTE" Else: Cells(j, 13) = "DECOMPTE A EMETTRE"
Bonjour,
Si tu ne t'en sort pas avec les numéros de colonnes, utilises leurs lettres :
J'ai tout de même un doute sur le test de la colonne M :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 Sub Test() Dim Cel_N Dim Cel_M Dim Cel_Q Dim Cel_S Dim Cel_H Dim J As Long With Sheets("SUIVTRANS EN COURS") For J = 2 To .Range("A" & Rows.Count).End(xlUp).Row Cel_N = .Cells(J, "N").Value Cel_M = .Cells(J, "M").Value '<--je ne suis pas sûr de ceci puisque c'est la cellule devant recevoir la valeur !!! Cel_Q = .Cells(J, "Q").Value Cel_S = .Cells(J, "S").Value Cel_H = .Cells(J, "H").Value If Cel_N = "" And Cel_M = "" And Cel_Q = "" And CDbl(Cel_S) < 15000 And (Cel_H = "002160" Or Cel_H = "001170" Or Cel_H = "001121") Then .Cells(J, "M").Value = "PAS DE DECOMPTE" Else Cells(J, "M").Value = "DECOMPTE A EMETTRE" End If Next J End With End Sub
If .Cells(j, 14) = "" And .Cells(j, 13) = "" And .Cells(j, 17) = "" And CDbl(.Cells(j, 19)) < 15000 And (.Cells(j, 8).Value = "002160" Or .Cells(j, 8).Value = "001170" Or .Cells(j, 8).Value = "001121") Then
car c'est celle qui est sensée recevoir la valeur ???
Bonjour, après de nombreuses heures à réfléchir dessus, ma colonne 17 comporte de nombreux espaces ainsi que des caractère spéciaux.... et je suis obligé" de corriger cette colonne pour que mon autre marco fonctionne :mrgreen:
J'aimerais savoir comment je pourrais modifier cela : "05 10 2018" par lui dire qu'il supprime tous les espaces avant, après et au milieu des caractère dans la cellule et qu'il me remplace par "05/10/2018" sans espaces.
J'ai déjà coder ça sauf qu'il faut que je rajoute qu'il me rajoute les "/" entre les chriffre à la place des espaces par exemple entre le "05" et le "10" et ainsi de suite
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub espaces() With Sheets("SUIVTRANS EN COURS") Derligne = .Range("A" & Rows.Count).End(xlUp).Row For j = 2 To Derligne Cells(j, 17) = Application.Trim(Application.Substitute(Cells(j, 17), Chr(160), Chr(32))) Next j End With End Sub
Pour enlever les espaces avant et après, voir la fonction Trim().
https://docs.microsoft.com/fr-fr/off...trim-functions
Pour changer les espaces "intérieurs" en /, voir la fonction Replace().
https://docs.microsoft.com/fr-fr/off...place-function
Mais, à mon avis, tu ne devrais pas passer par la fonction Replace() mais par une combinaison des fonctions Mid() et DateSerial() pour être sûr d'avoir une date comme résultat.
https://docs.microsoft.com/fr-fr/off...erial-function
https://docs.microsoft.com/fr-fr/off...p/mid-function
Bonjour Menhir,
Je ne vois pas comment faire... peux-tu m'aider stp
Comment supprimer les espaces entre, avant et après les caractères ainsi que les cellule vide qui comporte des espace :
exemple : "05 10 2018"
Il faut que je rajoute qu'il me rajoute les "/" entre les chiffres à la place des espaces par exemple entre le "05" et le "10" et ainsi de suite
Voici le fichier ou j'ai mis juste la colonne 17 qui nous bloque pour la macro : Pièce jointe 442494
Voici le code que j'ai tenter mais sa bloque à la dernière ligne que j'ai mis en orange foncé du code :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub ConvertDate() Dim i As Long, Temp As String With Sheets("SUIVTRANS EN COURS") Derligne = .Range("A" & Rows.Count).End(xlUp).Row For i = 2 To Derligne If Not IsEmpty(.Cells(i, 17)) And Not IsError(.Cells(i, 17)) Then Temp = Replace(.Cells(i, 17), " ", "") .Cells(i, 17) = DateSerial(CInt(Right(Temp, 4)), CInt(Mid(Temp, 3, 2)), CInt(Left(Temp, 2))) End If Next i End With End Sub
Et bien, c'est pas gagné ! Tu as essayé comme Menhir (:coucou:) ta dit ?
si tu ne suis pas les conseils donnés, tu ne vas pas y arriver !Citation:
Pour changer les espaces "intérieurs" en /, voir la fonction Replace().
Pour enlever les espaces avant et après, voir la fonction Trim().
Un petit test pour que tu puisses voir :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Sub Test() Dim Temp As String Dim Chaine Dim I As Integer Chaine = Array(" 05 10 2018 ", "05 10 2018", "'05 10 2018") For I = 0 To UBound(Chaine) 'la fonction Trim() supprime les espaces parasites en début et fin de chaîne (1er élément) 'la fonction Replace() remplace les espaces à l'intérieur de la chaîne par des slashs Temp = Replace(Trim(Chaine(I)), " ", "/") 'si la date n'est pas valide, problème If Not IsDate(Temp) Then MsgBox "Date non conforme !" Else MsgBox CDate(Temp) Next I End Sub
C'est bon j'ai trouvé mon erreur ce n'était pas celle que Menhir avait annoncé !
En revanche, maintenant que cette colonne 17 est corrigé, pour l'ancienne macro sur les Décompte à émettre ou pas de Décompte, j'ai l'impression qu'il ne prends pas en considération ma colonne S avec les <15000.
Concernant l'ancienne macro décompte, j'ai un soucis maintenant après rectification de la colonne 17, j'ai l'impression qu'il reconnait pas le <15000 pour la colonne S.
Je te mets le fichier excel et il y a la macro dans VBA.
KOBD .xlsx
(74.83 Kio) Pas encore téléchargé
Je répète ma condition par sécurité même si je pense vous l'avez tous comprise :
En fait je veux que si la colonne M, N et Q sont vides et que dans la colonne H c'est égale à "001121" ou "001170" ou "002160" et que la colonne S soit <15 000 alors je mets en M " Pas de décompte" Sinon je mets "Décompte à émettre" mais en prenant toujours compte de la colonne Met N vide (pour le commentaire "Décompte à émettre", je ne veux pas qu'il remplace par tous me ancien commentaire que j'ai mis avant.).
Et sur mon fichier on voit bien quand on lance la macro, que dans quelque ligne sa marche et que d'autre il prend pas en compte la colonne S avec les <15000
Voici le fichier ci-joint avec la macro dans VBA !
Pièce jointe 442580Pièce jointe 442580Pièce jointe 442597
Bonjour à toutes et tous,
Pourriez-vous m'aider sur le probleme suivant:
J'ai mis en place une fonction de compte du nmbre de case sur base de la couleur de celle-ci et j'aimerais mnt intégrer une conditions de realisation pour splitter mon resultat en fonction de la valeur de ma colonne "G" pouvant etre 2 ou 7
Mais je ne parviens pas a comprendre comment intégrer cette condition dans mon code.
Voici la code de la fonction créé:
D'avance merci,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Function Color_Cell_Count(ColorCell As Range, DataRange As Range) Dim Data_Range As Range Dim Cell_Color As Long Cell_Color = ColorCell.Interior.ColorIndex For Each Data_Range In DataRange If Data_Range.Interior.ColorIndex = Cell_Color Then Color_Cell_Count = Color_Cell_Count + 1 End If Next Data_Range End Function
Premièrement, si tu veux poser une nouvelle question, ouvre ta propre discussion.
Deuxièmement, aucune fonction comptant les couleurs n'est fiable.
Merci de votre retour, desolé pour l'erreur de post, je vais le recreer dans ce cas en ouvrant le sujet.