Creation grille avec insert couleur

symbol

Membre actif
13 Octobre 2004
536
25
Bonjour,

J'ai un fichier texte contenant des séries de chiffres de 1 à 30.
Chaque ligne du fichier texte est composée de 8 chiffres, séparés par une tabulation.
Dans l'exemple ci-dessous , je remplace la tabulation par un point virgule (;).
ca donne :
7;10;12;21;27;28;29;30

je souhaiterai que ces séries de chiffres (y'en a des centaines basée sur le même format), s'insère dans une grille composé de 30 cellules,mais que la cellule qui correspond au chiffre se colore d'une couleur de mon choix.

Le 7 dans la 7 cellule, le 10 dans le 10 etc....

Pour mieux comprendre ce que je veux, une fois tous les chiffres insérés cela donnerait une sorte de damier de case aléatoire colorée .

Est-ce possible ? si oui avec quel logiciel ? et surtout comment ?????

merci.
 
Ton explication n'est pas très claire (ou du moins, je ne suis pas sûr de bien comprendre).
- tu disposes d'un fichier en texte tabulé avec des lignes comportant chacune huit nombres entre 1 et 30
- tu voudrais que, dans un logiciel à définir, il soit possible automatiquement de remplir une grille de trente colonnes avec, pour chaque ligne du fichier texte, une ligne où les colonnes correspondant au nombres soient remplies et mise en forme. Un peu comme dans l'image jointe.

Si c'est ça, c'est faisable avec Excel et une macro. Dans l'immédiat je ne vois pas trop d'autre façon de procéder. Il te reste à apprendre à programmer… ;)

Si ce n'est pas ça, merci de donner des précisions complémentaires.
 
Ton explication n'est pas très claire (ou du moins, je ne suis pas sûr de bien comprendre).
- tu disposes d'un fichier en texte tabulé avec des lignes comportant chacune huit nombres entre 1 et 30
- tu voudrais que, dans un logiciel à définir, il soit possible automatiquement de remplir une grille de trente colonnes avec, pour chaque ligne du fichier texte, une ligne où les colonnes correspondant au nombres soient remplies et mise en forme. Un peu comme dans l'image jointe.

Si c'est ça, c'est faisable avec Excel et une macro. Dans l'immédiat je ne vois pas trop d'autre façon de procéder. Il te reste à apprendre à programmer… ;)

Si ce n'est pas ça, merci de donner des précisions complémentaires.


Oui ! c'est ce que je voudrais !!!! :)
Ta photo écran, est le reflet parfait de ce que ca devrait me donner.

Est il possible d'avoir la macro ?
 
Dernière édition:
Si j'ai un peu de temps, je verrai...
Allez, je suis dans un bon jour, voilà une macro un peu vite fait qui donne le résultat attendu :
Bloc de code:
Sub RemplirTableau()

' Ne pas afficher les changements à mesure, pour gagner du temps
Application.ScreenUpdating = False

' Variables à personnaliser :
FichierTexte = "Disque Dur:Users:TonNomAbrégé:Desktop:FichierTexte.txt"
ClasseurTableau = "TestCouleurs.xlsm"  ' nom du classeur contenant le tableau
FeuilleTableau = "Feuil1"     ' nom de la feuille contenant le tableau
Remplissage = "x"     ' caractère à mettre dans les cellules, éventuellement rien = ""

' Ouverture du fichier texte et calcul du nombre de lignes
Workbooks.OpenText Filename:=FichierTexte, DataType:=xlDelimited
NombreLignes = Range("A1").End(xlDown).Row
    
' Remplissage du tableau et mise en forme
For i = 1 To NombreLignes
For j = 1 To 8
    MaVal = Cells(i, j).Value
    With Workbooks(ClasseurTableau).Sheets(FeuilleTableau).Cells(i + 1, MaVal)
        .Value = Remplissage
        .HorizontalAlignment = xlCenter
        .Font.FontStyle = "Gras"   ' ou "Bold", selon version
        .Interior.ColorIndex = 7   ' à adapter selon besoins
    End With
Next j
Next i

' Fermeture du fichier texte
ActiveWorkbook.Close savechanges:=False

' Enregistrement du tableau
Workbooks(ClasseurTableau).Save

' Retour de l'affichage
Application.ScreenUpdating = True

End Sub
 
Dernière édition:
Merci !

J'ai essayé, mais ca me donne



:(

Y'a une truc que je ne fais pas correctement.

J'ai une erreur "l'indice n'appartient pas à la selection"

- Mes données sont dans un 1 fichier texte (sépararés par des tabulations)
1 2 3 5 9 11 13 14
2 4 5 7 11 12 22 23
3 5 9 16 21 24 28 30
 
Dernière édition:
- Mes données sont dans un 1 fichier texte (sépararés par des tabulations)
Oui, ça c'est clair. Mais il faut surtout que tu regardes dans les personnalisations (les premières lignes de la macro). Assure-toi que le chemin vers le fichier texte est correct (j'ai l'impression que non). Fais éventuellement exécuter la macro en pas à pas, pour voir ce qui se passe exactement.

Pour ma part, avec les trois lignes que tu indiques (après les avoir copiées dans un fichier TextEdit et remplacé les espaces par des tabulations) j'obtiens bien ça :
 
Dernière édition:
Confirme si je fais bien:

- 1) j'ouvre une feuille avec excel,
- 2) je met les chiffres de 1 a 30 dans les cellules de A1a AD
- 3) je vais dans le menu outil/macro/visual basic editor
- 4) je fais copier coller de la macro ( en changeant la variable de l'emplacement de mon fichier texte qui contient les chiffres a placer), qui devient :

-> FichierTexte = "Hard Drive:Users:xxxxxx:desktop:mesdonnees.txt" (le nomde mon disque est "Hard Drive"

- 5) je sauvegarde.

-6) j'ouvre ma sauvegarde, et clique sur executer la macro.

fin
 
Dernière édition:
Confirme si je fais bien :
A priori, cela semble correct. Tu ne précises toute fois pas (mais je suppose que tu le fais) si tu personnalises bien aussi les autres noms (ton classeur, ta feuille, en particulier).

FichierTexte = "Hard Drive:Users:xxxxxx: Desktop:mesdonnees.txt"
Le fichier en question est bien sur le bureau et se nomme bien "mesdonnées.txt" ?

Essaye en faisant l'exécution pas à pas, pour voir ce qui cloche. Dans l'éditeur VBA, tu peux obtenir l'affichage des variables en laissant le curseur sur le nom de la variable, ça aide à voir ce qui est en train de se faire. Voici par exemple ce qu'on obtient lorsqu'on laisse quelques instants le curseur sur l'intitulé "NombreLignes" :
 
J'ai fais une capture ecran video pour te montrer ce qui se passe, telecharge la viedo
Déjà, on peut en conclure que, jusqu'à l'ouverture du fichier "mesdonnees.txt", tout se passe bien. Mais ensuite, il faut que tu regardes ce qui cloche dans l'éditeur VBA. Tu as un message d'erreur, il faut que tu regardes pourquoi.

Comme indiqué précédemment, il te faut exécuter pas à pas la macro et voir à quel moment ça plante et pourquoi. Donc, au lieu de lancer l'exécution depuis le menu "Outils", tu vas dans l'éditeur VBA puis, via le menu "Affichage" > "Barres d'outils", tu demandes la barre "Débogage" et tu cliques sur le bouton "Pas à pas détaillé" : à chaque clic tu verras une ligne d'instructions s'exécuter et la ligne suivante se surligner en jaune. À chaque étape, tu peux ainsi voir quelles sont les valeurs affectées aux variables et t'assurer qu'elles sont cohérentes, voir ce qui a été fait par la macro dans la feuille "Feuil1", repérer ce qui ne va pas. Au moment du blocage, logiquement, tu devrais pouvoir en déterminer la cause...

C'est pas plus simple de m'envoyer le fichier .xlsm directement ?
L'intérêt n'est pas évident car, une fois copiée la macro, c'est dans l'environnement, le contexte, qu'il faut chercher ce qui cloche. Et ça, ce n'est pas dans le classeur, c'est chez toi...
 
Dernière édition:
J'ai fais "pas a pas detaillé" :

1) Ca met une petite fleche jaune en face de "Sub RemplirTableau()"

je clique sur continuer

ca m'ouvre une nouvelle fenetre apellée mesdonnees.txt avec une fenetre d'erreur qui dit : Microsoft Visual Basic "erreur définie par l'application ou pas l'objet"

Maintenant j'ai 2 feuilles : 1 qui se nomme mesdonnees.txt et testCouleurs.xlsm
 
je clique sur continuer
Non, comme indiqué il faut aller dans l'éditeur VBA et cliquer sur le bouton "Pas à pas détaillé". Et uniquement sur celui-là pour regarder, étape après étape, ce qui se passe et ce qui cloche. Si tu cliques sur la flèche bleue "Continuer" tu lances l'exécution "normale" de la macro, tu restes donc dans les données précédentes : ouverture du fichier texte puis plantage. Vois au moins sur quelle ligne le plantage survient (elle est surlignée en jaune dans l'éditeur VBA) pour commencer à voir pourquoi ça plante.

Maintenant j'ai 2 feuilles : 1 qui se nomme mesdonnees.txt et testCouleurs.xlsm
Ben oui, ça ne change pas des fois précédentes, et pour cause...
 
Finalement j'ai trouvé :

Il faut copier la macro et la mettre dans "thisworkbook" et pas dans "feuil1".

Grand merci à Aliboron (Bernard pour le code).
 
Dernière édition:
  • J’aime
Réactions: Aliboron
Il faut copier la macro et la mettre dans "thisworkbook" et pas dans "feuil1".
Non, pas dans "ThisWorkbook" non plus. En principe, on réserve ces feuilles de code à des macros "événementielles" directement liées à ces objets. On peut d'ailleurs le voir par les propositions de macro spécialisées qui y sont faites ("Workbook_Open", etc.)

Pour les macros qu'on crée, on utilise généralement des modules qu'on insère (via "Insertion" > "Module") après avoir sélectionné dans la liste des VBAProjects (à gauche) celui qui correspond au classeur voulu ("TestCouleurs" dans ce cas).

Mais bon, l'essentiel est que tu aies fini par le faire fonctionner !