Trouver le plus grand champ, compter....

Smint

XLDnaute Junior
Salut le forum.....

Pour ne pas avoir de problèmes pour importer des données XL dans Access, je dois être sur que les champs XL 'tiennent' dans ceux d'Access...

Pour contrôle, je voudrais pouvoir, champ par champ, pointer le plus long (parmis plusieurs milliers).... la cerise sur le gâteau étant: affichage du nombre de caractères....

Sauriez-vous comment faire?
Merci.
 

Hervé

XLDnaute Barbatruc
Bonjour smint, le forum

Pas sur d'avoir compris

Comment son disposé tes données, veux-tu une information par colonnes (si il y plusieurs colonnes), ou global ?

en attendant tes précisions, ce type de code recherche dans la colonne A la cellule ayant le plus de caractères.

Sub Bouton1_QuandClic()
Dim c As Range
Dim max As Byte
Dim addresse As String

For Each c In Range('a1:a' & Range('a65536').End(xlUp).Row)
   
If Len(c) > max Then max = Len(c): addresse = c.Address(0, 0)
Next c

MsgBox 'la cellule ' & addresse & ' comprend ' & max & ' caractères.'
End Sub


salut

Message édité par: Hervé, à: 06/09/2005 15:23
 

Smint

XLDnaute Junior
Merci de ta réponse rapide, Hervé....

Il faudra que je fasse autant de fois le test qu'il y a de colonnes.... A voir s'il y a une technique qui me permet d'avoir un affichage sur toutes les colonnes, après le dernier enregistrement, par exemple...

J'attends tes précisions pour tester....
 

Hervé

XLDnaute Barbatruc
re smint , le forum

Si tu attends mes précisions alors que j’attends les tiennes, on ne risque pas de résoudre ton souci. :)

Non non on peut imagininer une macro qui boucle sur toutes les colonnes comme une grande, mais ou veux-tu renvoyer les données, à la fin de chaque colonne ?

Et quelle type d'information veux tu renvoyer le nombre et la cellule ?


cette autre macro fait ceci :

Sub Bouton1_QuandClic()
Dim i As Integer, j As Integer
Dim max As Byte
Dim addresse As String
Dim derligne As Integer

For i = 1 To Range('iv1').End(xlToLeft).Column
    derligne = Cells(65536, i).End(xlUp).Row
   
For j = 1 To derligne
       
If Len(Cells(j, i)) > max Then max = Len(Cells(j, i)): addresse = Cells(j, i).Address(0, 0)
   
Next j
   
    Cells(derligne + 1, i) = 'la cellule ' & addresse & ' = ' & max
    max = 0
    addresse = ''
Next i
End Sub


salut

Message édité par: Hervé, à: 06/09/2005 15:47
 

Smint

XLDnaute Junior
Si tu attends mes précisions alors que j’attends les tiennes, on ne risque pas de résoudre ton souci.
Effectivement....

Donc, je résume:

Des miliers d'enregistrements, une trentaine de champs...

Ce que je voudrais c'est avoir, après le dernier enregistrement et dans chaque colonne, le nombre de caractères le plus élevé que contienne un champ, à l'intérieure de celle-ci.....

Non non on peut imagininer une macro qui boucle sur toutes les colonnes comme une grande
bâ, ça serait bien cool... comme j'aurais à le faire à chaque fois que je réceptionne un fichier nouveau...

veux-tu renvoyer les données, à la fin de chaque colonne ?
Par exemple, ça serait clair....

Et quelle type d'information veux tu renvoyer le nombre et la cellule ?
Le nombre de caractère qu'il y a dans le champ qui en contient le plus....

Ce qui se passe, c'est que je dois importer des donées sous Access: Pour que la base Access soit la plus performante possible, il faut que la taille des champs soit calculée la plus juste possible... Si, par exemple, dans un champ 'nom', j'ai assigné 30 caractère maxi et que dans le tableau XL, pour le même champ, j'en ai un parmis des milliers qui en fait 31, tout se vautre...

Donc, cette manip me permettrait, avant de lancer la procédure d'importation, de vérifier facilement que tout est clean....

Merci de ton attention...
 

Hervé

XLDnaute Barbatruc
re smint

serait ce le post de tout les malentendus smint :)

La macro de 15 h 45 devrait faire ce que tu demandes, non ?

Sub Bouton1_QuandClic()
Dim i As Integer, j As Integer
Dim max As Byte
Dim addresse As String
Dim derligne As Integer

For i = 1 To Range('iv1').End(xlToLeft).Column
    derligne = Cells(65536, i).End(xlUp).Row
   
For j = 1 To derligne
       
If Len(Cells(j, i)) > max Then max = Len(Cells(j, i)): addresse = Cells(j, i).Address(0, 0)
   
Next j
   
    Cells(derligne + 1, i) = 'la cellule ' & addresse & ' = ' & max
    max = 0
    addresse = ''
Next i
End Sub


tu devrais l'essayer.

salut
 

Hervé

XLDnaute Barbatruc
re

Le plus simple c'est que je t'envoi un exemple.

Fait alt f11 pour voir le code;

salut
[file name=Classeur6_20050906170105.zip size=7745]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur6_20050906170105.zip[/file]
 

Pièces jointes

  • Classeur6_20050906170105.zip
    7.6 KB · Affichages: 21

Smint

XLDnaute Junior
Un grand merci à toi Hervé....

En fait, j'ai testé en copiant/collant mes données dans ton fichier, ça me donne le résultat escompté. Excellent....

Je peux continuer comme ça, à l'avenir....

En revanche, ce que je voudrais, à cette occasion, c'est intégrer le code dans une macro que je pourrais utiliser à l'avenir.... Histoire de comprendre comment faire, plus que m'éviter des copier/coller quand j'aurais besoin de ton code, puisque c'est une fois de temps en temps....

Si toi ou quelqu'un d'autre voulais m'y aider? ... Je ne trouve pas de liens, pour l'instant qui m'aide à comprendre comment faire..

Thx....
 

Hervé

XLDnaute Barbatruc
re

si j'ai bien compris tu veux pouvoir utiliser cette macro souvent.

Pour ceci il existe le classeur macro perso; c'est un classeur masqué qui permet de stocker des macros dont on se sert souvent.

pour ceci lorsque tu as fait alt+ f11, et que tu es entré dans le vbe, fait CTRL+R pour entré dans la fenetre : explorateur de projet.

Dans cette fenetre, tu trouveras tous les projets vba (VBA project....).

Double clique sur vbaproject(perso.xls) puis sur module1.

Dans la fenetre qui vient de s'ouvrir , colle ton code.

Ainsi il sera disponible pour tout tes classeurs. (n'oublie pas d'enregistrer le perso.xls);

lorsque ensuite tu voudras lancer cette macro il te suffira de faire le menu outils/macro/macro et de double cliquer sur celle-ci.

je t'avouerai ne jamais me servir de ce classeur, alors j'espère que j'ai pas dit trop de bétise.

salut
 

Smint

XLDnaute Junior
Salut Hervé,

Effectivement, je vais me servir de cette macro assez souvent, mais pas assez pour me prendre la tête à vouloir l'enregistrer.... Encore que ce sera bien pratique.....
Si je veux apprendre à le faire, c'est pour pouvoir mémoriser la procédure et le refaire systématiquement, pour d'autres codes que je pourrais recevoir à l'avenir...

Juste après le alt+F11, il m'est possible de sélectionner le module 1 de vbaproject, sans passer par Ctrl+R... et le code est déjà en place dans la fenêtre.... C'est correct? Si oui, je ne comprends pas où coller le code et comment enregister ensuite.....



Merci.... on va y arriver.... ;-)
 

Hervé

XLDnaute Barbatruc
Bonjour smint, le forum


Depuis le début de ce post nous avons quelques soucis de compréhensions tout les deux. :)

Oublie mon intervention précédente, et explique moi clairement ce que tu veux faire :

1) enregistrer la macro dans un classeur perso pour l'avoir toujours sous la main ? *
2) avoir une explication détaillé de la macro.*


* Rayez la mention inutile

au plaisir de te lire

salut
 

Smint

XLDnaute Junior
1) enregistrer la macro dans un classeur perso pour l'avoir toujours sous la main ? *
ouiiiiiiiiiiiiiiiiii !!! :)))

2) avoir une explication détaillé de la macro.*
Pas nécessaire.... o_O ...


Depuis le début de ce post nous avons quelques soucis de compréhensions tout les deux.
Nannnnn... tu crois.... nous ne le faisons pas exprès, pourtant.....
 

Hervé

XLDnaute Barbatruc
re


:) :) :)

Pour savoir comment enregistrer une macro dans un classeur perso pour l'avoir toujours sous la main ? faite le 1

Pour avoir une explication détaillé de la macro faite le 2

Vous avez choisi le 1 alors regardez le fil d'hervé du 06/09/05 à 17 h 41 sur ce meme fil. bip... bip... bip...


:)
 

Discussions similaires

Statistiques des forums

Discussions
312 775
Messages
2 092 023
Membres
105 152
dernier inscrit
pago