copier des valeurs de cellules adjacentes sous condition
#1
Débutant XLPages

Inscription: 31/07/2011

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 02-08-2011 11h50
Bonjour Forum, 
Voici mon petit problème de ce jour (mon pain quotidien). J'ai deux colonnes adjacentes de données en C et D. 
Lorsqu'il n'y a rien dans la cellule de la colonne C, il y a nécessairement quelque chose dans la colonne D, et j'aimerais qu'il m'en copie le contenu. 

J'ai essayé avec le code suivant avec des résultats pour le moins déroutants.

        Sub regrouper()
           Sheets("inter").Select
     Dim r As Integer
Dim c As Integer
For Each cell In Range([C1], [C65356].End(xlUp))
If cell.Value = "" Then
r = cell.Row
c = cell.Column
cell.Offset(0, 1).Copy Cells(r, c)
End If
Next
   End Sub

En effet, ça fonctionne de manière erratique.. pour certaines cellules, ça fonctionne, pour d'autres, non. J'ai regardé les formats de colonne et n'ai trouvé que du "standard" partout. Grande est ma perplexité....  

Je suis à peu près convaincu après différents essais que c'est à cause d'un "formatage caché" de mes cellules. les données proviennent de copier-coller de différentes sources sur internet. 

merci de vos réponses :)




Edité par xav le 02/08/2011 12:13:18
Hors Ligne
Rapport   Haut 

Re: copier des valeurs de cellules adjacentes sous condition
#2
Débutant XLPages

Inscription: 31/07/2011

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 02-08-2011 13h46
... petit edit pour me répondre à moi-même et en faire profiter éventuellement à d'autres forumeurs.
Mon diagnostic était à peu près "bon"... c'est bien une question de format de cellule. J'ai donc trouvé une solution : si je copicole mon tableau de données seulement avec les valeurs, la macro fonctionne. 

C'est donc vraisemblablement une question de formatage "caché" de certaines cellules. Je dis "caché" parce que (et cela est un peu inquiétant), on ne voit pas de différences de format entre les cellules lorsqu'on édite le format de cellule de la colonne entière -- et pas plus lorsqu'on édite les cellules individuellement, qui pour certaines, acceptent le copicole, et d'autres non ! 

Si d'aucuns voudraient répondre à l'adaptation de la macro avec des formats de cellule différents, je reste preneur d'une soluce. 
merci au forum. 

Hors Ligne
Rapport   Haut 

Re: copier des valeurs de cellules adjacentes sous condition
#3
Accro XLPages

Inscription: 09/05/2007
De Courcelles-les-Montbéliard

Messages: 286

Système d'exploitation:
PC & Mac
Version Excel utilisée:
Mac 2004 - 2011, et PC 2003 - 2010
Posté le : 02-08-2011 14h01
Bonjour xav, Didier, le forum

Attention dans le choix de la sélection de la plage utilise la colonne D et non la colonne C, la méthode .end(xlup) remonte à la dernière cellule contenant une donnée, ceci en fonction de l'objet de départ. (elle correspond à la combinaison de touche Ctrl+fléche du haut, dans excel).

Ci-joint trois codes différents en appliquant des petites corrections et un en appliquant une commande SpecialCells que Mireille t'a montré hier dans son code, cette commande correspond à la boîte de dialogue que tu retrouves dans le menu Edition/atteindre... puis en cliquant sur le bouton "cellules..."dans la boîte de dialogue. Cela diminue les temps de traitements et évitent l'écrasement de données.
Sub Code1()
    Sheets("inter").Select
    For Each x In Range("D1", Range("D65000").End(xlUp).Offset(0, -1))
    ' la méthode .value de l'objet n'a pas une obligation à être écrite, elle est dîte implicite
    ' x = "" teste bien la valeur de l' objet
        If x = "" Then
            ' la méthode offset permet de faire un décalage de l'objet en X et en Y
            x = x.Offset(0, 1)
            ' ce n'est pas l'objet qui a été copié mais uniquement la valeur
            ' pour le format
            x.NumberFormat = x.Offset(0, 1).NumberFormat
        End If
        'attention a spécifié la variable de la fonction next
    Next x
End Sub

Sub Code2()
Sheets("inter").Select
For Each Cell In Range([D1], [D65356].End(xlUp))
    ' la méthode .value de l'objet n'a pas une obligation à être écrite, elle est dîte implicite
    ' x = "" teste bien la valeur de l' objet
    If Cell.Offset(0, -1) = "" Then
        'on copie l' object et le colle dans l'objet de destination
        Cell.Copy Cell.Offset(0, -1)
    End If
Next Cell
End Sub

Sub MacroXAV()
Sheets("inter").Select
' premier temps Range("D1", Range("D65000").End(xlUp)) permet de selection la plage des données disponibles dans la colonne D
' deuxième temps .Offset(0, -1) fait un décalage de la plage d'une colonne
' troisième temps .SpecialCells(xlCellTypeBlanks) fait un filtre des cellules vides de la plage des cellules de la colonne C
' quatrième temps .Select fait une sélection de ces cellules
Range("D1", Range("D65000").End(xlUp)).Offset(0, -1).SpecialCells(xlCellTypeBlanks).Select
' à partir de la sélection
For Each Cell In Selection
    ' on copie l' object et le colle dans l'objet de destination
    Cell.Offset(0, 1).Copy Cell.Offset
Next Cell
End Sub

Comme pour beaucoup de choses l'apprentissage du VBA, c'est en premier lieu beaucoup de boulot, et le premier professeur est l' enregistreur de macro et ensuite de lire le code retourné.

Regarde sur ce site les tutoriels de Didier, mais je suppose que tu l'as déjà fait...

@+Jean-Marie 
Hors Ligne
Rapport   Haut 

Re: copier des valeurs de cellules adjacentes sous condition
#4
Débutant XLPages

Inscription: 31/07/2011

Messages: 11

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 04-08-2011 21h31
merci Jean-Marie,
en effet je suis les tutos de Didier mais après, faut extrapoler et adapter à la situation...  
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes