Mayday:) afficher elements et nombres éléments colonne [Résolu/Fermé]

Signaler
Messages postés
6
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
11 mai 2015
-
Messages postés
16262
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 octobre 2020
-
Bonjour,
Voici mon probleme en exemple. Dans une colonne j'ai

3
73
45
56
99 (99 est un marqueur de fin)

J'aimerais réaliser un programme qui me permettrait d'
- afficher les valeurs de la colonne sur un ligne jusqu'au marqueur 99( non inclus). 3,73,45,56
- Afficher le nombre d éléments sans prendre en compte 99. Ici 4 éléménts
ça fait plus d'une semaine que je cherche Help me
Cordialement

4 réponses

Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
Bonjour

Un exemple
https://www.cjoint.com/?3EjrPsBaoKG

Cdlmnt
Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
Public Sub OK()
Dim li As Long, co As Long, coco As Long, lili As Long, cel As Range
Set cel = ActiveCell ' recupere la cellule active
li = cel.Row         ' ligne de la cellule active
co = cel.Column      ' colonne de la cellule active
coco = co + 1        ' colonne début transposition
lili = li            ' ligne courante
' Tant que cells(lili,co) non vide et different de 99
While Cells(lili, co) <> "" And Cells(lili, co) <> 99
   Cells(li, coco).Value = Cells(lili, co)  ' copie (lili,co) en (li,coco)
   lili = lili + 1                          ' ligne suivante pour lecture
   coco = coco + 1                          ' colonne suivante pour ecriture
Wend
End Sub

Bonne suite en programmation

Je ne sais comment vous remercier.
merci pour votre aide.
Reste plus qu'a bosser un peu :)

Pour m'aguerir un peu j'essais de modifier un peu ton programme mais sans resultat:
Admettons mes valeurs se trouvent en colonne 1 j'aimerais que le programme
- Inscrit les valeurs lues en G1
- Inscrit les nombres de valeurs en G2

ccm81 j'ai essayé de modifier ton programme pour tenir compte des éléments cités au dessus mais sans resultat. Erreur 1004
Suis je vraiment loin d'y aboutir ? il y a de l'idée ?

Sheets(1).Range("pla").Clear

Dim Ligne As Long, Lecture As String


' Tant que cells(ligne,1) non vide et different de 99
While Cells(Ligne, 1) <> "" And Cells(Ligne, 1) <> 99
Lecture = Lecture & Sheets(1).Cells(Ligne, 1).Value & ", "
Ligne = Ligne + 1

Wend
Sheets(1).Cells(1, 7).Value = Lecture
Messages postés
1422
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 juillet 2019
435
Salut,
Essaie quelque chose comme ceci.
Sub classer()
    Dim i, j As Integer
    
    i = 1
    j = 7
    
    While Cells(i, 1) <> "" And Cells(i, 1) <> 99
       Cells(1, j) = Cells(i, 1)
       i = i + 1: j = j + 1
    Wend
    Cells(2, 7) = i - 1 & " valeurs"

End Sub
Messages postés
6
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
11 mai 2015
>
Messages postés
1422
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
24 juillet 2019

Bonjour Ozone
Wahou 1390 commentaires postés jolie CV :)
l'essai s'est avéré concluant Thanks. Par contre comme je suis novice en VBA j'aimerais si possible savoir si mon interpretation est correct. De plus je connaissais pas la syntaxe & " valeurs". La symbole & associé à " à une signification particuliere ? un ordre d'ecriture ?
Sub commentçamarche()
    Dim i As Integer, j As Integer, Lecture As String
    ' plage= case G1 à K2
    
Range("plage").Clear

'i=ligne est on commence par la ligne 1
'J=Numero de colonne et comme on veut le resulat dans colonne G J=7
    i = 1
    j = 7

 'Tant que la ligne i et non vide ET ligne different de 99
 
    While Cells(i, 1) <> "" And Cells(i, 1) <> 99
    
    'la cellule (1,J) est égal à cellule (i,1) la ou il y a les données
    
       Cells(1, j) = Cells(i, 1)
' "Tant que" est activé alors on passe à la ligne suivante et colonne suivante pour ecriture

       i = i + 1: j = j + 1
       
    Wend
    Cells(2, 7) = i - 1 & " valeurs"
Sheets(1).Cells(3, 7).Value = i - 1

End Sub
Messages postés
1403
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
3 octobre 2020
142
Bonjour Dimas, bonjour le forum,

Afficher ???
Peut-être comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare lava raibel O (Onglet)
Dim DL 'déclare la variable DL (Dernière ligne)
Dim I As Integer 'déclare la variable I (Incrément)

Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter)
DL = O.Cells(Rows.Count, 1).End(xlUp).Row - 1 'définit la variable DL
For I = 1 To DL 'boucle de lignes 1 à DL
    L = IIf(L = "", O.Cells(I, 1).Value, L & ", " & Cells(I, 1).Value) 'définit la liste L
Next I 'prochaine ligne de la boucle
MsgBox L & Chr(13) & DL & " éléments." 'affiche la liste et le nombre
End Sub

Messages postés
6
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
11 mai 2015

FRanchement vous etes vraiment au top !! réactivité. ça fait plus d'une semaine que je passe des heures à chercher ce programme!! thank you so muchThauTheme.
VBA est vraiment un outil puissant lorsqu'il est maitrisé.
Si cela ne vous derange pas j'aurais plein de d'autre questions à vous poser un peu plus tard.
Merci ThauTheme et CCM81
Messages postés
16262
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 octobre 2020
3 051
Bonjour
Cela peut se faire sans vba
pour passer en horizontal: fonction transpose
pour le nombre déléments sans 99 la fonction nb(lazone avec99)-1

Messages postés
6
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
11 mai 2015

Bonsoir Michel
Merci pour ta reponse mais le but est justement de m'initier à VBA qui reste encore très obsscur
Messages postés
16262
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 octobre 2020
3 051
Bonjour,
Vraiment, je répète que ce problème se résoud par des formules :-((
voir du coté copier-coller-collage spécial-transposition

mais puisqu'il te faut absolument du VBA (sûr?)
pas besoin de boucle....
un code à adapter à ton contexte
ici
démarrage en A3
restitution horizontale à partir de D2
Nombre éléments avant 99 en D4
Sub transposer_()
Dim Fin99 As Byte, tampon

Application.ScreenUpdating = False
Fin99 = Columns("A").Find(what:=99, after:=Range("A2")).Row - 1
tampon = Application.Transpose(Range("A3:A" & Fin99))
Range("D2").Resize(1, UBound(tampon)) = tampon
Range("D4") = UBound(tampon)
End Sub


Mais si tu veux les résultats sur une seule cellule
Range("D2") = Join(tampon, ", ")
Michel
Messages postés
6
Date d'inscription
samedi 9 mai 2015
Statut
Membre
Dernière intervention
11 mai 2015

Re bonsoir Michel
Il y a vraiment differentes manieres d'aboutir à un meme resultat.
Michel tu dois etre très performant sur VBA mais j'ai pas du tout le niveau pour comprendre ce programme. Beaucoup de personnes m'ont dit qu'avec:
DIM, IF,then,Else,Inpoutbox,Msgbox,While et When on pouvait réaliser beaucoup de programme. Néanmoins je garde ce programme pour le travailler un peu plus tard
Messages postés
16262
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 octobre 2020
3 051
Bonjour
j'ai pas du tout le niveau pour comprendre ce programme...
tu pourrais pratiquement réaliser mon code avec l'enregistreur de macros en utilisant les fonctions Excel classiques que je t'ai indiqué donc sans connaitre VBA...
DIM, IF,then,Else,Inpoutbox,Msgbox,While et When on pouvait réaliser beaucoup de programme
ces personnes ont enfoncé une porte ouverte!
seulement, il faut les utiliser que lorsqu' elles sont LA solution, ce qui n'est pas forcément le cas. en tout cas, méfie toi de ce genre de personnes qui croient tout savoir et le font savoir...
cordialement

EDIt: pour apprendre VBA
https://excel.developpez.com/cours/