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

VBA qui tourne en rond

3 réponses
Avatar
Richard
Bonjour à tous,
je suis un novice en la matière et j'ai une macro avec laquelle j'ai
beaucoup de difficultée. Quelqu'un peut-il me dire oè j'ai commis l'erreur?
Sub Newmember_Correction()
'
'copie les infos du new membre
Sheets("Info").Select
Range("Y2:AG2").Select
Selection.Copy

'colle les infos ds la base données
Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Select
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

JE CROIS QUE C'EST ICI OÙ EST L'ERREUR
'Efface la ligne du fichier temporaire
Dim id, ligne As Integer
id = Worksheets("Info").Cells(4, 15).Value
With Worksheets("Temporaire")
.Activate
ligne = 10
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
Wend
End With


'Tri le fichier temporaire pour avoir une séquence
Range("A10:L200").Select
Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'efface les infos corrigés
Range("T5:T11").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("V5").Select
Application.CutCopyMode = False
Selection.ClearContents

Range("B2").Select
End Sub

Merci à tous
--
Richard

3 réponses

Avatar
Richard
Merci

J'ai fais la correction et ça fonctionne.
Question,
Pourquoi lorsque je colle les nouvelles données dans (Membres) elle
s'enregistre sur la dernière ligne. J'écrase toujours la dernière ligne.
Pourtant la macro indique (ActiveCell.Offset(0, 2).Select).

Je dois ajouter une commande avant de coller soit: Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Resize(2, 45).FillDown
--
Richard

"MichDenis" a écrit :

Bonjour Richard,

Dans ta boucle, tu dois ajouter une ligne de code
qui permet de passer à la ligne suivante sinon, tu
boucles toujours sur la même ligne...

Pour supprimer le contenu d'une cellule, il n'est pas
obligatoire de sélectionner la cellule, tu peux seulement
utiliser
Si tu veux supprimer le contenu de toute la ligne
.Cells(ligne,3).entirerow.clearcontents

Si tu veux supprimer le contenu de la cellule seulement
.Cells(ligne,3).ClearContents

Et dans les 2 cas précédents, tu n'as pas besoin de la ligne de code :
.Cells(ligne).Select

'----------------------------------------
ligne = 10
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
ligne = ligne + 1 'ligne ajoutée
Wend
'----------------------------------------


"Richard" a écrit dans le message de groupe de discussion :
Bonjour à tous,
je suis un novice en la matière et j'ai une macro avec laquelle j'ai
beaucoup de difficultée. Quelqu'un peut-il me dire oè j'ai commis l'erreur?
Sub Newmember_Correction()
'
'copie les infos du new membre
Sheets("Info").Select
Range("Y2:AG2").Select
Selection.Copy

'colle les infos ds la base données
Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Select
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse

JE CROIS QUE C'EST ICI OÙ EST L'ERREUR
'Efface la ligne du fichier temporaire
Dim id, ligne As Integer
id = Worksheets("Info").Cells(4, 15).Value
With Worksheets("Temporaire")
.Activate
ligne = 10
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
Wend
End With


'Tri le fichier temporaire pour avoir une séquence
Range("A10:L200").Select
Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

'efface les infos corrigés
Range("T5:T11").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("V5").Select
Application.CutCopyMode = False
Selection.ClearContents

Range("B2").Select
End Sub

Merci à tous
--
Richard


Avatar
Richard
J'ai essayé tes recommandations. Malheureusement ça ne fonctionne pas. Je
copie de 2 colonnes espacé et dans les colonnes A & B, les formules ne sont
pas copiés. Je n'ai autre choix de garder mes macros.

Je te remercie tout de même pour l'effort
--
Richard


"MichDenis" a écrit :

Si tu parles de cette section de ta macro :

> 'colle les infos ds la base données
> Sheets("Membres").Select
> Range("A" & Range("A9").End(xlDown).Row).Select
> ActiveCell.Offset(0, 2).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
> SkipBlanks _
> :úlse, Transpose:úlse

Tu pourrais remplacer cela par ceci :

'------------------------------------
With Sheets("Membres")
With .Range("A" & .Range("A65536").End(xlUp).Row)(2)
.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
End With
End With
'------------------------------------

Si tu préfères conserver ta macro, modifie seulement cette ligne :

Range("A" & Range("A9").End(xlDown).Row).Select
Par
Range("A" & Range("A65536").End(xlUp).Row)(2).Select







"Richard" a écrit dans le message de groupe de discussion :
Merci

J'ai fais la correction et ça fonctionne.
Question,
Pourquoi lorsque je colle les nouvelles données dans (Membres) elle
s'enregistre sur la dernière ligne. J'écrase toujours la dernière ligne.
Pourtant la macro indique (ActiveCell.Offset(0, 2).Select).

Je dois ajouter une commande avant de coller soit: Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Resize(2, 45).FillDown
--
Richard

"MichDenis" a écrit :

> Bonjour Richard,
>
> Dans ta boucle, tu dois ajouter une ligne de code
> qui permet de passer à la ligne suivante sinon, tu
> boucles toujours sur la même ligne...
>
> Pour supprimer le contenu d'une cellule, il n'est pas
> obligatoire de sélectionner la cellule, tu peux seulement
> utiliser
> Si tu veux supprimer le contenu de toute la ligne
> .Cells(ligne,3).entirerow.clearcontents
>
> Si tu veux supprimer le contenu de la cellule seulement
> .Cells(ligne,3).ClearContents
>
> Et dans les 2 cas précédents, tu n'as pas besoin de la ligne de code :
> .Cells(ligne).Select
>
> '----------------------------------------
> ligne = 10
> While .Cells(ligne, 3) <> ""
> If .Cells(ligne, 3) = id Then
> .Cells(ligne).Select
> Selection.ClearContents
> End If
> ligne = ligne + 1 'ligne ajoutée
> Wend
> '----------------------------------------
>
>
> "Richard" a écrit dans le message de groupe de discussion :
> Bonjour à tous,
> je suis un novice en la matière et j'ai une macro avec laquelle j'ai
> beaucoup de difficultée. Quelqu'un peut-il me dire oè j'ai commis l'erreur?
> Sub Newmember_Correction()
> '
> 'copie les infos du new membre
> Sheets("Info").Select
> Range("Y2:AG2").Select
> Selection.Copy
>
> 'colle les infos ds la base données
> Sheets("Membres").Select
> Range("A" & Range("A9").End(xlDown).Row).Select
> ActiveCell.Offset(0, 2).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
> SkipBlanks _
> :úlse, Transpose:úlse
>
> JE CROIS QUE C'EST ICI OÙ EST L'ERREUR
> 'Efface la ligne du fichier temporaire
> Dim id, ligne As Integer
> id = Worksheets("Info").Cells(4, 15).Value
> With Worksheets("Temporaire")
> .Activate
> ligne = 10
> While .Cells(ligne, 3) <> ""
> If .Cells(ligne, 3) = id Then
> .Cells(ligne).Select
> Selection.ClearContents
> End If
> Wend
> End With
>
>
> 'Tri le fichier temporaire pour avoir une séquence
> Range("A10:L200").Select
> Selection.Sort Key1:=Range("B10"), Order1:=xlAscending, Header:=xlGuess, _
> OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
> DataOption1:=xlSortNormal
>
> 'efface les infos corrigés
> Range("T5:T11").Select
> Application.CutCopyMode = False
> Selection.ClearContents
> Range("V5").Select
> Application.CutCopyMode = False
> Selection.ClearContents
>
> Range("B2").Select
> End Sub
>
> Merci à tous
> --
> Richard


Avatar
Daniel.C
Bonjour.
Si tu veux recopier tes formules, remplace "xlPasteValues" par
"xlPasteFormulas" dans la ligne :
Selection.PasteSpecial Paste:=xlPasteValues (tu peux supprimer le reste
de la commande).
D'autre part, dans la partie :
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
Wend
il faut que tu incrémentes la variable "ligne" sous peine de boucle.
Cordialement.
Daniel


J'ai essayé tes recommandations. Malheureusement ça ne fonctionne pas. Je
copie de 2 colonnes espacé et dans les colonnes A & B, les formules ne sont
pas copiés. Je n'ai autre choix de garder mes macros.

Je te remercie tout de même pour l'effort
--
Richard


"MichDenis" a écrit :

Si tu parles de cette section de ta macro :

'colle les infos ds la base données
Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Select
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse



Tu pourrais remplacer cela par ceci :

'------------------------------------
With Sheets("Membres")
With .Range("A" & .Range("A65536").End(xlUp).Row)(2)
.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:úlse
End With
End With
'------------------------------------

Si tu préfères conserver ta macro, modifie seulement cette ligne :

Range("A" & Range("A9").End(xlDown).Row).Select
Par
Range("A" & Range("A65536").End(xlUp).Row)(2).Select







"Richard" a écrit dans le message de
groupe de discussion :
Merci

J'ai fais la correction et ça fonctionne.
Question,
Pourquoi lorsque je colle les nouvelles données dans (Membres) elle
s'enregistre sur la dernière ligne. J'écrase toujours la dernière ligne.
Pourtant la macro indique (ActiveCell.Offset(0, 2).Select).

Je dois ajouter une commande avant de coller soit: Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Resize(2, 45).FillDown
--
Richard

"MichDenis" a écrit :

Bonjour Richard,

Dans ta boucle, tu dois ajouter une ligne de code
qui permet de passer à la ligne suivante sinon, tu
boucles toujours sur la même ligne...

Pour supprimer le contenu d'une cellule, il n'est pas
obligatoire de sélectionner la cellule, tu peux seulement
utiliser
Si tu veux supprimer le contenu de toute la ligne
.Cells(ligne,3).entirerow.clearcontents

Si tu veux supprimer le contenu de la cellule seulement
.Cells(ligne,3).ClearContents

Et dans les 2 cas précédents, tu n'as pas besoin de la ligne de code :
.Cells(ligne).Select

'----------------------------------------
ligne = 10
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
ligne = ligne + 1 'ligne ajoutée
Wend
'----------------------------------------


"Richard" a écrit dans le message de
groupe de discussion :
Bonjour à tous, je
suis un novice en la matière et j'ai une macro avec laquelle j'ai beaucoup
de difficultée. Quelqu'un peut-il me dire oè j'ai commis l'erreur? Sub
Newmember_Correction() '
'copie les infos du new membre
Sheets("Info").Select
Range("Y2:AG2").Select
Selection.Copy

'colle les infos ds la base données
Sheets("Membres").Select
Range("A" & Range("A9").End(xlDown).Row).Select
ActiveCell.Offset(0, 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse

JE CROIS QUE C'EST ICI OÙ EST L'ERREUR
'Efface la ligne du fichier temporaire
Dim id, ligne As Integer
id = Worksheets("Info").Cells(4, 15).Value
With Worksheets("Temporaire")
.Activate
ligne = 10
While .Cells(ligne, 3) <> ""
If .Cells(ligne, 3) = id Then
.Cells(ligne).Select
Selection.ClearContents
End If
Wend
End With


'Tri le fichier temporaire pour avoir une séquence
Range("A10:L200").Select
Selection.Sort Key1:=Range("B10"), Order1:=xlAscending,
Header:=xlGuess, _ OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom, _ DataOption1:=xlSortNormal

'efface les infos corrigés
Range("T5:T11").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("V5").Select
Application.CutCopyMode = False
Selection.ClearContents

Range("B2").Select
End Sub

Merci à tous
--
Richard