Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 09/10/2008, 17h15   #1 (permalink)
Invité régulier
 
Date d'inscription: septembre 2008
Messages: 17
Par défaut Rechercher valeur puis les sommer

bonjour,

Je cherche à récupérer une valeur (la surface d'une pièce)
Dans une feuille j'ai le code de la salle et je veux trouver la surface de cette salle. La surface se trouve sur une autre feuille.

Jusque là pas de soucis j'utilise le code ci-dessous.
Code :
Do While Cells(i, 1) <> ""
    ' récupère la valeur à chercher
    Salle = Cells(i, 1).Value 
    ' parcours le tableau de la feuille salle
    While Sheets("Salle").Cells(j, 1) <> "" 
        If Sheets("Salle").Cells(j, 1) = Salle Then
             ' renvoie la valeur dans la cellule de la feuille active
            Cells(i, 8) = Sheets("Salle").Cells(j, 5)
        End If
        j = j + 1
    Wend
    j = 1
    i = i + 1
Loop
Mon soucis est que je peux avoir plusieurs codes de salle dans la même cellule. Les codes sont séparés par ; je voudrais récupérer la surface de chaque salle et sommer les surfaces pour obtenir la surface totale.
Voici le type de tableau que j'ai actuellement.

Salles occupées Dates d'occupation m² salle
A111; A114; A115 01/09/2008-24/08/2009
A111; A114; A115 01/09/2008-24/08/2009
A111; A114; A115 02/09/2008-25/08/2009
A111; A114; A115 02/09/2008-25/08/2009
A111; A114; A115 03/09/2008-26/08/2009
A111; A114; A115 03/09/2008-26/08/2009
A111; A114; A115 04/09/2008-27/08/2009
A111; A114; A115 04/09/2008-27/08/2009
A111; A114; A115 05/09/2008-28/08/2009
A111; A114; A115 05/09/2008-28/08/2009
0

TOTAL


Merci de vos réponse

Dernière modification par zazaraignée ; 09/10/2008 à 21h03 Motif: C'est n'importe quoi, ces indentations!
biche1 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 09/10/2008, 21h11   #2 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
Par défaut

Je vois que chaque code est séparé par un point-virgule suivi d'un espace. Tu peux donc faire un Split en spécifiant "; " comme séparateur.

Split sépare ta chaîne en utilisant le caractère ou la chaîne spécifiée ( dans le cas qui nous occupe, "; ") et met les valeurs ainsi séparées dans un tableau de type String. Tu dois déclarer ce tableau sans en spécifier la taille.

Code :
Dim tblCodes() As String
En ayant récupéré les codes de cette façon, tu peux sommer leur aire (ou surface) dans une boucle For k = 0 to Ubound(tblCodes) et la fonction RechercheV dont je ne me souviens plus du nom exact en VBA et qui est facile à trouver en enregistrant une petite macro.

Si tu as du mal à t'y retrouver avec mes explications sommaires (qui se veulent davantage des pistes de recherche), tu dis.
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 11h15   #3 (permalink)
Invité régulier
 
Date d'inscription: septembre 2008
Messages: 17
Par défaut

Je me suis inspirée de la réponse
Voila ce que j'obtiens.
Code :
Do While Cells(i, 1) <> ""
    
    tblcodes() = Split(Cells(i, 1), ";")
    For k = 0 To UBound(tblcodes)
        Recherche = tblcodes(k)
            While Sheets("Salle").Cells(j, 1) <> "" ' parcours le tableau de la feuille salle
  
              If Sheets("Salle").Cells(j, 1) = Recherche Then
               Cells(i, 12) = Cells(i, 8)+ Sheets("Salle").Cells(j,5) 'renvoie la valeur dans la cellule de la feuille active
                    Cells(i, 8)= Cells(i, 12)
                    
                End If
             
        j = j + 1
            Wend
   
            j = 1
        
    Next k
    i = i + 1
    Loop
le problème est que je ne somme pas les surfaces j'obtiens seulement la première surface.
biche1 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 15h10   #4 (permalink)
Modératrice
 
Avatar de zazaraignée
 
Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
Par défaut

J'imagine que puisque c'est résolu, tu as compris que tu avais mis ta boucle For au mauvais endroit...

Et puis, si tu indentais ton code correctement, on y verrait certainement plus clair.
__________________
  • Pour les nouveaux : Mode d'emploi et aide aux nouveaux
  • et impérativement les règles du forum. Histoire de garder une ambiance amicale.
  • Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
  • Je ne réponds pas aux questions posées par MP.
zazaraignée est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 16h28   #5 (permalink)
Invité régulier
 
Date d'inscription: septembre 2008
Messages: 17
Par défaut

la boucle for est au bon endroit c'était juste le séparateur qui n'était pas bon.

C'était "; "

bonne journée
biche1 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBAACCESS

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide