Copier une valeur si la cellule de gauche n'est pas vide
Fermé
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
-
15 janv. 2015 à 20:08
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 - 19 janv. 2015 à 09:42
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 - 19 janv. 2015 à 09:42
A voir également:
- Si cellule non vide alors copier
- Excel cellule couleur si condition texte - Guide
- Supprimer page word vide - Guide
- Si cellule contient texte alors ✓ - Forum Excel
- Excel si cellule contient partie texte ✓ - Forum Excel
- Comment copier une vidéo youtube - Guide
4 réponses
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
16 janv. 2015 à 09:53
16 janv. 2015 à 09:53
Salut !
Tente le Débogage quand ça bloque, ça t'indique à quel niveau ;)
Dans ton cas, la première ligne n'est pas bien définie :
If Range("B"&i) <> "" Then
Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets(TAFEUILLE).Range("B" & Rows.Count).End(xlUp).Row
If Sheets(TAFEUILLE).Range("B"&i).Value <> "" Then
For i=1 to DernLigne
'tu mets ici ton code pour copier-coller
(...)
Next i
End If
Par ailleurs, je t'invite à préciser .Value ou .Text après Range(...) pour que ce soit bien le contenu de la cellule qui doit être non vide.
Dis-moi si ça te convient :)
Tente le Débogage quand ça bloque, ça t'indique à quel niveau ;)
Dans ton cas, la première ligne n'est pas bien définie :
If Range("B"&i) <> "" Then
Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets(TAFEUILLE).Range("B" & Rows.Count).End(xlUp).Row
If Sheets(TAFEUILLE).Range("B"&i).Value <> "" Then
For i=1 to DernLigne
'tu mets ici ton code pour copier-coller
(...)
Next i
End If
Par ailleurs, je t'invite à préciser .Value ou .Text après Range(...) pour que ce soit bien le contenu de la cellule qui doit être non vide.
Dis-moi si ça te convient :)
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 035
16 janv. 2015 à 17:59
16 janv. 2015 à 17:59
Bonjour, merci pour ta réponse.
Je connais le débogage mais je ne comprends pas toujours ce qui ne va pas (je ne suis pas très fort en VBA).
Sinon, tu mets deux fois IF et ça dérange Excel!
Je connais le débogage mais je ne comprends pas toujours ce qui ne va pas (je ne suis pas très fort en VBA).
Sinon, tu mets deux fois IF et ça dérange Excel!
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
16 janv. 2015 à 18:01
16 janv. 2015 à 18:01
je n'ai pas saisi ta réponse ^^'
As-tu essayé de définir le i avec mon conseil ou autre ?
Où ai-je mis deux fois IF ?
As-tu essayé de définir le i avec mon conseil ou autre ?
Où ai-je mis deux fois IF ?
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 035
16 janv. 2015 à 18:20
16 janv. 2015 à 18:20
En fait, j'ai tout recopié mais je me suis planté, j'ai laissé une ligne en trop!
En fait, j'ai ce code
Excel me dit que la ligne "If Sheets("Archives").Range("B" & i).Value <> "" Then" (en gras dans le code) ne va pas (erreur 1004)
Tu as une idée?
En fait, j'ai ce code
Sub Archivage()
'
' Archivage Macro
'
'
If Application.CountA(Range("C6:I12")) = 0 Then
'Si la plage C6:I12 est vide, on n'exécute pas la macro
MsgBox "Aucune heure n'a été saisie!", vbCritical + vbOKOnly, "Application de paie"
'Affiche un message d'erreur
Else: Range("A6:I12").Select
'Sinon, la macro est exécutée
Application.CutCopyMode = False
Selection.Copy
Sheets("Archives").Select
'Sélection de la feuille "Archives"
Range("B65000").End(xlUp).Offset(1).Select
'ici tu colles
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C40").Select
Sheets("Saisie").Select
Range("L6:O12").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Archives").Select
Range("B65000").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
'Il faut définir ton i sans quoi ça ne fonctionnera pas. Par exemple tu peux utiliser :
'Calcul de la dernière ligne non vide de la colonne B
Dim DernLigne As Long
DernLigne = Sheets("Archives").Range("B" & Rows.Count).End(xlUp).Row
If Sheets("Archives").Range("B" & i).Value <> "" Then
For i = 1 To DernLigne
'tu mets ici ton code pour copier-coller
Sheets("Saisie").Select
Range("A2").Select
'Sélectionne la cellule A2
Application.CutCopyMode = False
Selection.Copy
'Copie
Sheets("Archives").Select
'Ouvre la feuille "Archives"
Range("A65000").End(xlUp).Offset(1).Select
'Offset = décalage
Selection.PasteSpecial Paste:=xlPasteValues
Next i
End If
Sheets("Saisie").Select
'Ouvre la feuille "Saisie"
Range("C6:I12").Select
Selection.ClearContents
Range("L6:O12").Select
Selection.ClearContents
Range("C6").Select
End Sub
Excel me dit que la ligne "If Sheets("Archives").Range("B" & i).Value <> "" Then" (en gras dans le code) ne va pas (erreur 1004)
Tu as une idée?
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
16 janv. 2015 à 18:23
16 janv. 2015 à 18:23
AAAh je me suis trompé, il faut mettre cette ligne APRES avoir défini i, soit dans cet ordre :
For i = 1 To DernLigne
If Sheets("Archives").Range("B" & i).Value <> "" Then
N.B: mon premier code n'était qu'une piste à adapter, je n'ai pas eu le temps de prendre en compte ton cas précis..
For i = 1 To DernLigne
If Sheets("Archives").Range("B" & i).Value <> "" Then
N.B: mon premier code n'était qu'une piste à adapter, je n'ai pas eu le temps de prendre en compte ton cas précis..
tyranausor
Messages postés
3545
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
1 avril 2022
2 035
Modifié par tyranausor le 16/01/2015 à 19:22
Modifié par tyranausor le 16/01/2015 à 19:22
Dans ces lignes de code, je ne sais pas exactement ce qui ne va pas
Pour résumer, tout se copie comme il faut la plage qui doit être copiée et la cellule A2) mais la recopie (code en gras) ne donne rien!
Sheets("Saisie").Select
'Sélectionne la feuille "Saisie"
Range("A2").Select
'Sélectionne la cellule A2
Application.CutCopyMode = False
Selection.Copy
'Copie la valeur
Sheets("Archives").Select
'Ouvre la feuille "Archives"
Range("A65000").End(xlUp).Offset(1).Select
'Offset = décalage
Selection.PasteSpecial Paste:=xlPasteValues
'Et la colle à la dernière ligne vide (dans ma feuille A6)
End If
Dim DernLigne As Long
DernLigne = Sheets("Archives").Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To DernLigne
'De la ligne 1 à la dernière ligne (je ne sais si j'ai bien traduit)
If Sheets("Archives").Range("B" & i).Value <> "" Then
'Si dans la feuille "Archives", la cellule Bx n'est pas vide, alors
Range("b" & i) = Range("b" & i).Offset(0, 1)
End If
Next i
Pour résumer, tout se copie comme il faut la plage qui doit être copiée et la cellule A2) mais la recopie (code en gras) ne donne rien!
Theo.R
Messages postés
575
Date d'inscription
vendredi 11 juillet 2014
Statut
Membre
Dernière intervention
30 mars 2016
31
19 janv. 2015 à 09:42
19 janv. 2015 à 09:42
Je ne comprends pas pourquoi mais en testant j'arrive à un bon résultat si je rédige la fonction Offset comme suit :
Range("B" & i) = Range("B" & i).Offset(rowOffset:=0, columnOffset:=1)
Essaie de ton côté si ça marche aussi :)
Range("B" & i) = Range("B" & i).Offset(rowOffset:=0, columnOffset:=1)
Essaie de ton côté si ça marche aussi :)