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

Copier ligne selon SOMMEPROD

17 réponses
Avatar
Guy85
Bonjour,
Je m'explique:
Actuellement j'ai la formule suivante:
=SOMMEPROD((Janvier!$B$3:$B$70="Cpam")*Janvier!$G$3:$G$70).
cela me copie donc la somme ou il y a le texte "Cpam".
Par contre, je souhaiterais (au lieu de n'avoir que le somme) avoir la ligne
entière).
Est-ce possible ?
Merci de votre aide
Cordialement
Guy

7 réponses

1 2
Avatar
michdenis
Sub test()
Dim Trouve As Range, T As Variant
Dim Mot As String, Adr As String
Dim NomFeuille As Variant, Sh As Worksheet

On Error Resume Next
Do
NomFeuille = Application.InputBox _
(Prompt:="Nom de la feuille", Type:=2)
If NomFeuille = False Then
MsgBox "Opération annulée."
Exit Sub
Else
Set Sh = Worksheets(NomFeuille)
If Err <> 0 Then
Err = 0
MsgBox "Ce nom d'onglet de feuille est " & _
"inexistant." & vbCrLf & vbCrLf & _
"Choisissez un autre nom.", vbCritical _
+ vbOKOnly, "Attention"
NomFeuille = ""
End If
End If
Loop Until NomFeuille <> ""

Mot = "Cpam"
With Sh
With .Range("B3:G70")
Set Trouve = .Find(what:=Mot, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
X = Worksheets("Feuil2").Range("b65536").End(xlUp).Row + 1
T = Trouve.Resize(, .Columns.Count)
Worksheets("Feuil2").Range("B" & X).Resize(, UBound(T, 2)) = T
Set Trouve = .FindNext(Trouve)
Loop Until Adr = Trouve.Address
End If
End With
End With
End Sub
Avatar
Guy85
Bonjour Denis,
C'est presque ça.
Effectivement, je peux choisir la feuille (ça me conviens parfaitement).
Par contre, je n'ai pas de boite de dialogue pour choisir le "Mot" (Cpam ou
Médecin ou Spécialiste ou infirmière etc......)
Je l'ai mis dans mon précédent message, peut être zappé ?
Possible ?
Merci de ton aide

"michdenis" a écrit dans le message de news:
u%
Sub test()
Dim Trouve As Range, T As Variant
Dim Mot As String, Adr As String
Dim NomFeuille As Variant, Sh As Worksheet

On Error Resume Next
Do
NomFeuille = Application.InputBox _
(Prompt:="Nom de la feuille", Type:=2)
If NomFeuille = False Then
MsgBox "Opération annulée."
Exit Sub
Else
Set Sh = Worksheets(NomFeuille)
If Err <> 0 Then
Err = 0
MsgBox "Ce nom d'onglet de feuille est " & _
"inexistant." & vbCrLf & vbCrLf & _
"Choisissez un autre nom.", vbCritical _
+ vbOKOnly, "Attention"
NomFeuille = ""
End If
End If
Loop Until NomFeuille <> ""

Mot = "Cpam"
With Sh
With .Range("B3:G70")
Set Trouve = .Find(what:=Mot, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
X = Worksheets("Feuil2").Range("b65536").End(xlUp).Row + 1
T = Trouve.Resize(, .Columns.Count)
Worksheets("Feuil2").Range("B" & X).Resize(, UBound(T,
2)) = T
Set Trouve = .FindNext(Trouve)
Loop Until Adr = Trouve.Address
End If
End With
End With
End Sub


Avatar
michdenis
Sub test()
Dim Trouve As Range, T As Variant
Dim Mot As Variant, Adr As String
Dim NomFeuille As Variant, Sh As Worksheet

On Error Resume Next
Mot = Application.InputBox("Prompt:=Expression recherchée.", Type:=3)
If Mot = "" Then Exit Sub
If Mot = False Then
MsgBox "Opération annulée."
Exit Sub
End If

Do
NomFeuille = Application.InputBox _
(Prompt:="Nom de la feuille", Type:=2)
If NomFeuille = False Then
MsgBox "Opération annulée."
Exit Sub
Else
Set Sh = Worksheets(NomFeuille)
If Err <> 0 Then
Err = 0
MsgBox "Ce nom d'onglet de feuille est " & _
"inexistant." & vbCrLf & vbCrLf & _
"Choisissez un autre nom.", vbCritical _
+ vbOKOnly, "Attention"
NomFeuille = ""
End If
End If
Loop Until NomFeuille <> ""


With Sh
With .Range("B3:G70")
Set Trouve = .Find(what:=Mot, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
X = Worksheets("Feuil2").Range("b65536").End(xlUp).Row + 1
T = Trouve.Resize(, .Columns.Count)
Worksheets("Feuil2").Range("B" & X).Resize(, UBound(T, 2)) = T
Set Trouve = .FindNext(Trouve)
Loop Until Adr = Trouve.Address
End If
End With
End With
End Sub
Avatar
Guy85
Bonjour,
C'est tout à fait ça.
Trop fort!!!
Merci encore de ton aide.
Cordialement

"michdenis" a écrit dans le message de news:

Sub test()
Dim Trouve As Range, T As Variant
Dim Mot As Variant, Adr As String
Dim NomFeuille As Variant, Sh As Worksheet

On Error Resume Next
Mot = Application.InputBox("Prompt:=Expression recherchée.", Type:=3)
If Mot = "" Then Exit Sub
If Mot = False Then
MsgBox "Opération annulée."
Exit Sub
End If

Do
NomFeuille = Application.InputBox _
(Prompt:="Nom de la feuille", Type:=2)
If NomFeuille = False Then
MsgBox "Opération annulée."
Exit Sub
Else
Set Sh = Worksheets(NomFeuille)
If Err <> 0 Then
Err = 0
MsgBox "Ce nom d'onglet de feuille est " & _
"inexistant." & vbCrLf & vbCrLf & _
"Choisissez un autre nom.", vbCritical _
+ vbOKOnly, "Attention"
NomFeuille = ""
End If
End If
Loop Until NomFeuille <> ""


With Sh
With .Range("B3:G70")
Set Trouve = .Find(what:=Mot, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
X = Worksheets("Feuil2").Range("b65536").End(xlUp).Row + 1
T = Trouve.Resize(, .Columns.Count)
Worksheets("Feuil2").Range("B" & X).Resize(, UBound(T,
2)) = T
Set Trouve = .FindNext(Trouve)
Loop Until Adr = Trouve.Address
End If
End With
End With
End Sub




Avatar
Guy85
Excuse, me revoilà.
Ça ne me prend pas les mots composés. (exemple : Général Optique)
Que faut il changer ?

"michdenis" a écrit dans le message de news:

Sub test()
Dim Trouve As Range, T As Variant
Dim Mot As Variant, Adr As String
Dim NomFeuille As Variant, Sh As Worksheet

On Error Resume Next
Mot = Application.InputBox("Prompt:=Expression recherchée.", Type:=3)
If Mot = "" Then Exit Sub
If Mot = False Then
MsgBox "Opération annulée."
Exit Sub
End If

Do
NomFeuille = Application.InputBox _
(Prompt:="Nom de la feuille", Type:=2)
If NomFeuille = False Then
MsgBox "Opération annulée."
Exit Sub
Else
Set Sh = Worksheets(NomFeuille)
If Err <> 0 Then
Err = 0
MsgBox "Ce nom d'onglet de feuille est " & _
"inexistant." & vbCrLf & vbCrLf & _
"Choisissez un autre nom.", vbCritical _
+ vbOKOnly, "Attention"
NomFeuille = ""
End If
End If
Loop Until NomFeuille <> ""


With Sh
With .Range("B3:G70")
Set Trouve = .Find(what:=Mot, LookIn:=xlValues, _
lookat:=xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
X = Worksheets("Feuil2").Range("b65536").End(xlUp).Row + 1
T = Trouve.Resize(, .Columns.Count)
Worksheets("Feuil2").Range("B" & X).Resize(, UBound(T,
2)) = T
Set Trouve = .FindNext(Trouve)
Loop Until Adr = Trouve.Address
End If
End With
End With
End Sub




Avatar
michdenis
| Ça ne me prend pas les mots composés. (exemple : Général Optique)
| Que faut il changer ?

Et oh capitaine ! Que d'accusations ! Et pourtant, elles ne sont pas fondées.
La procédure soumise fonctionne très bien avec plus d'un mot sans
aucun problème. La procédure n'est pas sensible à la casse.

La question que tu devrais te poser, est-ce possible que tu aies
des espaces (chr(32) avant "général" ou après "optique" ? L'espace entre
les mots "Général" et "Optique" représente-t-il le caractère ascii 32 ou 160 ?
Le chr(32) -> espace créé avec la barre d'espacement
le chr(160) -> représente un espace insécable

Lorsque tu saisis l'expression dans la boîte de dialogue, tu utilises le chr(32)
si dans la cellule le caractère espace utilisé est chr(160), cela ne fonctionnera
pas, car la procédure ne trouvera rien.
Avatar
Guy85
Heueueueu........comment dirais-je...........excuse-moi du dérangement ?
Effectivement, il devais y avoir un défaut dans l'une de mes saisies.
Ça fonctionne.
Je n'ai rien dis.................................
Merci
Cordialement
Guy


"michdenis" a écrit dans le message de news:


| Ça ne me prend pas les mots composés. (exemple : Général Optique)
| Que faut il changer ?

Et oh capitaine ! Que d'accusations ! Et pourtant, elles ne sont pas
fondées.
La procédure soumise fonctionne très bien avec plus d'un mot sans
aucun problème. La procédure n'est pas sensible à la casse.

La question que tu devrais te poser, est-ce possible que tu aies
des espaces (chr(32) avant "général" ou après "optique" ? L'espace entre
les mots "Général" et "Optique" représente-t-il le caractère ascii 32 ou
160 ?
Le chr(32) -> espace créé avec la barre d'espacement
le chr(160) -> représente un espace insécable

Lorsque tu saisis l'expression dans la boîte de dialogue, tu utilises le
chr(32)
si dans la cellule le caractère espace utilisé est chr(160), cela ne
fonctionnera
pas, car la procédure ne trouvera rien.



1 2