Création code VBA

Bonjour

Je fait un exercice sur vba mais je bloque sur plusieurs éléments

46af9a2e 68a6 49b4 9f87 4f09f15dec0d
  • je ne sais pas comment faire (dans la 2ème et 3ème question) pour que l’algorithme redemande à l’utilisateur de ressaisir la valeur jusqu’à que l’élément saisit soit correct
  • Ensuite je ne sais pas non plus où insérer le
« Valmin = Application.WorksheetFunctions.Min(range(a1:a100))

Msgbox(‘´Valmin’´)

Valmax= Application.WorksheetFunctions.Max(range(a1:a100))

Msgbox(‘’valeurmax’´) » afin d’affiche les valeurs max et min

Pour le reste je pense que c’est ça je n’en suis pas sûr du tout...

sub exo1 ()
Dim t(1 to 100) as integer,i as integer,n as integer
Do
n=inputbox(‘´combien de valeurs à copier?’´)
Loop until n>=0 and n<=20
For i=1 to n 
n=inputbox(‘´quelle est la ‘´& i &’´ ème valeur?’´)
Cells(1,i)=n
Next 
End Sub

Bonjour,

à tester, est ce que ça convient ?

Édit: J’ai ajouté une description pour une meilleure compréhension

Sub exo1()
Dim t() As Integer, i As Integer, n1 As Integer, n2 As Integer
Dim vMin As Integer, vMax As Integer
Do
    'en prévision d'un clic sur le bouton Annuler de l'InputBox
    On Error Resume Next
    'possibilité de faire un tableau de 1 à 100 réels: "Inscrire un nombre entre 1 et 100"
    n1 = InputBox("Combien de valeurs à copier?", "Inscrire un nombre entre 1 et 100")
    'si le bouton Annuler de l'InputBox a été enfoncé
    If Err.Number > 0 Then Err.Clear
    'ré-affiche le message tant que le nombre inscrit n'est pas entre 1 et 100
Loop Until n1 > 0 And n1 <= 100

'dimention du tableau de 0 à n1 -1 (0 à 99 pour 100 valeurs)
ReDim Preserve t(n1 - 1)

For i = 0 To n1 - 1
    'Voir: Résumé des types de données
    'La variable n2 est déclaré Integer, Taille: 2 octets, Plage: -32768 à 32767
    'le message revient tant que le tableau n'est pas entièrement renseigné
     n2 = InputBox("Quelle est la  " & i + 1 & " e  valeur?", "Inscrire un nombre entre -32 768 et 32 767")
     'inscription du nombre dans le tableau
     t(i) = n2
Next

vMin = Application.Min(t)
vMax = Application.Max(t)
MsgBox "Valeur Min: " & vMin & Chr(10) & "Valeur Max: " & vMax
End Sub

Bonjour,

Déclare un tableau pouvant contenir au plus 100 réels

un "réel" n'est pas un "entier" : "integer" : 36767 , de plus apparemment , VBA converti en interne "integer" en "long" : 2 147 483 647

donc : Dim Tab(100) as Long

ce qui donne : de 0 à 99... ce qui fait 100 au maxi...

@+JP

un "réel" n'est pas un "entier"

c'est vrai,

Les nombres réels sont utilisés pour représenter n'importe quelle mesure physique

les entiers naturels,

les entiers relatifs,

les nombres décimaux, qui sont les réels que l'on peut écrire exactement en base 10 ;

les nombres rationnels, exprimables sous forme de fractions à numérateurs et dénominateurs entiers,

les nombres algébriques, qui comprennent notamment tous les nombres que l'on peut écrire en utilisant les quatre opérations élémentaires et les racines.

les nombres calculables, qui comprennent la quasi-totalité des nombres utilisés en science et en ingénierie (notamment e et π).

et donc:

il serait mieux de déclarer la variable t en variant Dim t()

donc : Dim Tab(100) as Long

la question:

1.Déclare un tableau pouvant contenir au plus 100 réels

2.Demande à l’utilisateur de saisir le nombre d’élément du tableau

perso je pense que la question est mal posée,

si n1 = 1.25

Loop Until n1 > 0 And n1 <= 100 ReDim Preserve t(n1 - 1)

et crach

le mot "réels" n'a pas ça place

ou bien spécifier:

n1 = InputBox("Combien de valeurs à copier?", "Inscrire un NOMBRE ENTIER entre 1 et 100")
if  isnum(n1) then
n1 = int(n1)

Bonjour,

0..99 (en interne) et 1 à 100 (en public) c'est le nombre de question et réponse ...

ne pas oublier ...1.25 doit être entre 0 et 20

...les éléments autorisés sont compris entre 0 et 20...

ce contrôle n'existe pas dans l'input

@+JP

0..99 (en interne) et 1 à 100 (en public) c'est le nombre de question et réponse

c'était déjà prévu...

For i = 0 To n1 - 1

ne pas oublier ...1.25 doit être entre 0 et 20

nos idées se sont croisées

Bonjour,

n2 as integer est trop restrictif,

n2 as variant est une possibilité , qui cette fois est trop large (dans variant il y a du texte )

en reprenant le code de sabV

dim n2 as Long
'la boucle qui correspond à la première question : combien d 'éléments ?
For i = 0 To n1 - 1
    'boucle qui correspond à : éléments compris entre 0 et 20
    'attention ici , 0 est exclu et 20 est inclu
    Do
        'le message revient tant que le tableau n'est pas entièrement renseigné
         n2 = InputBox("Quelle est la  " & i + 1 & " e  valeur?", "Inscrire un nombre entre 0 et 20")
     Loop Until n2 > 0 And n2 <= 20

     'inscription du nombre dans le tableau
     t(i) = n2
Next i

@+JP

si n2 est déclare Long

et que l'utilisateur tape un alpha,

cette valeur est inscrit comme 0 sans aucun avertissement,

Sub exo1()
Dim t() As Integer, i As Integer, n1 As Integer, n2 As Variant
Dim vMin As Integer, vMax As Integer
Do
    On Error Resume Next
    n1 = InputBox("Combien de valeurs à copier?", "Inscrire un nombre entre 1 et 100")
    If Err.Number > 0 Then Err.Clear
Loop Until n1 > 0 And n1 <= 100

ReDim Preserve t(n1 - 1)

For i = 0 To n1 - 1
recommencer:
     n2 = InputBox("Quelle est la  " & i + 1 & " e  valeur?", "Inscrire un nombre")
     If IsNumeric(n2) Then t(i) = n2 Else GoTo recommencer
Next

vMin = Application.Min(t)
vMax = Application.Max(t)
MsgBox "Valeur Min: " & vMin & Chr(10) & "Valeur Max: " & vMax
End Sub

Merci les gars! C’est bon

Bonjour,

effectivement , il y a un problème

quand on tape "aa" par exemple

capture1

ce message apparait... avant : If IsNumeric(n2) Then t(i) = n2 Else GoTo recommencer

il faut donc gérer : on error goto...

ou alors , pour contourner ce problème

capture2

@+JP

Enfait je vient de regarder, le code ne copie rien dans le tableau

Bonjour,

poste le code stp

@+JP

Sub exo1()
Dim t() As Integer, i As Integer, n1 As Integer, n2 As Integer
Dim vMin As Integer, vMax As Integer
Do

    On Error Resume Next
    n1 = InputBox("Combien de valeurs à copier?", "Inscrire un nombre entre 1 et 100")
    If Err.Number > 0 Then Err.Clear
Loop Until n1 > 0 And n1 <= 100

ReDim Preserve t(n1 - 1)

For i = 0 To n1 - 1
     n2 = InputBox("Quelle est la  " & i + 1 & " e  valeur?", "Inscrire un nombre entre -32 768 et 32 767")
     t(i) = n2
Next

vMin = Application.Min(t)
vMax = Application.Max(t)
MsgBox "Valeur Min: " & vMin & Chr(10) & "Valeur Max: " & vMax
End Sub

Bonjour,

en premier , il faut mettre : Next i , manque le "i"

ensuite :

capture3

effectivement le tableau est vide ... MAIS

capture4

ICI , il est rempli d' INTEGER

regarde tous les posts ...

@+JP

Bonjour,

et en plus , (c'était pas voulu ) , le 24 n'est pas bon !!

@+JP

Le 24 ? c'est où

Je veux juste copier les valeurs qu'on rentre sur une ligne de tableau il faudrait changer en t(i)=Cells(1,i) mais ça ne marche pas non plus

Bonjour,

regarde la dernière image que j'ai postée ,

c'est le tableau "t" qui est rempli avec

réponse 1 :12

réponse 2 :24

les réponses doivent être entre 0 et 20

@+JP

Je veux juste copier les valeurs qu'on rentre sur une ligne de tableau il faudrait changer en t(i)=Cells(1,i) mais ça ne marche pas non plus

à tester, est ce que ça convient ?

Sub exo1()
Dim t() As Integer, i As Integer, n1 As Integer, n2 As Variant
Dim vMin As Integer, vMax As Integer
Do
    On Error Resume Next
    n1 = InputBox("Combien de valeurs à copier?", "Inscrire un nombre entre 1 et 100")
    If Err.Number > 0 Then Err.Clear
Loop Until n1 > 0 And n1 <= 100

ReDim Preserve t(n1 - 1)

For i = 0 To n1 - 1
recommencer:
     n2 = InputBox("Quelle est la  " & i + 1 & " e  valeur?", "Inscrire un nombre")
     If IsNumeric(n2) Then t(i) = n2 Else GoTo recommencer
Next

vMin = Application.Min(t)
vMax = Application.Max(t)
MsgBox "Valeur Min: " & vMin & Chr(10) & "Valeur Max: " & vMax
ActiveSheet.Cells(2, 1).Resize(UBound(t) + 1, 1) = Application.Transpose(t)
End Sub
Rechercher des sujets similaires à "creation code vba"