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

Aide Macro de F. FORCET

2 réponses
Avatar
Sebastien de Vienne
SAlut Francois

J'ai une petite modif à faire de ta macro. Actuellement toutes les cellules
de A83 à A65535 sont effacées au debut de la macro. J'ai rajouté un tableau à
partir de la cellule A103. Lorsque je lance la macro, Excel me supprime le
contenu des cellules de ce tableau (et je en veux pas !!)

JB m'a modifié le debut de la macro afin d'effacer seulement de A83 à A102.
Mais il pb maintenant. Lorsque j'exécuter la macro, les résultats de la macro
ne s'inscrivent pas dès la cellule A83 mais seulement après la derniere
cellule non vide de mon tableau, c'est à dire dès A110...

Je te remets ta macro pour me dire d'où cela peut provenir !! :

Merci encore

Sub OT()
'
' Macro1 Macro
' Macro enregistrée le 18/03/2008 par FORCET

'Préparation

Donnée = ""
Recherche = Sheets("SYNTHESE C").Range("B3")
Sheets("SYNTHESE C").Range("A83:A102").ClearContents


'Traitement Onglet POINTAGE
Sheets("POINTAGE").Activate
Selection.AutoFilter
Range("A8").Activate
On Error Resume Next
Range("A8", "A" & Range("A65535").End(xlUp).Row).Find(What:=Recherche,
After:=Range("A8"), LookIn:=xlValues _
, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
If ActiveCell.Address <> Range("A8").Address Then
Départ = ActiveCell.Address
If Donnée Like "*-" & Range("B" & ActiveCell.Row) & "-*" = False And ("C" &
ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("B" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("B" & ActiveCell.Row) & "-"
End If
For i = 1 To Range("A65535").End(xlUp).Row
Range("A8", "A" &
Range("A65535").End(xlUp).Row).FindNext(After:=ActiveCell).Activate
If ActiveCell.Address <> Départ Then
If Donnée Like "*-" & Range("B" & ActiveCell.Row) & "-*" = False And
Range("C" & ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("B" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("B" & ActiveCell.Row) & "-"
End If
Else
Exit For
End If
Next
End If
Rows(8).AutoFilter
'Traitement Onglet MATERIEL

Sheets("MATERIEL").Activate
Selection.AutoFilter
Range("C3").Activate
On Error Resume Next
Range("C3", "C" & Range("C65535").End(xlUp).Row).Find(What:=Recherche,
After:=Range("C3"), LookIn:=xlValues _
, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
If ActiveCell.Address <> Range("C3").Address Then
Départ = ActiveCell.Address
If Donnée Like "*-" & Range("G" & ActiveCell.Row) & "-*" = False And ("H" &
ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("G" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("G" & ActiveCell.Row) & "-"
End If
For i = 1 To Range("C65535").End(xlUp).Row
Range("C3", "C" &
Range("C65535").End(xlUp).Row).FindNext(After:=ActiveCell).Activate
If ActiveCell.Address <> Départ Then
If Donnée Like "*-" & Range("G" & ActiveCell.Row) & "-*" = False And
Range("H" & ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("G" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("G" & ActiveCell.Row) & "-"
End If
Else
Exit For
End If
Next
End If
Rows(3).AutoFilter
'Traitement Onglet LOCATION

Sheets("LOCATION").Activate
Selection.AutoFilter
Range("C3").Activate
On Error Resume Next
Range("C3", "C" & Range("C65535").End(xlUp).Row).Find(What:=Recherche,
After:=Range("C3"), LookIn:=xlValues _
, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
If ActiveCell.Address <> Range("C3").Address Then
Départ = ActiveCell.Address
If Donnée Like "*-" & Range("G" & ActiveCell.Row) & "-*" = False And ("H" &
ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("G" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("G" & ActiveCell.Row) & "-"
End If
For i = 1 To Range("C65535").End(xlUp).Row
Range("C3", "C" &
Range("C65535").End(xlUp).Row).FindNext(After:=ActiveCell).Activate
If ActiveCell.Address <> Départ Then
If Donnée Like "*-" & Range("G" & ActiveCell.Row) & "-*" = False And
Range("H" & ActiveCell.Row) = "I" Then
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) = Range("G" &
ActiveCell.Row)
Donnée = Donnée & "-" & Range("G" & ActiveCell.Row) & "-"
End If
Else
Exit For
End If
Next
End If
Rows(3).AutoFilter
Sheets("SYNTHESE C").Activate
Range("A83", "A" & Range("A65535").End(xlUp).Row).Sort Key1:=Range("A83"),
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Worksheets("SYNTHESE C").Range("O83:O183").Rows.AutoFit
'
End Sub

2 réponses

Avatar
francois.forcet
Salut Sébastien

Les lignes de code qui rapporte les résultats sont :

Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) =
Range("B" &
ActiveCell.Row)
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) =
Range("G" &
ActiveCell.Row)

La partie qui positionne la cellule à recevoir la donnée suivante
est :

Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0)

Feuille "SYNTHESE C" la première cellule ayant une donnée partant du
bas de la feuille colonne A ("A65535") vers le haut (End(xlup)) et
décalée d'une ligne vers le bas (Offset(1,0)) pour prendre la cellule
suivante libre

Donc effectivement si tu as rajouté un tableau les résutats se mettent
juste aprés

Je te propose pour mettre les résultats juste au dessus de ce tableau
de détecter la cellule libre en partant non pas du bas de la feuille
mais de la cellule A102 et en utilisant le même principe
Ce qui donne :

Sheets("SYNTHESE C").Range("A102").End(xlUp).Offset(1, 0) = Range("B"
&
ActiveCell.Row)
Sheets("SYNTHESE C").Range("A102").End(xlUp).Offset(1, 0) = Range("G"
&
ActiveCell.Row)

Il suffit de remplacer les bonnes lignes par celles là

Remplaces tout simplement dans ces lignes :

Range("A65535")

par

Range("A102")

Par contre le nombre de résultats ne peux éxcéder 20 représentants
étant limité par la plage (A83 à A102)

Celà devrait convenir malgré tout ????

Dis moi !!!!!
Avatar
Sebastien de Vienne
Comme d'hab tu es le meilleur !! Merci encore Francois

a+


Salut Sébastien

Les lignes de code qui rapporte les résultats sont :

Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) > Range("B" &
ActiveCell.Row)
Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0) > Range("G" &
ActiveCell.Row)

La partie qui positionne la cellule à recevoir la donnée suivante
est :

Sheets("SYNTHESE C").Range("A65535").End(xlUp).Offset(1, 0)

Feuille "SYNTHESE C" la première cellule ayant une donnée partant du
bas de la feuille colonne A ("A65535") vers le haut (End(xlup)) et
décalée d'une ligne vers le bas (Offset(1,0)) pour prendre la cellule
suivante libre

Donc effectivement si tu as rajouté un tableau les résutats se mettent
juste aprés

Je te propose pour mettre les résultats juste au dessus de ce tableau
de détecter la cellule libre en partant non pas du bas de la feuille
mais de la cellule A102 et en utilisant le même principe
Ce qui donne :

Sheets("SYNTHESE C").Range("A102").End(xlUp).Offset(1, 0) = Range("B"
&
ActiveCell.Row)
Sheets("SYNTHESE C").Range("A102").End(xlUp).Offset(1, 0) = Range("G"
&
ActiveCell.Row)

Il suffit de remplacer les bonnes lignes par celles là

Remplaces tout simplement dans ces lignes :

Range("A65535")

par

Range("A102")

Par contre le nombre de résultats ne peux éxcéder 20 représentants
étant limité par la plage (A83 à A102)

Celà devrait convenir malgré tout ????

Dis moi !!!!!