Problème avec fonction recherche et remplace pour le symbole "?"
Résolu
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
bassmart Messages postés 281 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
J'ai créer une macro qui recherche certaines valeurs (texte) et qui les remplacent soit par une valeur numérique ou bien laisse la cellule vide. Mon problème c'est que, lorsque que je recherche le symbole "?", le reste de ma macro ne s'effectue pas comme elle devrait, mais je n'ai pas de message d'erreur!
Je ne réussi pas à mettre le doigt dessus! Lorsque j'enlève cette ligne
Quel est le problème?
Voici ma macro complète:
Merci beaucoup pour l'aide!
J'ai créer une macro qui recherche certaines valeurs (texte) et qui les remplacent soit par une valeur numérique ou bien laisse la cellule vide. Mon problème c'est que, lorsque que je recherche le symbole "?", le reste de ma macro ne s'effectue pas comme elle devrait, mais je n'ai pas de message d'erreur!
Je ne réussi pas à mettre le doigt dessus! Lorsque j'enlève cette ligne
Cells.Replace what:="?", replacement:="", lookat:=xlWhole, toute ma macro fonctionne très bien!
Quel est le problème?
Voici ma macro complète:
Private Sub CommandButton1_Click() Dim nombre As Integer Dim QuelFichier() Dim Chemin As String, Fichier As String, Nomclasseur As String Dim DerLig As Long Dim plage As Range Dim cible As String Dim r As Range cible = "plein d'eau" ChDrive "m" ChDir "M:\Entrepot\BDFS\1_Piézomètres\" On Error GoTo fin QuelFichier = Application.GetOpenFilename("Fichier excel(*.xls; *.xlsx),*.xls;*.xlsx", , , , True) If IsArray(QuelFichier) Then For i = LBound(QuelFichier, 1) To UBound(QuelFichier, 1) Workbooks.Open QuelFichier(i) '------------------------------------------- 'Nom de fichier SANS extention en partant du chemin complet Nomclasseur = Left(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1), Len(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1)) - 4) '------------------------------------------- Application.ScreenUpdating = False nombre = ActiveWorkbook.Sheets.Count For N = 2 To nombre Worksheets(N).Unprotect Next N For x = 2 To Sheets.Count - 1 With Sheets(x) Sheets(x).Select Columns("E:O").Select Selection.EntireColumn.Hidden = False DerLig = .Range("F" & Rows.Count).End(xlUp).Row For N = 2 To DerLig With Range("E2" & ":E" & N).Select Cells.Replace what:="plein", replacement:="0", lookat:=xlWhole Cells.Replace what:="cassé", replacement:="", lookat:=xlWhole Cells.Replace what:="brisé", replacement:="", lookat:=xlWhole Cells.Replace what:="?", replacement:="", lookat:=xlWhole Set plage = Range("E2" & ":E" & N) For Each r In plage If UCase(r.Value) = "X" Then If r.Offset(0, 10) = cible Then r.Value = "0" Else r.Value = "" End If MsgBox "Valeur X trouvé!" End If Next r End With If .Range("D" & N) <> "" Then If .Range("A" & N) <> "" Then TInfos = .Range("A" & N & ":C" & N) Else .Range("A" & N & ":C" & N) = TInfos End If End If Next N Sheets(x).Range("A2").Select End With Next x nombre = ActiveWorkbook.Sheets.Count For N = 2 To nombre Worksheets(N).Protect Next N Chemin = CurDir & "\Transfert\" Fichier = Nomclasseur & "_traité" & ".xlsx" On Error Resume Next ActiveWorkbook.SaveCopyAs Chemin & Fichier '------------------------------------------- Next i Else MsgBox "Annuler" End If UserForm1.Hide ThisWorkbook.Saved = True Application.ScreenUpdating = True UserForm2.Show fin: Application.Quit End Sub
Merci beaucoup pour l'aide!
A voir également:
- Problème avec fonction recherche et remplace pour le symbole "?"
- Quel site remplace coco - Accueil - Réseaux sociaux
- Fonction si et - Guide
- Fermeture de Coco : les internautes à la recherche d'un remplaçant - Accueil - Réseaux sociaux
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Symbole poisson voiture - Accueil - Maison
3 réponses
Bonjour,
Le point d'interrogation (?), est un caractère générique qui remplace n'importe quel caractère, alors bien sûr, c'est un cas particulier.
En consultant le support tu as la solution :
https://support.microsoft.com/en-us/office/find-or-replace-text-and-numbers-on-a-worksheet-0e304ca5-ecef-4808-b90f-fdb42f892e90?ui=en-us&rs=en-us&ad=us
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
Le point d'interrogation (?), est un caractère générique qui remplace n'importe quel caractère, alors bien sûr, c'est un cas particulier.
En consultant le support tu as la solution :
https://support.microsoft.com/en-us/office/find-or-replace-text-and-numbers-on-a-worksheet-0e304ca5-ecef-4808-b90f-fdb42f892e90?ui=en-us&rs=en-us&ad=us
Cells.Replace what:="~?", replacement:="", lookat:=xlWhole
Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
1
Merci beaucoup gbinforme pour l'info!
Bonjour tous les deux,
Dites moi, avec un certains nombre de lignes, va être longue à exécuter cette macro...
@Bassmart : un pitit coup de main pour accélérer le bouzin?
Dites moi, avec un certains nombre de lignes, va être longue à exécuter cette macro...
@Bassmart : un pitit coup de main pour accélérer le bouzin?
Pour cela, il nous faudra le classeur contenant la macro + 1 ou 2 classeurs "à ouvrir".
Pour joindre un fichier sur les forums de ccm il faut:
________________________________________________________
- se rendre sur le site : https://www.cjoint.com/
- cliquer sur parcourir
- rechercher le fichier
- cliquer sur ouvrir
- cliquer sur créer le lien Cjoint
- copier le lien
- revenir ici le coller dans une réponse
________________________________________________________
Qu'est censé faire ta macro???
1- ouvrir x fichiers
2- boucler sur toutes les feuilles
3- si, en colonne E on trouve "X" ET qu'en colonne O on a "plein d'eau"
alors la colonne E = "0"
sinon la colonne E = ""
4- remplacer, en colonne E, les cellules contenant plein, cassé, brisé et ? par rien
5- renvoyer le nombre de X, plein, cassé, brisé et ?
C'est bien ça?
Par ec que c'est pas clair...
Tu m'envoie 2 fichiers à traiter, le premier .xlsm ne risque pas d'être ouvert par ta macro et le second ne contient aucun X en colonne E...
Alors, stp, soit clair.
1- ouvrir x fichiers
2- boucler sur toutes les feuilles
3- si, en colonne E on trouve "X" ET qu'en colonne O on a "plein d'eau"
alors la colonne E = "0"
sinon la colonne E = ""
4- remplacer, en colonne E, les cellules contenant plein, cassé, brisé et ? par rien
5- renvoyer le nombre de X, plein, cassé, brisé et ?
C'est bien ça?
Par ec que c'est pas clair...
Tu m'envoie 2 fichiers à traiter, le premier .xlsm ne risque pas d'être ouvert par ta macro et le second ne contient aucun X en colonne E...
Alors, stp, soit clair.
Qu'il trouve les valeur "X" => ok. Mais ou? Dans qu'elle colonne???
Bon.
Tu va tester ça sur des copies de deux trois classeurs cibles.
Ok?
Par contre, dans les commentaires de la macro, tu verras ceci (je n'ai pas compris ce que tu cherches à faire. Rien à mon avis...) :
J'ai également ajouté le .Close sur ActiveWorkbook... Mais je ne suis pas sur de moi à 100%...
Tu va tester ça sur des copies de deux trois classeurs cibles.
Ok?
Par contre, dans les commentaires de la macro, tu verras ceci (je n'ai pas compris ce que tu cherches à faire. Rien à mon avis...) :
'CETTE PARTIE LA EST ENCORE A M'EXPLIQUER : ' If .Range("D" & N) <> "" Then ' If .Range("A" & N) <> "" Then ' TInfos = .Range("A" & N & ":C" & N) ' Else ' .Range("A" & N & ":C" & N) = TInfos ' End If ' End If '------------ FIN EXPLICATIONS
J'ai également ajouté le .Close sur ActiveWorkbook... Mais je ne suis pas sur de moi à 100%...
Option Explicit Private Sub CommandButton1_Click() Dim nombre As Integer Dim QuelFichier() Dim Chemin As String, Fichier As String, Nomclasseur As String Dim DerLig As Long 'Dim plage As Range Dim cible As String 'Dim r As Range Dim CptPlein As Long, CptCasse As Long, CptBrise As Long, CptInterr As Long, CptX As Long cible = "plein d'eau" ChDrive "m" ChDir "M:\Entrepot\BDFS\1_Piézomètres\" On Error GoTo fin QuelFichier = Application.GetOpenFilename("Fichier excel(*.xls; *.xlsx),*.xls;*.xlsx", , , , True) If IsArray(QuelFichier) Then For i = LBound(QuelFichier, 1) To UBound(QuelFichier, 1) Workbooks.Open QuelFichier(i) '------------------------------------------- 'Nom de fichier SANS extention en partant du chemin complet Nomclasseur = Left(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1), Len(Mid(QuelFichier(i), InStrRev(QuelFichier(i), "\") + 1)) - 4) '------------------------------------------- Application.ScreenUpdating = False 'nombre = ActiveWorkbook.Sheets.Count 'For N = 2 To nombre ' Worksheets(N).Unprotect 'Next N For x = 2 To Sheets.Count - 1 With Sheets(x) .Unprotect Sheets(x).Columns("E:O").EntireColumn.Hidden = False DerLig = .Range("E" & Rows.Count).End(xlUp).Row For N = 2 To DerLig Select Case .Range("E" & N).Value Case "plein" .Range("E" & N).Value = 0 CptPlein = CptPlein + 1 Case "cassé" .Range("E" & N).Value = "" CptCasse = CptCasse + 1 Case "brisé" .Range("E" & N).Value = "" CptBrise = CptBrise + 1 Case "?" .Range("E" & N).Value = "" CptInterr = CptInterr + 1 Case "X", "x" CptX = CptX + 1 If .Range("E" & N).Offset(0, 10) = cible Then .Range("E" & N).Value = "" Else .Range("E" & N).Value = 0 End If Case Else End Select Next N .Protect End With Next x 'CETTE PARTIE LA EST ENCORE A M'EXPLIQUER : ' If .Range("D" & N) <> "" Then ' If .Range("A" & N) <> "" Then ' TInfos = .Range("A" & N & ":C" & N) ' Else ' .Range("A" & N & ":C" & N) = TInfos ' End If ' End If '------------ FIN EXPLICATIONS ' Next N ' Sheets(x).Range("A2").Select ' End With 'Next x 'nombre = ActiveWorkbook.Sheets.Count 'For N = 2 To nombre ' Worksheets(N).Protect 'Next N Chemin = CurDir & "\Transfert\" Fichier = Nomclasseur & "_traité" & ".xlsx" On Error Resume Next With ActiveWorkbook .SaveCopyAs Chemin & Fichier '!!!!!!!!!!!!!! A TESTER .Close End With '------------------------------------------- Next i Else MsgBox "Annuler" End If MsgBox "Vous avez corrigé :" & vbCrLf & _ CptX & " X," & vbCrLf & _ CptBrise & " brisé," & vbCrLf & _ CptCasse & " cassé," & vbCrLf & _ CptInterr & " ?," & vbCrLf & _ CptPlein & " plein." UserForm1.Hide ThisWorkbook.Saved = True Application.ScreenUpdating = True UserForm2.Show fin: Application.Quit End Sub
Merci beaucoup, je teste ça!
Pour les lignes que tu mentionnent, je vient de me souvenir!
C'est un aspect quand même important que j'avais complètement oublié, désolé!
C'est que dans les colonnes A, B et C se retrouve des valeurs mais seulement sur la première ligne de chacune des nouveaux emplacement de lecture. Donc, il me faut recopier cette valeur jusqu'à la prochaine valeur différente de la colonne C.
Alors la macro, détecte la dernière ligne non vide de la colonne D parce que c'est la première colonne de la feuille à contenir des valeurs jusqu'à la fin. Recopie la valeur de la colonne A, B et C jusqu'à la nouvelle valeur de la colonne C.
Merci pour le coup de main!
Pour les lignes que tu mentionnent, je vient de me souvenir!
C'est un aspect quand même important que j'avais complètement oublié, désolé!
C'est que dans les colonnes A, B et C se retrouve des valeurs mais seulement sur la première ligne de chacune des nouveaux emplacement de lecture. Donc, il me faut recopier cette valeur jusqu'à la prochaine valeur différente de la colonne C.
Alors la macro, détecte la dernière ligne non vide de la colonne D parce que c'est la première colonne de la feuille à contenir des valeurs jusqu'à la fin. Recopie la valeur de la colonne A, B et C jusqu'à la nouvelle valeur de la colonne C.
Merci pour le coup de main!
Bonjour,
Bon, j'ai testé le tout!
Pour de ce qui est de la vérification de la valeur "X" dans la colonne E si le texte de la colonne O est égale à "plein d'eau", la valeur de la colonne E est alors égale "0". Ne fonctionne pas, voir feuille Z32164 (fichier1_test).
Pour le reste ça fonctionne bien!
Pour le code concernant les colonnes A, B et C, je ne suis pas un expert et ce n'est pas moi qui l'écrit, mais c'est ce que ça fait en gros! C'est probablement mon explication qui est erroné, mais le résultats que j'ai c'est ça.
Merci beaucoup!
Bon, j'ai testé le tout!
Pour de ce qui est de la vérification de la valeur "X" dans la colonne E si le texte de la colonne O est égale à "plein d'eau", la valeur de la colonne E est alors égale "0". Ne fonctionne pas, voir feuille Z32164 (fichier1_test).
Pour le reste ça fonctionne bien!
Pour le code concernant les colonnes A, B et C, je ne suis pas un expert et ce n'est pas moi qui l'écrit, mais c'est ce que ça fait en gros! C'est probablement mon explication qui est erroné, mais le résultats que j'ai c'est ça.
Merci beaucoup!