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

Virginie17d

XLDnaute Occasionnel
1588208871672.png
 

Pièces jointes

  • MACROS VBA PERSONNEL.xlsm
    60.1 KB · Affichages: 264

Virginie17d

XLDnaute Occasionnel
Messieurs,

Après avoir vu le dernier XLAM de Thierry, voici mes remarques :

Maj/Min/Nompropre : OK
Caractères : OK
Login : Génère 2/3 lignes supplémentaire avec que le /SOCIETE et #N/A, cela va générer des erreurs lors du chargement.
Trim Espaces : OK
Téléphone : OK même magique

Je me permet de vous joindre les fichiers à jours car le template de test n'est pas sur le même nombre de colonne et j'ai ajouté des Macros et Icons

Je dois encore revoir la génération de mot de passe, il fonctionne plus je sais pas ce que j'ai fait.

Mais c'est juste de l'optim, il convient parfaitement à mon utilisation, un grand merci
 

Pièces jointes

  • XLD_Virginie17d_03052020_V02.zip
    60.8 KB · Affichages: 9

_Thierry

XLDnaute Barbatruc
Repose en paix
Re patrick, vite fait pour :

et dans le mien le max c'est le end (xlup)
Le mien aussi je redimensionne en cas de colonne entière sélectionnée (message plus haut)
:
Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, Selection.Columns.column).End(xlUp))


c'est msgbox selection.entirecolumn
apres en array faut convertir je crois
Non j'ai une une incompatibilité de type...

et le nom du tab et group a changé
Oui tu parle du CustomUI, oui je ne svaispas ce que c'était "Template" et "TRAVELDOO" et puis c'est pour Virginie , non ? LoL

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

Au top Patrick, je peux traiter du multi-colonnes grace à toi !
VB:
MyColumnsArray = Evaluate("COLUMN(" & Selection.EntireColumn.Address & ")")
For c = 1 To UBound(MyColumnsArray, 1)
MyLastColumn = MyColumnsArray(c)
Next c

MsgBox MyLastColumn
    If Selection.Count >= Rows.Count Then
          Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, MyLastColumn).End(xlUp))
    End If

Voilà pour le moment !!!
Excusé je n'ai pas lu les derniers derniers message, mais il y a aura une nouvelle xlam v02
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re coucou Virgine,

Login : Génère 2/3 lignes supplémentaire avec que le /SOCIETE et #N/A, cela va générer des erreurs lors du chargement.

Oui j'avais remarqué, c'est dû à : n = ActiveSheet.UsedRange.Rows.Count et dans le fichier d'origine nous avons un N/A qui se balade en C91 ... Donc l'algo de Patrick descend jusque là...
En fait ce "Login" c'est "l'intrus" de la XLAM je n'y ai pas trop porté cas :cool:

Ravi que Teléphone soit devenu Magique !!! Attends la v02 :p

Pour notre ami @Stapple1600, c'est vrai qu'on s'écarte un peu en on emploie la grosse artillerie dans ce Fil en s'égarant un peu, mais Virginie à l'air pleine de potentiel VBA et de bonne volonté et en prime elle est sympa !

@Plus tard !

@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
VB:
MyColumnsArray = Evaluate("COLUMN(" & Selection.EntireColumn.Address & ")")
For c = 1 To UBound(MyColumnsArray, 1)
MyLastColumn = MyColumnsArray(c)
Next c

MsgBox MyLastColumn

allons allons Thierry on fatigue ;)

VB:
MyColumnsArray = Evaluate("COLUMN(" & Selection.EntireColumn.Address & ")")

MyLastColumn=MyColumnsArray(ubound(MyColumnsArray))

tu es sur de ceci Thierry moi moins
:
Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, Selection.Columns.column).End(xlUp))

et c'est quoi ca "Selection.Columns.column"
Selection.Column
fait la même chose
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
et encore une

VB:
 Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, MyLastColumn).End(xlUp))
grosse erreur de procéder comme ça quand on travaille sur des tableaux

ne jamais prendre le end(xlup) de la dernière colonne

d'autant plus qu'en général c'est plutôt l'inverse les première colonnes remplies sur une lignes les dernières parfois vides
ca aussi a méditer ;)
il faudra revoir plein de petit trucs qui ont été négligé

@Virginie17d
la génération de mdp dans les grandes lignes ?
  1. combien de caractères ????
  2. combien de lettres , de numeriques , de caracteres particuliers ????
  3. la destination ????
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Patrick

Pour la première partie, oui c'est brut de décorticage de ton génial Evaluate. C'est clair je fatique, en plus travaillant directement sur la XLA à chaque fois que je ferme, vu qu'il n'y a pas d'alerte de sauvetage, j'ai tout perdu, LoL !!! Faut tout le temps "mitrailler" la disquette depuis VBE sinon, ben hop tout parti !!! donc je m'y suis repris à 10 fois pour faire cette cochonnerie !

Pour la seconde partie, je n'écris plus ceci dans mon post #167, mais ceci :
Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, MyLastColumn).End(xlUp))
La dimension de fin de Range est prise sur X Columns

Pour la difference entre
et c'est quoi ca "Selection.Columns.column"
Selection.Column
fait la même chose

Prends un classur vierge, selectionnne X columns...

1588540361449.png



fais la même chose avec le .Column en plus :
1588540520448.png


Et j'ai donc ma colonne de départ ... Pour dimensionner ma zone de travail...

Grace à toi, j'avais le début et maintenant j'ai la fin pour dimensionner cette zone, encore merci

@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Patrick
C'est pour le Entire-Multi-Colonnes et éviter que ca mouline jusqu'à la Saint GlinGlin tout ça ........
Avant il n'y avait aucun garde-fou...

grosse erreur de procéder comme ça quand on travaille sur des tableaux
ne jamais prendre le end(xlup) de la dernière colonne
d'autant plus qu'en général c'est plutôt l'inverse les première colonnes remplies sur une lignes les dernières parfois vides
ca aussi a méditer ;)
il faudra revoir plein de petit trucs qui ont été négligé

Il y a toujours moyen d'améliorer évidemment, si on a toujours quelque chose en Colonne "A" c'est sur que c'est plus simple...

Mais comme je dis j'ai la "Culture XLA" ca doit s'adapter à tout classeur, probablement en rester à la v01, c'est plus simple puisque elle est bridée pour ne traiter qu'une seule colonne entière à la fois... A vouloir trop en faire maintenant avec du Entire-Multi-Colonnes on s'expose à des effets de bord...

Mais on moins on apprends des trucs ! N'est-ce pas Patrick et Virginie ! ;)
@+Thierry

EDIT Après reflexion, dans le cas du Tableau de Virgine, si toutes les colonnes n'ont pas les mêmes longueurs, à mon avis c'est qu'il manque des data aussi, non ?
 

patricktoulon

XLDnaute Barbatruc
Re Patrick

Pour la première partie, oui c'est brut de décorticage de ton génial Evaluate. C'est clair je fatique, en plus travaillant directement sur la XLA à chaque fois que je ferme, vu qu'il n'y a pas d'alerte de sauvetage, j'ai tout perdu, LoL !!! Faut tout le temps "mitrailler" la disquette depuis VBE sinon, ben hop tout parti !!! donc je m'y suis repris à 10 fois pour faire cette cochonnerie !

Pour la seconde partie, je n'écris plus ceci dans mon post #167, mais ceci :
Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, MyLastColumn).End(xlUp))
La dimension de fin de Range est prise sur X Columns
et non thierry dans ton code
la dimension rows se fait par Cells(Rows.Count, MyLastColumn).End(xlUp)
en l’occurrence ici la dernière ligne de LA DERNIERE COLONNES et non LES COLONNES

et c'est
msgbox selection.column.address ' SANS LE (S)
qui donne la premiere

je crois que dans le contexte la solution la plus simple serait le usedrange.speciallcells(xllastcell).row
sinon il y a des risque d’être plus haut que la fin

ps moi aussi j'ai pleurer misère avec xlam
ASTUCE DU JOUR BONJOUR

pour m'en sortir en restant appuyé sur les modules je les glisse dans le xlsx dans vbe
et je ferme le xlam et quand j'ai fini de coder je sauve le xlsx en xlam en écrasant le xlam
RESTE plus qu'a remettre le ruban

 

Virginie17d

XLDnaute Occasionnel
re
et encore une

VB:
 Set TargetRange = Range(Cells(2, Selection.Columns.column), Cells(Rows.Count, MyLastColumn).End(xlUp))
grosse erreur de procéder comme ça quand on travaille sur des tableaux

ne jamais prendre le end(xlup) de la dernière colonne

d'autant plus qu'en général c'est plutôt l'inverse les première colonnes remplies sur une lignes les dernières parfois vides
ca aussi a méditer ;)
il faudra revoir plein de petit trucs qui ont été négligé

@Virginie17d
la génération de mdp dans les grandes lignes ?
  1. combien de caractères ????
  2. combien de lettres , de numeriques , de caracteres particuliers ????
  3. la destination ????
Ah zuttt !!! Normal dans mon template d'origine le sheets est nommé "Profile", et comme je change de fichier j'ai oublié de modifier cet élément, bien vu !!!

Dans le principe
1-Je veux continuer à avoir le MsgBox qui demande le nombre de caractères.
2- Il n'y a pas d'impératif du nombre de Lettre maj/min, Numéro et ou caractères spéciaux, c'est comme j'ai envie.
3- La destination est dans la colonne 4 "D"
 

Virginie17d

XLDnaute Occasionnel
Re Patrick
C'est pour le Entire-Multi-Colonnes et éviter que ca mouline jusqu'à la Saint GlinGlin tout ça ........
Avant il n'y avait aucun garde-fou...



Il y a toujours moyen d'améliorer évidemment, si on a toujours quelque chose en Colonne "A" c'est sur que c'est plus simple...

Mais comme je dis j'ai la "Culture XLA" ca doit s'adapter à tout classeur, probablement en rester à la v01, c'est plus simple puisque elle est bridée pour ne traiter qu'une seule colonne entière à la fois... A vouloir trop en faire maintenant avec du Entire-Multi-Colonnes on s'expose à des effets de bord...

Mais on moins on apprends des trucs ! N'est-ce pas Patrick et Virginie ! ;)
@+Thierry

EDIT Après reflexion, dans le cas du Tableau de Virgine, si toutes les colonnes n'ont pas les mêmes longueurs, à mon avis c'est qu'il manque des data aussi, non ?
LEs valeurs Nom prénom et Email sont obligatoire, les colonnes Action et Type également, toutes les autres sont optionnels
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Patrick
et non thierry dans ton code
la dimension rows se fait par Cells(Rows.Count, MyLastColumn).End(xlUp)
en l’occurrence ici la dernière ligne de LA DERNIERE COLONNES et non LES COLONNES

Oui pour ceci nous sommes d'accord... C'est bien mon intention....
Maintenant entre temps Virginie nous explique que certaines infos sont optionelles, donc oui je vais me cadrer sur la Colonne "A" mais je vais en faire une option en fait avec un Setup de la XLA... Héhéhé LoL...

C'est fou ce que ce fil est prenant, désolé pour les autres demandeurs d'XLD, ils sont un peu délaissés ce soir !
Bien à vous
@+Thierry
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 017
Messages
2 104 583
Membres
109 084
dernier inscrit
mizab