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 "?"
- Fonction si et - Guide
- Quel site remplace coco - Accueil - Réseaux sociaux
- 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!