Récupération de la valeur d'une cellule
Résolu/Fermé
Panzerz
Messages postés
6
Date d'inscription
lundi 17 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
-
17 juin 2013 à 15:33
Stellou la rebelle Messages postés 20 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 23 juillet 2013 - 20 juin 2013 à 08:26
Stellou la rebelle Messages postés 20 Date d'inscription vendredi 14 juin 2013 Statut Membre Dernière intervention 23 juillet 2013 - 20 juin 2013 à 08:26
A voir également:
- Récupération de la valeur d'une cellule
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Verrouiller cellule excel - Guide
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? - Forum VB / VBA
- Récupérer une vidéo youtube - Guide
7 réponses
Stellou la rebelle
Messages postés
20
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
23 juillet 2013
17 juin 2013 à 15:51
17 juin 2013 à 15:51
Bonjour,
Excuses moi, je n'ai pas bien compris comment ta fonction chercher ton maximum ?
Déja pour simplifier ton code tu pourrais au lieu de
Sheets("Efforts_Portique").Activate
écrire devant tes cells:
Sheets("Effort_Portique").Cells(Ligne, 4).Value...etc
ou encore
Sheets("Max_par_elts").Cells(i, 5).FormulaR1C1Local = "=MIN(Efforts_Portique!D" & Ligne_debut & ":Efforts_Portique!D" & Ligne - 1 & ")"
Tu vois ? Boh, c'est juste pour avoir moins de ligne. :)
Excuses moi, je n'ai pas bien compris comment ta fonction chercher ton maximum ?
Déja pour simplifier ton code tu pourrais au lieu de
Sheets("Efforts_Portique").Activate
écrire devant tes cells:
Sheets("Effort_Portique").Cells(Ligne, 4).Value...etc
ou encore
Sheets("Max_par_elts").Cells(i, 5).FormulaR1C1Local = "=MIN(Efforts_Portique!D" & Ligne_debut & ":Efforts_Portique!D" & Ligne - 1 & ")"
Tu vois ? Boh, c'est juste pour avoir moins de ligne. :)
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
19 juin 2013 à 12:15
19 juin 2013 à 12:15
Bonjour a vous deux,
Quelques modif de votre code et recherche cellule C meme ligne que Min et Max.
Boucle while wend ????????
Sub tri()
Dim Ligne As Single
Dim i As Integer
Dim Ligne_debut As Single
Ligne = 9
Ligne_debut = 9
i = 10
While i < 49
Sheets("Efforts_Portique").Activate
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
Sheets("Max_par_elts").Activate
Cells(i, 5).FormulaLocal = "=MIN(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i, 5)
'recherche valeur cellule colonne C meme ligne que MIN
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set c = .Find(valD, LookIn:=xlValues)
If Not c Is Nothing Then
ValC = Worksheets("Efforts_Portique").Cells(c.Row, "C").Value
End If
End With
Cells(i + 1, 5).FormulaLocal = "=MAX(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i + 1, 5)
'recherche valeur cellule colonne C meme ligne que MAX
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set c = .Find(valD, LookIn:=xlValues)
If Not c Is Nothing Then
ValC1 = Worksheets("Efforts_Portique").Cells(c.Row, "C").Value
End If
End With
i = i + 2
Ligne = Ligne + 12
Ligne_debut = Ligne
Wend
End Sub
Quelques modif de votre code et recherche cellule C meme ligne que Min et Max.
Boucle while wend ????????
Sub tri()
Dim Ligne As Single
Dim i As Integer
Dim Ligne_debut As Single
Ligne = 9
Ligne_debut = 9
i = 10
While i < 49
Sheets("Efforts_Portique").Activate
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
Sheets("Max_par_elts").Activate
Cells(i, 5).FormulaLocal = "=MIN(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i, 5)
'recherche valeur cellule colonne C meme ligne que MIN
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set c = .Find(valD, LookIn:=xlValues)
If Not c Is Nothing Then
ValC = Worksheets("Efforts_Portique").Cells(c.Row, "C").Value
End If
End With
Cells(i + 1, 5).FormulaLocal = "=MAX(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i + 1, 5)
'recherche valeur cellule colonne C meme ligne que MAX
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set c = .Find(valD, LookIn:=xlValues)
If Not c Is Nothing Then
ValC1 = Worksheets("Efforts_Portique").Cells(c.Row, "C").Value
End If
End With
i = i + 2
Ligne = Ligne + 12
Ligne_debut = Ligne
Wend
End Sub
Panzerz
Messages postés
6
Date d'inscription
lundi 17 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
19 juin 2013 à 14:06
19 juin 2013 à 14:06
Bonjour f894009,
J'ai entré ton programme, et MIRACLE, il fonctionne à merveille ! Un grand merci donc pour ton aide si précieuse.
Oserais-je abuser de ta science infuse pour une toute petite question bonus... Il se trouve que j'ai étendu ton programme à d'autres colonnes de mes feuilles, sans aucun souci, sauf arrivé à la colonne P, VBA n'est pas content et me sort une magnifique
Erreur d'exécution '13' : Incompatibilité de type
en me surlignant :
Set p = .Find(valP, LookIn:=xlValues)
alors que j'ai suivi le même modèle pour toutes les autres colonnes sans qu'il m'ennuie. Une dernière idée ?
J'ai entré ton programme, et MIRACLE, il fonctionne à merveille ! Un grand merci donc pour ton aide si précieuse.
Oserais-je abuser de ta science infuse pour une toute petite question bonus... Il se trouve que j'ai étendu ton programme à d'autres colonnes de mes feuilles, sans aucun souci, sauf arrivé à la colonne P, VBA n'est pas content et me sort une magnifique
Erreur d'exécution '13' : Incompatibilité de type
en me surlignant :
Set p = .Find(valP, LookIn:=xlValues)
alors que j'ai suivi le même modèle pour toutes les autres colonnes sans qu'il m'ennuie. Une dernière idée ?
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
19 juin 2013 à 14:14
19 juin 2013 à 14:14
Re,
il fauf un peut plus de details et les lignes de codes.
il fauf un peut plus de details et les lignes de codes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Panzerz
Messages postés
6
Date d'inscription
lundi 17 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
19 juin 2013 à 14:21
19 juin 2013 à 14:21
Sub tri()
Dim Ligne As Single
Dim i As Integer
Dim Ligne_debut As Single
Ligne = 9
Ligne_debut = 9
i = 11
While i < 50
Sheets("Efforts_Portique").Activate
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
Sheets("Max_par_elts").Activate
Cells(i, 5).FormulaLocal = "=MIN(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i, 5)
Cells(i, 7).FormulaLocal = "=MIN(Efforts_Portique!F" & Ligne_debut & ":Efforts_Portique!F" & Ligne - 1 & ")"
valF = Cells(i, 7)
Cells(i, 9).FormulaLocal = "=MIN(Efforts_Portique!H" & Ligne_debut & ":Efforts_Portique!H" & Ligne - 1 & ")"
valH = Cells(i, 9)
Cells(i, 11).FormulaLocal = "=MIN(Efforts_Portique!J" & Ligne_debut & ":Efforts_Portique!J" & Ligne - 1 & ")"
valJ = Cells(i, 11)
Cells(i, 13).FormulaLocal = "=MIN(Efforts_Portique!N" & Ligne_debut & ":Efforts_Portique!N" & Ligne - 1 & ")"
valN = Cells(i, 13)
Cells(i, 15).FormulaLocal = "=MIX(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
valP = Cells(i, 15)
'recherche valeur cellule colonne C meme ligne que MIN
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set d = .Find(valD, LookIn:=xlValues)
If Not d Is Nothing Then
ValC = Worksheets("Efforts_Portique").Cells(d.Row, "C").Value
End If
End With
With Worksheets("Efforts_Portique").Range("F" & Ligne_debut & ":F" & Ligne - 1)
Set f = .Find(valF, LookIn:=xlValues)
If Not f Is Nothing Then
ValE = Worksheets("Efforts_Portique").Cells(f.Row, "E").Value
End If
End With
With Worksheets("Efforts_Portique").Range("H" & Ligne_debut & ":H" & Ligne - 1)
Set h = .Find(valH, LookIn:=xlValues)
If Not h Is Nothing Then
ValG = Worksheets("Efforts_Portique").Cells(h.Row, "G").Value
End If
End With
With Worksheets("Efforts_Portique").Range("J" & Ligne_debut & ":J" & Ligne - 1)
Set j = .Find(valJ, LookIn:=xlValues)
If Not j Is Nothing Then
ValI = Worksheets("Efforts_Portique").Cells(j.Row, "I").Value
End If
End With
With Worksheets("Efforts_Portique").Range("N" & Ligne_debut & ":N" & Ligne - 1)
Set N = .Find(valN, LookIn:=xlValues)
If Not N Is Nothing Then
ValM = Worksheets("Efforts_Portique").Cells(N.Row, "M").Value
End If
End With
With Worksheets("Efforts_Portique").Range("P" & Ligne_debut & ":P" & Ligne - 1)
Set p = .Find(valP, LookIn:=xlValues)
If Not p Is Nothing Then
ValO = Worksheets("Efforts_Portique").Cells(p.Row, "O").Value
End If
End With
'idem pour le max'
Cells(i, 4) = ValC
Cells(i + 1, 4) = ValC1
Cells(i, 6) = ValE
Cells(i + 1, 6) = ValE1
Cells(i, 8) = ValG
Cells(i + 1, 8) = ValG1
Cells(i, 10) = ValI
Cells(i + 1, 10) = ValI1
Cells(i, 12) = ValM
Cells(i + 1, 12) = ValM1
Cells(i, 14) = ValO
Cells(i + 1, 14) = ValO1
i = i + 2
Ligne = Ligne + 12
Ligne_debut = Ligne
Wend
End Sub
J'ai très certainement fait une usine à gaz mais peu importe, ce que je ne comprends pas c'est que cette macro fonctionne très bien si j'enlève les lignes en gras, relatives à la colonne P.
Dim Ligne As Single
Dim i As Integer
Dim Ligne_debut As Single
Ligne = 9
Ligne_debut = 9
i = 11
While i < 50
Sheets("Efforts_Portique").Activate
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
Sheets("Max_par_elts").Activate
Cells(i, 5).FormulaLocal = "=MIN(Efforts_Portique!D" & Ligne_debut & ":D" & Ligne - 1 & ")"
valD = Cells(i, 5)
Cells(i, 7).FormulaLocal = "=MIN(Efforts_Portique!F" & Ligne_debut & ":Efforts_Portique!F" & Ligne - 1 & ")"
valF = Cells(i, 7)
Cells(i, 9).FormulaLocal = "=MIN(Efforts_Portique!H" & Ligne_debut & ":Efforts_Portique!H" & Ligne - 1 & ")"
valH = Cells(i, 9)
Cells(i, 11).FormulaLocal = "=MIN(Efforts_Portique!J" & Ligne_debut & ":Efforts_Portique!J" & Ligne - 1 & ")"
valJ = Cells(i, 11)
Cells(i, 13).FormulaLocal = "=MIN(Efforts_Portique!N" & Ligne_debut & ":Efforts_Portique!N" & Ligne - 1 & ")"
valN = Cells(i, 13)
Cells(i, 15).FormulaLocal = "=MIX(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
valP = Cells(i, 15)
'recherche valeur cellule colonne C meme ligne que MIN
With Worksheets("Efforts_Portique").Range("D" & Ligne_debut & ":D" & Ligne - 1)
Set d = .Find(valD, LookIn:=xlValues)
If Not d Is Nothing Then
ValC = Worksheets("Efforts_Portique").Cells(d.Row, "C").Value
End If
End With
With Worksheets("Efforts_Portique").Range("F" & Ligne_debut & ":F" & Ligne - 1)
Set f = .Find(valF, LookIn:=xlValues)
If Not f Is Nothing Then
ValE = Worksheets("Efforts_Portique").Cells(f.Row, "E").Value
End If
End With
With Worksheets("Efforts_Portique").Range("H" & Ligne_debut & ":H" & Ligne - 1)
Set h = .Find(valH, LookIn:=xlValues)
If Not h Is Nothing Then
ValG = Worksheets("Efforts_Portique").Cells(h.Row, "G").Value
End If
End With
With Worksheets("Efforts_Portique").Range("J" & Ligne_debut & ":J" & Ligne - 1)
Set j = .Find(valJ, LookIn:=xlValues)
If Not j Is Nothing Then
ValI = Worksheets("Efforts_Portique").Cells(j.Row, "I").Value
End If
End With
With Worksheets("Efforts_Portique").Range("N" & Ligne_debut & ":N" & Ligne - 1)
Set N = .Find(valN, LookIn:=xlValues)
If Not N Is Nothing Then
ValM = Worksheets("Efforts_Portique").Cells(N.Row, "M").Value
End If
End With
With Worksheets("Efforts_Portique").Range("P" & Ligne_debut & ":P" & Ligne - 1)
Set p = .Find(valP, LookIn:=xlValues)
If Not p Is Nothing Then
ValO = Worksheets("Efforts_Portique").Cells(p.Row, "O").Value
End If
End With
'idem pour le max'
Cells(i, 4) = ValC
Cells(i + 1, 4) = ValC1
Cells(i, 6) = ValE
Cells(i + 1, 6) = ValE1
Cells(i, 8) = ValG
Cells(i + 1, 8) = ValG1
Cells(i, 10) = ValI
Cells(i + 1, 10) = ValI1
Cells(i, 12) = ValM
Cells(i + 1, 12) = ValM1
Cells(i, 14) = ValO
Cells(i + 1, 14) = ValO1
i = i + 2
Ligne = Ligne + 12
Ligne_debut = Ligne
Wend
End Sub
J'ai très certainement fait une usine à gaz mais peu importe, ce que je ne comprends pas c'est que cette macro fonctionne très bien si j'enlève les lignes en gras, relatives à la colonne P.
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
19 juin 2013 à 14:37
19 juin 2013 à 14:37
Re,
MIN, MAX, MIX, MAN y a le choix
Cells(i, 15).FormulaLocal = "=MIX(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
Cells(i, 15).FormulaLocal = "=MIN(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
MIN, MAX, MIX, MAN y a le choix
Cells(i, 15).FormulaLocal = "=MIX(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
Cells(i, 15).FormulaLocal = "=MIN(Efforts_Portique!P" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
Panzerz
Messages postés
6
Date d'inscription
lundi 17 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
19 juin 2013 à 14:54
19 juin 2013 à 14:54
C'est gentil de prendre le temps de répondre à un débile... xD
Encore merci beaucoup, problème résolu !
Encore merci beaucoup, problème résolu !
17 juin 2013 à 16:25
La feuille "Efforts_Portique" contient plusieurs "salves" de valeurs, toutes dans la colonne D, parmi lesquelles la macro cherche le min et le max pour les mettre dans les cellules (i, 5) et (i +1, 5), et ce pour chaque salve. C'est d'ailleurs pour cette raison que "Ligne" et "Ligne_debut" s'incrémentent, pour passer à la salve suivante.
Ce qui me manque ici est un moyen de faire le même "transfert" d'une feuille à l'autre pour le nombre dans la cellule à gauche de celle trouvée par la recherche. Mais comme le nombre en question n'est pas un extremum, j'imagine qu'il faut l'extraire par l'intermédiaire de la cellule contenant l'extremum correspondant. Ce qui n'est pas chose aisée pour moi, vous l'aurez compris au vu de ma façon de m'exprimer :)
19 juin 2013 à 09:48
Qu'est ce que formula R1C1Local
Sub tri()
Dim Ligne As Single
Dim i As Integer
Dim Ligne_debut As Single
Ligne = 9
Ligne_debut = 9
i = 10
' Ici tu parcours les lignes de tes cellules
While i < 49
Sheets("Efforts_Portique").Activate
' dans cette boucle tu calcule le nombre de cellule remplie de ta colonne ?
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
Sheets("Max_par_elts").Activate
'ci dessous sont les 2 lignes qui permettent de stocker ton min et ton max ?
Cells(i, 5).FormulaR1C1Local = "=MIN(Efforts_Portique!D" & Ligne_debut & ":Efforts_Portique!D" & Ligne - 1 & ")"
Cells(i + 1, 5).FormulaR1C1Local = "=MAX(Efforts_Portique!D" & Ligne_debut & ":Efforts_Portique!P" & Ligne - 1 & ")"
i = i + 2
Ligne = Ligne + 12
Ligne_debut = Ligne
Wend
End Sub
Je te montre ce que j'aurais fait. Après à toi, de l'adapter à ton cas si je n'ai pas réussi à le faire :
Sub tri()
Dim Ligne As Integer
Dim Ligne_debut As Integer
Dim Max, Min, temp As Integer
Dim indice_min, indice_max As Integer
Ligne_debut = 9
'Calcul du nombre de cellule remplie dans ta colonne D, et oui, il existe une fonction plus besoin de t'embeter
Ligne = Sheets("Efforts_Portique").WorksheetFunction.CountA(Range("D:D"))
' Valeurs initialisées au hasard
Max = 0
Min = 10
' Ici tu parcours les lignes de tes cellules pour trouver le min et le max et avec leurs indices
For i = 10 to Ligne
If cells(i,4) < min then
min = cells(i,4)
indice_min = i
End If
If cells(i,4) > max
max = cells(i,4)
indice_max = i
End IF
Next
' Ici tu n'as plus qu'à stocker ton min et ton max que la boucle du dessus à trouver et en plus tu as la ligne sur laquelle il se trouvait
End Sub
Ici le seul problème est à plusieurs fois le max dans ta colonne ... Est ce que c'est le cas? Bon j'espère que ça va t'aider...
19 juin 2013 à 10:31
- la boucle :
While Cells(Ligne, 4).Value <> ""
Ligne = Ligne + 1
Wend
permet d'incrémenter Ligne tant que la cellule (Ligne, 4) n'est pas vide, elle ne sert pas à compter le nombre de lignes, cela ne m'est d'aucune utilité.
- la ligne :
Cells(i, 5).FormulaR1C1Local = "=MIN(Efforts_Portique!D" & Ligne_debut & ":Efforts_Portique!D" & Ligne - 1 & ")"
entre dans la cellule (i, 5) de la feuille "Max_par_elts" la valeur minimale trouvée dans la plage de cellules "DLigne_debut":"DLigne-1" de la feuille "Efforts_Portique". FormulaR1C1Local sert à insérer une formule dans une cellule.
Et je suis au regret de t'annoncer que ta solution ne m'aide pas, puisque ma recherche de MIN et de MAX ainsi que leur stockage fonctionnent très bien ^^ mon problème c'est l'autre valeur.
20 juin 2013 à 08:26