OVH Cloud OVH Cloud

Range VBA

23 réponses
Avatar
Albert
Bonjour

Comment ré-écrire ce qui suit pour inclure la colonne A (A2 jusquà la fin)
et la colonne B (B2 jusqu'à la fin)?
----------------------
Sub EnleveAccent()
' Cette MACRO enlève tous les caractères accentuées et spécaux
Dim c As Range, Ctr As Long, i As Integer
For Each c In Range([A2], Cells(Rows.Count, 1).End(xlUp))
c.Value = Sans_accents$(c.Value)
Next c
End Sub
--------------------------------------------

Merci

--
albertri-at-videotron.ca.invalid

10 réponses

1 2 3
Avatar
Albert
Bonsoir / Bonjour

"Jacky" a écrit dans le message de
news:m4r4dn$cs3$
Re..
Pourquoi tu testes si c n'est pas vide? Si vide = pas d'accent


Ben OUI, donc pas besoin de faire appel à la fonction "Sans_accents$"
En plus on ne voit pas ce qu'elle fait cette fonction..
Enlever un accents sur une cellule vide pourrait provoquer un plantage.



Une petite explication ici.

Au début de la saison notre Base de données Access génére la liste des 650
membres, "Nom, Prénom" pas ordre alphabétique qui est placée dans un
fichier EXCEL de présences.Les présences sont prises à chaque réunion, deux
par semaines, environ 100 présences à chacune. Pour trouver rapidement les
noms, un filtre est utilisé, on entre les premiers caractères, mais si il y
a un accent il faut rechercher les différentes possibilités, tel Bel, Bél,
Bèl etc...

Pour faciliter la tâche les accents sont enlevés et la recherche est plus
rapide, cela ne cause aucun problème.

Ce n'est pas moi qui tappe les données, je suis seulement un soutien
technique. Plusieurs personnes collabrent pour les différentes tâches.

Régulièrement de nouveaux noms sont ajoutés et parfois retirés, il y a aussi
des doublons et des omissions, à cette liste présences. La plupart des
erreurs sont facilement trouvées et corrigées. Mais parfois c'est difficile,
alors je génère une nouvelle liste avec accents que le place dans un fichier
EXCEL colonne A et je copie la liste du fichier présence dans la colonne B,.
et je compare avec =SI(A2²;"";"FAUX") ou =EQUIV(B2;A:A;0) et
quelques manipulations à cause des doublons et omissions.
Pour cette recherche d'erreur il faut enlever les accents de la colonne A,
aussi vérifier la colonne B qui ne devrait n'avoir aucun accent.
---------------------------------
Le filtre du fichier présence:
Sub Recherche()
Dim Ycritere As String
Init
Ycritere = InputBox("Saisir le début du nom =?")
If Trim(Ycritere) = "" Then
Init
Exit Sub
Else
ActiveSheet.Range("B2").AutoFilter Field:=1, Criteria1:="=" & _
Ycritere & "*", Operator:=xlAnd
SePlacer
End If
End Sub
-------------------------------

Merci

Albert
Avatar
MichD
Bonjour,

Ceci teste toutes les cellules contenant du texte dans les colonnes A et B
de ladite feuille.

On Error Resume next est là pour éviter qu'une erreur soit générée dans le
cas où tu n'as pas
au moins une cellule contenant du texte dans la colonne A et B.

'-------------------------------------------------
Sub test()
Dim Rg As Range, C As Range, DerLig As Long
On Error Resume next
With Worksheets("Feuil1")
DerLig = .Range("A:B").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:B" & DerLig).SpecialCells(xlCellTypeConstants, 2)
End With
For Each C In Rg
' C.Value = Sans_accents$(c.Value)
Next
End Sub
'-------------------------------------------------
Avatar
GL
Le 23/11/2014 11:49, MichD a écrit :
Bonjour,

Ceci teste toutes les cellules contenant du texte dans les colonnes A et
B de ladite feuille.

On Error Resume next est là pour éviter qu'une erreur soit générée dans
le cas où tu n'as pas
au moins une cellule contenant du texte dans la colonne A et B.



Oui ce sont les côtés pénibles de .SpecialCells :
1/ les erreurs générées
2/ un comportement bizaroïde :
[A1].SpecialCells(xlCellTypeConstants)
renvoie la meme chose que :
[A1].Worksheet.UsedRange.SpecialCells(xlCellTypeConstants)
3/ Si le deuxième argument peut se sommer :
ex: [A1:B200].SpecialCells(xlCellTypeConstants, xlLogical+xlNumbers)
Il n'en est pas de même du premier argument :
[A1:B200].SpecialCells(xlCellTypeConstants + xlCellTypeFormulas)
ne fonctionne pas.

(c'est ce qui m'a conduit à réécrire SpecialCells en VBA, pour corriger
ces 3 anomalies)

Dans le cas de l'OP on pourrait faire plus simplement :
On Error Resume Next
Set Rng = Intersect([A2:B99999], _
[A2:B99999].SpecialCells(xlCellTypeConstants, xlTextValues))
If Not Rng Is Nothing Then For Each c In Rng.Cells ..... Next

Bon dimanche.

'-------------------------------------------------
Sub test()
Dim Rg As Range, C As Range, DerLig As Long
On Error Resume next
With Worksheets("Feuil1")
DerLig = .Range("A:B").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:B" & DerLig).SpecialCells(xlCellTypeConstants, 2)
End With
For Each C In Rg
' C.Value = Sans_accents$(c.Value)
Next
End Sub
'-------------------------------------------------
Avatar
Albert
Bonjour MichD

Est-il possible de remplacer "With Worksheets("Feuil1")" par With Active
Worksheet ?

Pour le moment je dois changer le nom de feuille pour que ça marche, et le
nom peut être différent à chaque fois.

Merci
Albert


"MichD" a écrit dans le message de
news:m4se5f$qna$
Bonjour,

Ceci teste toutes les cellules contenant du texte dans les colonnes A et B
de ladite feuille.

On Error Resume next est là pour éviter qu'une erreur soit générée dans le
cas où tu n'as pas
au moins une cellule contenant du texte dans la colonne A et B.

'-------------------------------------------------
Sub test()
Dim Rg As Range, C As Range, DerLig As Long
On Error Resume next
With Worksheets("Feuil1")
DerLig = .Range("A:B").Find("*", LookIn:=xlValues, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set Rg = .Range("A1:B" & DerLig).SpecialCells(xlCellTypeConstants, 2)
End With
For Each C In Rg
' C.Value = Sans_accents$(c.Value)
Next
End Sub
'-------------------------------------------------

Avatar
MichD
| Est-il possible de remplacer "With Worksheets("Feuil1")" par With Active

Ce ne cause pas de problème, cependant assure-toi que c'est vraiment la
bonne feuille qui est active lorsque tu appelles la macro!
Avatar
MichD
Bonjour,

à moins d'avoir Excel 2013, "UsedRange" n'est pas fiable pour retourner
seulement
la plage occupée dans une feuille.

Si le fichier doit être ouvert par plusieurs versions d'Excel, "UsedRange"
est à proscrire... pour moi!
Avatar
Albert
Merci à tous pour votre collaboration.

Tout en espérant qu'il n'y aura pas trop d'erreurs sur ces listes.

Merci


--
albertri-at-videotron.ca.invalid
Avatar
GL
Le 23/11/2014 17:53, MichD a écrit :
Bonjour,

à moins d'avoir Excel 2013, "UsedRange" n'est pas fiable pour retourner
seulement
la plage occupée dans une feuille.

Si le fichier doit être ouvert par plusieurs versions d'Excel,
"UsedRange" est à proscrire... pour moi!



Oui c'est vrai, j'avais vu cela sur le web, mais n'avais jamais
constaté de problème.

J'ai la version 2010 (je goûte assez peu le design "Windows 8") et
UsedRange semble fonctionner comme il faut...

Cdt.
Avatar
GL
Le 23/11/2014 18:57, Albert a écrit :
Merci à tous pour votre collaboration.

Tout en espérant qu'il n'y aura pas trop d'erreurs sur ces listes.



Excel est un logiciel créateur d'erreurs ! (le FMI le sait bien...)
Avatar
Jacquouille
J'aime ce côté positif qui ressort à chaque fois.



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"GL" a écrit dans le message de groupe de discussion :
54722112$0$2324$

Le 23/11/2014 18:57, Albert a écrit :
Merci à tous pour votre collaboration.

Tout en espérant qu'il n'y aura pas trop d'erreurs sur ces listes.



Excel est un logiciel créateur d'erreurs ! (le FMI le sait bien...)


---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce que la protection avast! Antivirus est active.
http://www.avast.com
1 2 3