Excel VBA : Format de cellule et Copie auto
Résolu/Fermé
TeTo25
Messages postés
20
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
21 octobre 2020
-
21 juin 2018 à 23:24
TeTo25 - 22 juin 2018 à 12:20
TeTo25 - 22 juin 2018 à 12:20
A voir également:
- Excel VBA : Format de cellule et Copie auto
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Déplacer une colonne excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
f894009
Messages postés
17239
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
10 février 2025
1 713
22 juin 2018 à 09:06
22 juin 2018 à 09:06
Bonjour,
fichier modifie avec separateur decimale utilise dans l'Excel ouvert: https://mon-partage.fr/f/Rilr8Kuj/
fichier modifie avec separateur decimale utilise dans l'Excel ouvert: https://mon-partage.fr/f/Rilr8Kuj/
TeTo25
Messages postés
20
Date d'inscription
vendredi 13 janvier 2017
Statut
Membre
Dernière intervention
21 octobre 2020
1
22 juin 2018 à 11:54
22 juin 2018 à 11:54
C'est tout bon j'ai réussi à résoudre mes problèmes.
Le format de cellule se gère automatiquement (uniquement pour 1 à 8 décimales)
Les cellules remplies sont copiées à la fin
Voici le code final que j'ai utilisé :
Voici le résultat final :

Merci pour l'aide
Le format de cellule se gère automatiquement (uniquement pour 1 à 8 décimales)
Les cellules remplies sont copiées à la fin
Voici le code final que j'ai utilisé :
Option Explicit Sub Remplissage_Aléatoire() ' Remplissage d'une zone de dimension variable par des valeurs aléatoires comprises entre deux bornes définies ' Programmation éffectuée par TeTo25 ' ___________________________________________ ' Réinitialiser les valeurs précédentes Call Réinitialiser ' ___________________________________________ ' Définition des variables Dim Min, Max As Double Dim i, j, k, Dec, NbCol, NbLig As Integer Dim Format, Cell As String Min = 0 Max = 0 Dec = 0 NbCol = 0 NbLig = 0 i = 0 j = 0 k = 0 ' ___________________________________________ ' Activer le mode aléatoire Randomize ' ___________________________________________ ' Récupération des paramètres Min = Range("A3").Value Max = Range("D3").Value Dec = Range("G3").Value NbCol = Range("A5").Value - 1 NbLig = Range("D5").Value - 1 Format = Left("0.00000000", Dec + 2) ' ___________________________________________ ' Validation des données saisies If Max - Min <= 0 Then MsgBox ("La borne supérieure doit être plus grande que la borne inférieure") ' Message d'erreur 1 Exit Sub End If If NbCol <= 0 Or NbLig <= 0 Then MsgBox ("Le nombre de colonnes ou lignes doit être supérieur ou égal à 1") ' Message d'erreur 2 Exit Sub End If ' ___________________________________________ ' Traitement des données et remplissage des cases For i = 0 To NbCol Step 1 ' Colonnes For j = 0 To NbLig Step 1 ' Lignes Range("A7").Offset(j, i) = Int(((Min + (Max - Min) * Rnd)) * 10 ^ Dec) / (10 ^ Dec) ' Valeur aléatoire entre les bornes Range("A7").Offset(j, i).Select Next j Next i ' ___________________________________________ ' Changement du format des cellules et copies des données Cell = ActiveCell.Address ' Récupération de l'adresse de la dernière cellule remplie Range("A7:" & Cell).Select ' Sélection de l'ensemble des cellules remplies Selection.NumberFormat = Format ' Modification du format (Nombre de décimales) Selection.Copy ' Copies des cellules Range("A7").Select ' Désactivation de la grande sélection (uniquement pour l'aspect visuel) ' ___________________________________________ ' Message de Validation final k = (NbCol + 1) * (NbLig + 1) ' Nombre de cellules remplies MsgBox (k & " cellules ont été remplies par des nombres compris entre " & Min & " et " & Max & ".") ' Message de validation End Sub Sub Réinitialiser() ' Réinitialisation des cellules ' Programmation éffectuée par TeTo25 Rows("7:999999").Select Selection.ClearContents Range("A7").Select End Sub
Voici le résultat final :
Merci pour l'aide
f894009
Messages postés
17239
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
10 février 2025
1 713
Modifié le 22 juin 2018 à 12:04
Modifié le 22 juin 2018 à 12:04
Re,
Si vous le dites...
Evitez d'utiliser des noms de variable ou autre qui sont des instructions ex: Format = Left("0.00000000", Dec + 2)
Si vous le dites...
Evitez d'utiliser des noms de variable ou autre qui sont des instructions ex: Format = Left("0.00000000", Dec + 2)
22 juin 2018 à 09:42
Je ne sais pas pourquoi mais ta solution ne fonctionne pas parfaitement...
Mais j'ai réussi à bidouiller autre chose qui fonctionne (Ce n'est pas parfait) :
Merci pour la modification sur Exit Sub, cela fait plus propre dans le code.
Pas d'idée pour la copie automatique de l'ensemble des valeurs ?
22 juin 2018 à 10:55
Pas d'idée pour la copie automatique de l'ensemble des valeurs ?
Actuellement vous ecrivez bien dans des cellules!!!!!!!!!!!!!!!!!!!!!
22 juin 2018 à 11:20
Oui bien entendu les valeurs sont mises dans les cellules de ce classeur. Cependant je les génères ici pour les copier ensuite dans d'autre classeurs qui ont des formats différents.
Dans le cas ou je génère des valeurs dans un tableau de 10x10 tout va bien, je sélectionne facilement mes données pour les copier où j'en ai besoin.
Cependant si je génère 10 000 Valeurs dans un tableau de 100x100 ou de 10x1000, c'est bien plus long de les sélectionner
C'est pourquoi j'aimerais qu'à la fin de la macro, l'ensemble des cellules remplies soient sélectionnées ou copiées.
Un peu comme ça :
Avec "Dernière Cellule " qui dépend de NbCol et NbLig...
Sauf que j'ai tenté d'écrire :
Mais ça ne fonctionne pas... Alors qu'il me semble que :
peut fonctionner... Je pense que c'est un problème de syntaxe mais je ne trouve pas la solution
Modifié le 22 juin 2018 à 11:36
Au fait: Je ne sais pas pourquoi mais ta solution ne fonctionne pas parfaitement...
Qu'est-ce qui ne va pas "parfaitement"
pour la copy a votre facon
22 juin 2018 à 12:20