CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

petit soucis en vba...

callix
callix
Niveau 10
31 janvier 2006 à 15:02:22

salut, je dois réaliser une petite macro en vba pour excell afin de réaliser un inventaire.
une colonne contient des données:
l´autre l´inventaire:
exemple:
a a
b b
c c
24 24
24
c

j´ai réaliser ce bout de code qui fonctionne par contre, lorsque la donnée est un chiffre, ça ne fonctionne pas:
j´obtiens ça:
a a
b b
c c
24 24
b56 b56
24 24
b56 b56

Sub invo()
Do While UCase(ActiveCell) <> ""
cpt = 0
Do While Range("D1").Offset(cpt, 0) <> "" And Range("D1").Offset(cpt, 0) <> UCase(ActiveCell)
cpt = cpt + 1
Loop
If Range("D1").Offset(cpt, 0) = "" Then
Range("D1").Offset(cpt, 0) = ActiveCell.Value
End If
Selection.Offset(1, 0).Select
Loop
End Sub

merci de votre aide

dnob700
dnob700
Niveau 10
31 janvier 2006 à 20:44:10

Mais tu dois faire quoi ? qu´est ce que ton programme est cencé faire ? "réaliser un inventaire", ce n´est pas très précis.

callix
callix
Niveau 10
01 février 2006 à 11:58:21

c´est pas dur à comprendre pourtant...
un inventaire quoi...
par exemple:
j´ai une colonne avec:
a
b
c
42
42
c
d

j´execute le programme, ça me donneras, dans une colonne spécifique:
a
b
c
42
d
Bref, ça fait l´inventaire des éléments présents.

dnob700
dnob700
Niveau 10
01 février 2006 à 18:44:40

En français : tu veux supprimer les doublons d´une liste.

Rien à voir avec un "inventaire" (dans la mesure ou il y a un sens unique à ce mot) qui consisterait pour moi, à compter le nombre d´occurence de chaque élément de la liste.

Je ne comprend rien à ton programme (que fait la propriété offset d´un ensemble de case ?

Mais ce que je vois c´est que tu fait des UCase sur certain champ et pas sur les autres (donc tu compare des majuscule à des minuscule). Normallement ça en change rien, mais on sait jamais.
Et quand tu vérifie si l´objete est pas dans la liste, tu es sur que tu vérifie qu´il n´est pas au dessus de sa position actuelle ? et si oui, tu es sur que tu vérifie que celui avec lequel tu compare n´est pas l´objet actuel ?

Il ne s´agit que de piste pour ton programme. de toute manière, "c´est pas dur à comprendre" alors tu devrais y arriver.

callix
callix
Niveau 10
01 février 2006 à 22:01:29

Tu n´a pas tort, en effet ce programme doit compter ensuite les occurences comme un inventaire.
Là où tu n´as pas trop compris car je l´ai pas trop détaillé, c´est que tu ne sélectionne que la case de départ, le programme arcours lui même la colonne.

Le programme est réalisé à 95% et fonctionne assez mis à part pour les données chiffrées (A12 22 45 etc...).
Je pense qu´il faut juste rajouter un élément ou une commande afin de comparer.
Je suis désolé d´avoir répondu un peu séchement mais c´est que, pour moi, le terme inventaire est assez clair en soi.

sinon, si quelqu´un veut tester:
il suffit de créer un nouveau module avec ce programme, de mettre des données dans une colonne puis de sélectionner la premiére case et enfin d´executer le programme.

rip324
rip324
Niveau 9
05 février 2006 à 01:34:11

pas bien callix, genre il est bon en vba..mais il va demander de l´aide à ses petits camarades enfin bon moi je dis rien lol.
Mais comme dirais Mr SS (avis aux amateur d´initiales références à des trucs chelou): heu..en fait je sais plus ce qu´il nous a sortit vendredi dernier.

Bon à lundi callix, tu me filera ton vba ? mdr :ange:

dnob700
dnob700
Niveau 10
05 février 2006 à 13:23:40

J´ai pas testé mais j´ai dans l´idée que pour el code ci dessus, ça marcherait si les cellules où sont les données (aussi bien l´entrée que la sortie de l´inventaire) sont paramétrées comme contenant du texte ; et non pas avec le paramétrage par défaut qui pour les chiffres contient des nombres. Car je pense que dans ce cas là, la propriété value doit renvoyer un variant qui est un nombre, puis à la comparaison avec une chaines, la conversion en texte doit modifier quelquechose (genre, rajouter un espace avant les nombres).

Donc essayer la macro ci-dessus en réglant les paramètres des cases comme "texte" (à la limite, la macro doit pouvoir le faire elle même).

callix
callix
Niveau 10
06 février 2006 à 14:08:17

je te remercie pour ton aide dnob700,
j´ai finalement trouvé d´où venait le problème. En fait il s´agit de la ligne:
Do While Range("D1").Offset(cpt, 0) <> "" And Range("D1").Offset(cpt, 0) <> UCase(ActiveCell)

il faut rajouter un ucase pour que cela fonctionne.
Bizarre, mais ça fonctionne...

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment