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 10/10/2008, 11h45   #1 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Messages: 31
Par défaut Recherche valeur ds un tableau

Bonjour,
Je recherche de l'aide pour faire une recherche des cellules qui ont la valeurs -1000 dans mon tableau, et leurs données la valeur de la cellule au dessus.
Exemple:
- la cellule B6 contient -1000, je veus lui mettre la valeur de la cellule B5
- la cellule D4 contient -1000, je veus lui mettre la valeur de la cellule D3
etc... sachant que la valeur -1000 peut etre n'importe où dans mon tableau.

Voici le fichier ci joint.

Merci d'avance pour vos solutions.
Fichiers attachés
Type de fichier : xls Classeur1.xls (15,5 Ko, 6 affichages)
majothi est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 12h32   #2 (permalink)
Membre Expert
 
Avatar de jacques_jean
 
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 64
Messages: 1 264
Par défaut

Bonjour,

Vous pouvez essayer en copiant ce code dans votre feuille :

Code :
Private Sub CommandButton1_Click()
Dim plg As Range, cel As Range
dl = Range("B65536").End(xlUp).Row
Set plg = Range("B2:G" & dl)
 
For Each cel In plg
If cel.Value = -1000 Then
adr = cel.Address
lgn = cel.Row
 
    If lgn = 2 Then
    MsgBox "La valeur -1000 a été trouvée en " & adr & "!" & Chr(10) _
    & "Impossible de modifier cette valeur qui se trouve sous la ligne de titre."
    Else
    col = cel.Column
    cel.Value = Range(Cells(lgn - 1, col), Cells(lgn - 1, col)).Value
    End If
End If
Next
End Sub
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 13h33   #3 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Messages: 31
Par défaut

Merci pour ton aide

J'ai essayé le code => c'est tout à fait ce que je voulais, car moi j'avais des boucles de recherche pour chaques colonnes - lignes, votre solution est plus rapide.

Par contre, si vous avez le temps, pouvez vous mettre des commentaires pour que je puisse bien comprendre votre code.

Merci encore
majothi est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/10/2008, 14h29   #4 (permalink)
Membre Expert
 
Avatar de jacques_jean
 
Date d'inscription: janvier 2006
Localisation: St Cyr s/mer (83)
Âge: 64
Messages: 1 264
Par défaut

Voilà :

Code :
Option Explicit
Private Sub CommandButton1_Click()
Dim plg As Range, cel As Range, adr$, lgn&, col%, dl&
 
'Recherche du N° de la dernière ligne absolue renseignée pour la colonne "B"
dl = Range("B65536").End(xlUp).Row
 
'Définition de la plage contenant les données
Set plg = Range("B2:G" & dl)
 
'Pour chaque cellule contenue dans la plage définie par la variable "plg"
For Each cel In plg
'si la valeur de la cellule définie par la variable "cel" est = -1000
If cel.Value = -1000 Then
'affectation de l'adresse de la cellule à la variable "adr" exemple ($C$4)
adr = cel.Address
'affectation du N° de ligne de la cellule traitée à la variable "lgn"
lgn = cel.Row
 
    'Si la valeur recherchée (-1000) a été trouvée en ligne 2 on signale l'impossiblité _
    d'affecter la valeur de la cellule du dessus puisqu'il s'agit d'une ligne de titre
    If lgn = 2 Then
    MsgBox "La valeur -1000 a été trouvée en " & adr & "!" & Chr(10) _
    & "Impossible de modifier cette valeur qui se trouve sous la ligne de titre."
    'sinon
    Else
    'affectation du N° de colonne de la cellule traitée à la variable "col"
    col = cel.Column
    'affectation à la cellule traitée de la valeur de la cellule de la ligne précédente et de la même colonne
    cel.Value = Range(Cells(lgn - 1, col), Cells(lgn - 1, col)).Value
    End If
End If
'Traitement de la cellule suivante
Next
 
End Sub
 
Vous pouvez coller ce nouveau code (et supprimer ensuite les commentaires si vous le voulez).

J'ai ajouté : "Option Explicit" qui permet avec "Outils" puis "Débogage" de vérifier que toutes les variables ont été déclarées (ce qui est conseillé).

Pour la déclaration des variables, si besoin est, vous pouvez regarder ici :

http://silkyroad.developpez.com/VBA/LesVariables/#LII-E

Pour la recherche de la dernière ligne renseignée, mais aussi d'autres possibilités, regarder ici :

http://www.developpez.net/forums/d33...uille-calculs/
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu la réponse à votre question.

Dernière modification par jacques_jean ; 12/10/2008 à 10h41
jacques_jean est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/10/2008, 04h04   #5 (permalink)
Futur Membre du Club
 
Date d'inscription: juin 2008
Messages: 31
Par défaut

Merci encore pour avoir pris le temps pour tes explications
majothi 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