Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Zone dynamique

8 réponses
Avatar
RomainCHY
Bonjour à tous,
Je souhaite faire quelque chose d'un peu compliqué (pour moi qui suis
débutant en VBA). Pour me faire bien comprendre, j'explique le principe de ce
que je veux faire.

Dans ma feuille "Feuil1", j'ai une liste de données. C'est une liste de
peintures et elle est remplie par l'utilisateur par le biais d'un userform.
Dans ce userform, l'utilisateur précise quel type de peinture il veut
utiliser. S'il choisit une ou plusieurs peintures, le programme calcule la
surface de peinture. Après qu'il ait rempli le userform, la liste de peinture
peut ressembler à ceci:
Colonne A Colonne B
- Peinture 1 250
- Peinture 2 157
- Peinture 3
- Peinture 4 50

Donc, l'utilisateur a besoin de peinture 1,2 et 4. Il ne veut pas de
peinture 3.
Dans la Feuille "Feuil2", je veux que cette même liste apparaisse, mais elle
doit être composée uniquement des peintures choisies par l'utilisateur, sans
ligne vide.

Comme j'ai beaucoup d'autres données, je souhaite passer par la feuille
"Feuil1" et pas par le userform.

J'espère avoir été clair.
Je remercie d'avance tous ceux qui prendront le temps de m'aider.

8 réponses

Avatar
FFO
Salut à toi
Je te propose :

Cells.Copy
Sheets("Feuil2").Select
Range("A1").Select
ActiveSheet.Paste
Range("B65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("B1").Address
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If

Celà te convient-il ???
Dis moi !!!


Bonjour à tous,
Je souhaite faire quelque chose d'un peu compliqué (pour moi qui suis
débutant en VBA). Pour me faire bien comprendre, j'explique le principe de ce
que je veux faire.

Dans ma feuille "Feuil1", j'ai une liste de données. C'est une liste de
peintures et elle est remplie par l'utilisateur par le biais d'un userform.
Dans ce userform, l'utilisateur précise quel type de peinture il veut
utiliser. S'il choisit une ou plusieurs peintures, le programme calcule la
surface de peinture. Après qu'il ait rempli le userform, la liste de peinture
peut ressembler à ceci:
Colonne A Colonne B
- Peinture 1 250
- Peinture 2 157
- Peinture 3
- Peinture 4 50

Donc, l'utilisateur a besoin de peinture 1,2 et 4. Il ne veut pas de
peinture 3.
Dans la Feuille "Feuil2", je veux que cette même liste apparaisse, mais elle
doit être composée uniquement des peintures choisies par l'utilisateur, sans
ligne vide.

Comme j'ai beaucoup d'autres données, je souhaite passer par la feuille
"Feuil1" et pas par le userform.

J'espère avoir été clair.
Je remercie d'avance tous ceux qui prendront le temps de m'aider.


Avatar
RomainCHY
Merci de m'aider FFO.
Je suis trop débutant pour comprendre tes lignes de programme...
Je pensais peut être à une boucle.

J'étais en train de regarder comment faire un truc que je peux comprendre.
J'ai simplifié le problème. Le problème simplifié est le suivant:

Sur une même feuille, en colonne A, j'ai mes noms de peinture, en colonne B,
les montants correspondant éventuellement présents (du fait des choix de
l'utilisateur).
Ce que je veux, c'est que:
Dim f as integer
For each c in Range("B1:B10") 'Là où sont mes quantités de peintures'
If c.value <>"" then
For f = 1 to 10
Range("C" & f).value = i.value
Next f
End If
Next i

Ca ne marche pas... c'est sûr, j'ai jamais fait de boucle et j'ai déjà
galéré pour comprendre que si je met un "for, next" entre mon "If, End If",
le End If se retrouve sans le If... :)
Mais le principe est là: si la première cellule de ma colonne B est remplie,
alors, sa valeur va dans la 1ere cellule de la colonne C.
Sinon, on passe à la ligne suivante de B, ainsi de suite.

En gros, je passe d'une liste avec des trous à une liste sans trou.

Suis-je clair??!
Espérons.

Comprends-tu ce que je veux dire et si oui, sais-tu comment faire ça?

Merci d'avance :)
Avatar
FFO
As tu essayé mon code qui fait la même chose mais en recopiant dabors toutes
tes colonnes dans une 2° Feuille puis à chaque cellule vide de la colonne B
il supprime la ligne correspondante en commençant par le bas
Teste le dans une Macro
Sinon cet aprés midi vers 15h30 je reviens et t'aiderai volontier avec ton
code

A plus tard !!!


Merci de m'aider FFO.
Je suis trop débutant pour comprendre tes lignes de programme...
Je pensais peut être à une boucle.

J'étais en train de regarder comment faire un truc que je peux comprendre.
J'ai simplifié le problème. Le problème simplifié est le suivant:

Sur une même feuille, en colonne A, j'ai mes noms de peinture, en colonne B,
les montants correspondant éventuellement présents (du fait des choix de
l'utilisateur).
Ce que je veux, c'est que:
Dim f as integer
For each c in Range("B1:B10") 'Là où sont mes quantités de peintures'
If c.value <>"" then
For f = 1 to 10
Range("C" & f).value = i.value
Next f
End If
Next i

Ca ne marche pas... c'est sûr, j'ai jamais fait de boucle et j'ai déjà
galéré pour comprendre que si je met un "for, next" entre mon "If, End If",
le End If se retrouve sans le If... :)
Mais le principe est là: si la première cellule de ma colonne B est remplie,
alors, sa valeur va dans la 1ere cellule de la colonne C.
Sinon, on passe à la ligne suivante de B, ainsi de suite.

En gros, je passe d'une liste avec des trous à une liste sans trou.

Suis-je clair??!
Espérons.

Comprends-tu ce que je veux dire et si oui, sais-tu comment faire ça?

Merci d'avance :)



Avatar
RomainCHY
J'ai essayé ton programme dans mon problème simplifié.
Ca ne marche pas, mais je suis vraiment pas sûr d'avoir tout bien fait.
j'ai mis ça dans un CommandButton_click
Range("D65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("D1").Address
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If

Mes infos sont en colonne D dans mon problème simplifié.
Mais rien ne se passe.

Je serai là à 15h30.
Merci, à plus
Avatar
lSteph
Bonjour,
Clic droit sur onglet Feuil1 puis coller ce code fermer vbe et entrer
qqchose en a2:bx

'''''''dans le code de feuil1'''''

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim isect As Range, c As Range
Set isect = Intersect(Target, [a2:b65536])
If isect Is Nothing Then Exit Sub
Feuil2.[a2:b65536].ClearContents
For Each c In Feuil1.Range("a2", [a65536].End(xlUp).Address)
If Not CSng(c.Offset(0, 1) = 0) Then
With Feuil2.[a65536].End(xlUp)(2)
.Value = c
.Offset(0, 1) = c.Offset(0, 1)
End With
End If
Next
End Sub


'cdlt

'lSteph






On 3 mai, 11:05, RomainCHY <romain.charny@@gmail.com> wrote:
Bonjour à tous,
Je souhaite faire quelque chose d'un peu compliqué (pour moi qui suis
débutant en VBA). Pour me faire bien comprendre, j'explique le principe de ce
que je veux faire.

Dans ma feuille "Feuil1", j'ai une liste de données. C'est une liste de
peintures et elle est remplie par l'utilisateur par le biais d'un userfor m.
Dans ce userform, l'utilisateur précise quel type de peinture il veut
utiliser. S'il choisit une ou plusieurs peintures, le programme calcule la
surface de peinture. Après qu'il ait rempli le userform, la liste de pe inture
peut ressembler à ceci:
Colonne A Colonne B
- Peinture 1 250
- Peinture 2 157
- Peinture 3
- Peinture 4 50

Donc, l'utilisateur a besoin de peinture 1,2 et 4. Il ne veut pas de
peinture 3.
Dans la Feuille "Feuil2", je veux que cette même liste apparaisse, mais elle
doit être composée uniquement des peintures choisies par l'utilisateu r, sans
ligne vide.

Comme j'ai beaucoup d'autres données, je souhaite passer par la feuille
"Feuil1" et pas par le userform.

J'espère avoir été clair.
Je remercie d'avance tous ceux qui prendront le temps de m'aider.


Avatar
FFO
Je viens d'essayer ton code en mettant les données à traiter en colonne D il
fonctionne impec !!!
Lorsque tu lances ton code avec le bouton es tu bien sur la feuille à
traiter sinon met en début de ce code :
Sheets("Onglet").Select (remplace "Onglet" par le nom de ta feuille)

Une autre possibilté c'est que tes données ne soient pas bien comprises par
Excel
En venant d'une autre source c'est souvent le cas (source Oracle par exemple)
Solution :
selectionner la colonne D
Données/convertir suivant,suivant,terminé
Puis executer la Macro

Tiens moi informé du résultat !!!!


J'ai essayé ton programme dans mon problème simplifié.
Ca ne marche pas, mais je suis vraiment pas sûr d'avoir tout bien fait.
j'ai mis ça dans un CommandButton_click
Range("D65535").End(xlUp).Select
Do While ActiveCell.Address <> Range("D1").Address
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(-1, 0).Select
Loop
If ActiveCell = "" Then
ActiveCell.EntireRow.Delete
End If

Mes infos sont en colonne D dans mon problème simplifié.
Mais rien ne se passe.

Je serai là à 15h30.
Merci, à plus


Avatar
lSteph
Re,bonjour,

Voici exemple:

http://cjoint.com/?fdqgPdHTsY

Cordialement.

lSteph


On 3 mai, 11:05, RomainCHY <romain.charny@@gmail.com> wrote:
Bonjour à tous,
Je souhaite faire quelque chose d'un peu compliqué (pour moi qui suis
débutant en VBA). Pour me faire bien comprendre, j'explique le principe de ce
que je veux faire.

Dans ma feuille "Feuil1", j'ai une liste de données. C'est une liste de
peintures et elle est remplie par l'utilisateur par le biais d'un userfor m.
Dans ce userform, l'utilisateur précise quel type de peinture il veut
utiliser. S'il choisit une ou plusieurs peintures, le programme calcule la
surface de peinture. Après qu'il ait rempli le userform, la liste de pe inture
peut ressembler à ceci:
Colonne A Colonne B
- Peinture 1 250
- Peinture 2 157
- Peinture 3
- Peinture 4 50

Donc, l'utilisateur a besoin de peinture 1,2 et 4. Il ne veut pas de
peinture 3.
Dans la Feuille "Feuil2", je veux que cette même liste apparaisse, mais elle
doit être composée uniquement des peintures choisies par l'utilisateu r, sans
ligne vide.

Comme j'ai beaucoup d'autres données, je souhaite passer par la feuille
"Feuil1" et pas par le userform.

J'espère avoir été clair.
Je remercie d'avance tous ceux qui prendront le temps de m'aider.


Avatar
RomainCHY
Merci beaucoup pour ton aide ISteph, j'utiliserai ton programme, ça marche
très bien.

ciao