Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Macro VBA Excel (Doublon,SansAccents,Maj,Min,Nompropre,Espaces superflus)

patricktoulon

XLDnaute Barbatruc
bonsoir virginie
je n'oublie pas tes gallery je ne me rappelle plus comment on récupère le label du control j'ai cherché cet aprem et j ai pas trouvé
je suis dans une autres discussion là je reviens plus tard
en l'etat pour le moment tu a tout ce qu'il te faut pour ton app
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir à tous

Vous n'arrêtez pas !! LoL , difficile à suivre ...
Voici ma toute dernière XLAM où j'ai encore blindé par mal de trucs et j'ai mis (je crois!) les derniers barbatrucs de Patrick...

Finalement comme remarqué par Eriiiic, j'ai fait qu'UN seul bouton finalement pour le Format des Numéro Téléphones Mobile ou Fixe... Mais je pense respecter les contraintes de Virginie..
Je commence aussi la gestion des numéros internationaux (je les exclus, c'est un début !) ... Enfin il y a pas mal de trucs maintenant dans ce projet !

Désormais on peut aussi seléctionner une colonne entière, (par le 'heading') sans que ca dure jusqu'à la Saint GlinGlin... Et d'autres schmilblicks de contrôles... Enfin je vous laisse tester les boutons...

Pour le bouton "Login", on n'a plus besoin d'intervenir dans le code non-plus pour changer l'entité...

Bien à tous ! et bonne découverte.

PS Conseil, fermer tout le reste et complètement Excel avant d'ouvrir la XLAM et le fichier de Test, sinon vous ne saurez plus qui fait quoi sur qui !!! Avec tous ces essais LoL...

@+Thierry

EDIT 19:59 : En fait je rajoute que lorsque on créé une XLAM destinée à toutes sortes de classeurs, on ne peut que se réferrer à des selections, et pas à des adresses de plage en fixe dans le code, donc aussi pour les formattages des numéros de téléphone... Mais donc on peut selectionner la colonne entière...

En commentaires, dans le module Téléphone, je laisse au choix l'usage d'une Application.InputBox Type 8, pour sélectionner une plage, mais je trouve ça plus lourd...
 

Pièces jointes

  • XLD_Virginie17d_XLAM_PERSO_v01.zip
    58.1 KB · Affichages: 9
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonsoir thierry
pour la selection c'est fait je sélectionne uniquement ce qui est remplie en sélectionnant une cellule ou la colonne entière
je reviens toute a l'heure je galère avec notre amis Arthour encore (ou j'suis allé me fourrer moi encore )
 

patricktoulon

XLDnaute Barbatruc
sympa Thierry les telephones

par contre faut m'expliquer cela
VB:
If Selection.Count >= Rows.Count Then
    If Selection.Columns.Count = 1 Then
      Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, Selection.Columns.column).End(xlUp))
    Else
        MsgBox "Ne pas seléctionner 2 colonnes à la fois", vbExclamation, "Une Colonne à la fois !"
        Exit Sub
    End If
End If
If Selection.Count >= Rows.Count Then
If Selection.Columns.Count = 1 Then
???????????????????


oulah et une autre

For Each Cellule In TargetRange
If IsError(Cellule) Then Exit For ' <<<<<<<<<<< ("N/A" dans C91)

et si le N/A est entre 2 ce qui suit on le fait pas ????
 
Dernière édition:

Virginie17d

XLDnaute Occasionnel
Bonsoir Thierry,

Merci, Effectivement quand on aime on compte pas (parait t-il) merci pour cette optimisation, je vais tester cela dès ce soir et je te fais un retour.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Virginie, Patrick

Oui j'attends ton retour ! Virginie

Pour Patrick, oui c'est pour pouvoir redimensioner aux cellules ayant des valeurs quand on selectione une colonne entière pour éviter de lancer l'algo sur 1 million de rows... Pour la première condition...

Pour la seconde condition, oui c'est zarbi ! en fait j'aurai bien aimé 'looper' sur deux (ou plus de colonnes en délimitant le nombre de rows non vides), mais je n'ai pas les numéros de colonnes si plusieurs entières colonnes ont été sélectionées ... (oui bien je n'ai pas trouvé ?)
Par exemple je selectionne la colonne N et O
MsgBox Selection.Columns.column me retourne que 14 (et pas une array 14,15... )
Donc j'en suis resté là avec mon Else et un message "Une Colonne à la fois SVP" et un Exit For...
Voilà pour ce code bizarre !

Pour le reste de la gestion des Tels , oui je n'en voyais plus la fin, je me suis dit mais dans quoi je me suis embarqué encore !!! c'est un peu lourd quand même...
Et en international, selon les pays, ils ont des longueurs différentes et parfois certains pays ce n'est pas fixe style "de 8 à 10" tu vois le genre !!! Arf lol

Bien à vous
Bonne soirée
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
Bonsoir thierry
c'est pas bon les deux valent la même chose

et dans le mien le max c'est le end (xlup)

et le nom du tab et group a changé

et pour ta question

Par exemple je selectionne la colonne N et O
MsgBox Selection.Columns.column me retourne que 14 (et pas une array 14,15... )
c'est msgbox selection.entirecolumn
apres en array faut convertir je crois

je fait quelque modifs et reviens
 

patricktoulon

XLDnaute Barbatruc
déjà thierry ca c'est pour toi Kado

myarray=Evaluate("COLUMN(" & Selection.EntireColumn.Address & ")")
MsgBox Join(myarray, ",")
et voila un truc a garder sous le coude
 

Pièces jointes

  • EVAUATE ET VARIABLES TABLEAU EPIDODE 1.pdf
    43.1 KB · Affichages: 7

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @eriiiic

Pour ceci :

Etonnant, ça fait quoi ?
Même en spécifiant classeur et feuille ?

Ben le principe d'une XLAM c'est justement d'être embarqué dans Excel pour traiter toutes sortes de Classeurs... Dans cet exemple pour Virginie, il n'y a qu'un "intrus", mais sinon c'est un bon exemple d'usage de "Macros Complémentaires" ou "Compléments"




Je pense que cela devrait vous aider à comprendre.

Bien à toi, à tous
@+Thierry


Extrait de Wikiversité

Définition
Une macro complémentaire est une sorte d'extension qui augmente les fonctionnalités d'Excel. Certaines fournissent de nouvelles fonctions de feuille de calcul utilisables dans les formules, d'autres de nouvelles commandes ou des utilitaires. Si la macro complémentaire a été conçue dans les règles de l'art, la nouvelle fonctionnalité s'intègre parfaitement dans l'interface d'Excel, comme si elle en avait toujours fait partie.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir thierry
c'est pas bon les deux valent la même chose

Non ce n'est pas la même chose
Selection.Count >= Rows.Count Then >>> Rows ICI c'est le nombre de row de l'application (au cas où on a encore affaire avec XL2000 et 65536 rows)

MsgBox Rows.Count :


Mais si je selectionne DEUX colonnes entières ....

MsgBox Selection.Count :


Donc je compare les deux, pour éviter que ca mouline à l'infini... Et en plus après je fais aussi un choix utilisateur aussi si il veut continuer au cas où...

Pour les autres points, je continue dans l'odre.. Mais merci je vois déjà que j'ai un Kado
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
@_Thierry
VB:
Option Explicit

'Remplacé par PatrickToulon

Sub Majuscules(): Traite_casse ("maj"): End Sub
Sub Miniuscules(): Traite_casse ("min"): End Sub
Sub NomPropre(): Traite_casse ("Npropre"): End Sub

Sub Traite_casse(Comment As String)
    Dim Cellule As Range, Response As Long, TargetRange As Range

    Set TargetRange = Selection

    If TargetRange.Count < 1 Then MsgBox "Vous devez sélectionner une plage pour appliquer cette macro", vbInformation: Exit Sub

    If TargetRange.Columns.Count > 1 Then MsgBox "Ne pas selectionner 2 colonnes à la fois", vbExclamation, "Une Colonne à la fois !": Exit Sub

    Set TargetRange = Range(Cells(2, Selection.column), Cells(Rows.Count, Selection.column).End(xlUp))


     If TargetRange.Rows.Count > 1000 Then
        If MsgBox("Ca va prendre du temps sur : " & Format(Selection.Rows.Count, "#0,000,000") & " Cellules" & vbCrLf & "Voulez-vous continuer ?", vbOKCancel) = vbCancel Then Exit Sub
    End If

    For Each Cellule In TargetRange
        If Not IsError(Cellule) Then

            Select Case Comment

            Case "maj": Cellule = UCase(Cellule)

            Case "Npropre": Cellule = Application.Proper(Cellule)

            Case "min": Cellule = LCase(Cellule)


            End Select
        End If
    Next Cellule

End Sub
 

patricktoulon

XLDnaute Barbatruc
re

voila les modif faites
mais je pense pas que prendre la colonne sur usedrange par defaut soit une bonne solution surtout si on choisi peu de cellule voir qu'une
on devrait exclure uniquement le rows.count
donc soit la selection si moins que le usedrange soit usedrange si rows.count
a méditer
virginie nous dira si elle en a pas marre
 

Pièces jointes

  • Archive virginie patricktoulon .zip
    133.5 KB · Affichages: 4
  • archive virginie thierry .zip
    59.4 KB · Affichages: 4

Discussions similaires

Réponses
1
Affichages
432
Réponses
5
Affichages
273
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…