Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Renseigner les lignes selon la saisie utilisateur

Hanjen

XLDnaute Nouveau
Bonjour,

Je souhaite renseigner les colonnes A et B avec les différentes saisie de l'utilisateur.
J'utilise range("A2").Value mais le but est de lui dire d'avancer dans les lignes selon l'itération.

Merci pour votre aide.
 

Pièces jointes

  • Capture.PNG
    190.5 KB · Affichages: 25

soan

XLDnaute Barbatruc
Inactif
Bonjour Hanjen, sylvanu,

voici une solution sans code VBA :

* sélectionne la 1ère cellule où il faut faire une saisie, par exemple A3

* appuie sur la touche Maj et maintiens-là enfoncée ; clique sur la dernière cellule où il faut faire une saisie, par exemple B10 ➯ la plage A3:B10 a été sélectionnée, et la cellule active est A3.

* pour chaque nombre à saisir : saisis ce nombre, puis sans appuyer sur Entrée, appuie sur la touche TAB (Tabulation) ; c'est la touche qui est juste à gauche de la lettre "A" ; tu remarqueras que TAB fait un déplacement horizontal en avant : A3 ; B3 ; A4 ; B4 ; A5 ; B5 ; etc... ; après B10, ça retourne en A3 ; pour faire un déplacement horizontal en arrière : Maj TAB ; après A3, ça retourne en B10.

* si tu utilises à la place Entrée, ça fera un déplacement vertical en avant : A3 ; A4 ; A5 ; A6 ; etc... ; après A10, ça va en B3 ; puis B4 ; B5 ; B6 ; etc... ; après B10, ça retourne en A3 ; pour faire un déplacement vertical en arrière : Maj Entrée ; B10 ; B9 ; B8 ; B7 ; etc... ; après B3, ça retourne en A10 ; puis A9 ; A8 ; A7 ; etc... ; après A3, ça retourne en B10.

tout ce que je viens de décrire s'appelle une "saisie guidée" (à l'intérieur d'une sélection).​

soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Hanjen, sylvanu,

lis d'abord mon post #3 précédent. (c'est une solution sans macro, grâce à une "saisie guidée")

maint'nant, si vraiment tu préfères une solution avec macro, ouvre le fichier joint, et fais : Ctrl e

attention : pour la saisie d'un nombre décimal, tu peux taper au choix point « . » ou virgule « , » comme séparateur décimal ; le point est plus pratique car ça permet d'utiliser le point du pavé numérique (qui est plus proche des touches de chiffres 0 à 9 ; ça évite de devoir taper la virgule du clavier central : touche à droite de la touche « N »).

en principe, je n'pense pas qu'il y a des mesures négatives, mais au cas où, il te suffit de taper le caractère moins devant : touche moins « - » du pavé numérique ou tiret « - » du clavier central (au-dessus de la lettre « Y », et un peu à gauche).

pour le nombre de mesures, note que si tu entres 0 la boucle For ne sera pas exécutée, car de 1 à 0 : rien.

si tu veux saisir une nouvelle série de mesures, c'est inutile d'effacer les anciennes mesures : refais juste Ctrl e car l'effacement sera fait automatiquement par la macro.
VB:
Option Explicit

Sub Main()
  Dim C#, E#, s$, n&, i&
  n = Cells(Rows.Count, 1).End(3).Row
  If n > 1 Then [A2].Resize(n - 1, 2).ClearContents
  s = InputBox("Quel est le nombre de mesures ?")
  n = Val(s)
  For i = 1 To n
    s = InputBox("Saisir la valeur client")
    C = Val(Replace$(s, ",", "."))
    s = InputBox("Saisir la valeur étalon")
    E = Val(Replace$(s, ",", "."))
    With Cells(i + 1, 1)
      .Value = C: .Offset(, 1) = E
    End With
  Next i
End Sub



note bien que pour l'instant, la macro permet uniquement la saisie des mesures, sans faire dessus aucun traitement numérique ; si besoin, tu peux demander une adaptation ; par exemple l'affichage du total des mesures et / ou de la moyenne des mesures ; à afficher via MsgBox (ou sur la feuille de calcul) ; mais si tu préfères le faire toi-même en utilisant une calculatrice, no problem.

comme le dit sylvanu, tu aurais mieux fait de joindre un fichier Excel .xlsm plutôt qu'une image ! et on aurait pu te répondre plus vite ; tu as eu de la chance que ton image ne contienne ni trop de données, ni un code VBA très long, car sans ça, je n'aurais pas pris la peine de faire entièrement un fichier Excel à partir de rien.​

à te lire pour avoir ton avis.

soan
 

Pièces jointes

  • Exo Hanjen.xlsm
    15.2 KB · Affichages: 5

Hanjen

XLDnaute Nouveau
Bonjour @sylvanu @soan
Je m'excuse pour la photo , j'avoue c'est compliqué sur photoshop @sylvanu
Merci @soan je ne connaissais pas le terme "saisie guidée".
Je viens de voir ton document c'est exactement ça...maintenant ya plus qu'à comprendre le code

Pour le traitement...oui c'est seulement le début lol ...il va il avoir du traitement sur les valeurs en mV/V . J'étudie le code et je te fais un retour @soan
 

Hanjen

XLDnaute Nouveau
Bonjour,
Je te fais un retour sur le fichier,
J'ai laisser plein de commentaire (pour me reperer dans le code en tant que débutante j'en ai besoin ).
Pour le coup je n'ai pas saisie toutes les lignes et de ce fait, en avançant sur le code je n'arrive pas à voir ce qui ne va pas.
J'ai laissé des points ??? sur les lignes où ça n'est pas clair. Peux-tu me les commenter ?

Clairement maitenant j'ai ces soucis là:

- j'ai insérer une nouvelle colonne ( du coup la saisie client se fait en colonne "palier de mesure") j'ai essayé de modifier le code sans succès.
- je souhaite initialiser la colonne "palier de mesure" avec en première ligne la capacité min (donnée saisie par l'utilisateur) puis les suivantes en faisant B2+ PALIER (palier étant la valeur calcul par le code).

Peux-tu m'aiguiller?
 

Pièces jointes

  • Test projet.xlsm
    125.5 KB · Affichages: 4

Hanjen

XLDnaute Nouveau
Re,
je viens de refaire des tests, j'ai bien réussis à reculer l'écriture dans les bonnes colonnes
avec ce code: mais je souhaite que toutes les lignes et colonnes s'efface lorsqu'on relance le programme.

Sub Main()
'Déclaration variables
's valeur client et valeur étalon ou nombre de mesure???
'
Dim C#, E#, s$, n&, i&, Etalon$, Palier&, Max&, Min&


Max = InputBox("Entrez la capacité max")
Min = InputBox("Entrez la capacité min")
Palier = (Max - Min) / 9
Range("I1").Value = Application.RoundDown(Palier, -1) 'fonction pour tronquer la valeur de la variable palier

'Initialisation de la colonne "Palier de charge"
'A2=Palier
'A3 à A...selon n nombre mesure =A2+Palier
'Range("A2").Value = Palier

'effacer le contenu de toutes les lignes
n = Cells(Rows.Count, 1).End(3).Row


If n > 1 Then [A2].Resize(n - 1, 2).ClearContents 'je n'arrive pas à décaler sur la celulleB2

s = InputBox("Quel est le nombre de mesures ?")
n = Val(s) 'ici on affecte le nombre de mesure s à n???

For i = 1 To n
Etalon = InputBox("Quel étalon utilisez-vous")
s = InputBox("Saisir la valeur client")
C = Val(Replace$(s, ",", ".")) 'je ne comprends pas à quel moment au lui demande de mettre C en A2 et E en B2???
s = InputBox("Saisir la valeur étalon")
E = Val(Replace$(s, ",", "."))
With Cells(i + 1, 2)
.Value = C: .Offset(, 1) = E
End With
If i < n Then
MsgBox ("Passez au palier suivant")
End If

Next i
End Sub
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir Hanjen,

ton fichier en retour.

fais d'abord les tests : clique sur ton bouton, ou fais Ctrl e.

lis bien attentivement tous les commentaires du code VBA.

soan
 

Pièces jointes

  • Test projet.xlsm
    129.7 KB · Affichages: 3
Dernière édition:

Hanjen

XLDnaute Nouveau
Bonsoir Hanjen,

ton fichier en retour.

fais d'abord les tests : clique sur ton bouton, ou fais Ctrl e.

lis bien attentivement tous les commentaires du code VBA.

soan
Bonsoir @soan j'étais à fond dans mon projet...j'ai pas mal bosser avec un collègue on a repris le code. C'est une autre façon de faire mais on obtiens la même chose.
Je suis sur la partie traitement des données, je bloque sur le calcul de la moyenne de cellules (3 cellules) B5, H5 et N5. J'ai des cellules sur les plages B5 à B14, je souhaite faire ligne par ligne la moyenne des colonnes B,H et N. Les résultats des moyennes sont dans une autre feuille en B5 à B14.
Je n'arrive pas à trouvé quelle fonction utiliser .
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Hanjen,

exemple pour la 1ère moyenne :

3 Mesures : en B5 : 10 ; en H5 : 30 ; en N5 : 80

formules sur une feuille de calcul : =(B5+H5+N5)/3 ➯ moyenne = 40 ;
OU : =MOYENNE(B5;H5;N5) ➯ moyenne = 40

en VBA, résultats sur "Feuil2", en A5 et C5 :

VB:
Sub Essai()
  Worksheets("Feuil2").[A5] = ([B5] + [H5] + [N5]) / 3
  Worksheets("Feuil2").[C5] = WorksheetFunction.Average([B5], [H5], [N5])
End Sub



tu dois pouvoir tout faire avec les infos ci-dessus ; sinon, comme il s'agit de quelque chose de très différent de ce sujet, c'est mieux que tu ouvres un autre sujet, en mettant un fichier plutôt qu'une image ; indique aussi quel est le nom de la feuille où il faut mettre les résultats, et dans quelles cellules.



si le présent sujet est résolu, merci de l'indiquer : il te suffit de cliquer sur la coche en forme de V du bord vertical droit du post qui a solutionné ton exo.​

soan
 
Dernière édition:

Hanjen

XLDnaute Nouveau
Bonjour,
Je vais essayer ce code mais je pense que ça marche seulement pour la ligne 5, je veux le faire pour les lignes de 5 à 14. Je pense qu'il faut impérativement une boucle for non?
Je vais le tester sinon oui j'ouvrirai une autre discussion

Merci et bonne journée!
 

soan

XLDnaute Barbatruc
Inactif
oui, bien sûr, c'est pour un seul exemple ; il faut effectivement faire une boucle pour toutes les moyennes.​

bonne journée à toi aussi ! à bientôt peut-être sur ton autre sujet.

soan
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…